- PR -

暗号化したデータの存在するテーブルのインポート、エクスポート

投稿者投稿内容
a-zma
会議室デビュー日: 2007/06/04
投稿数: 16
投稿日時: 2007-06-06 16:49
>×複合化
>○復号化
あらら…、お恥ずかしい。

未記人さん、ご指摘ありがとうございます。
未記入
会議室デビュー日: 2006/03/22
投稿数: 19
投稿日時: 2007-06-07 16:01
SJISのシングルバイト文字としてありえない領域[0x81..0x9F]|[0xE0..0xFF]が
切捨てられるようです。
SQL> create table a (a varchar2(10));
表が作成されました。
SQL> insert into a values (chr(147));
1行が作成されました。
SQL> select * from a;
ERROR:
ORA-29275: 不完全なマルチバイト文字です

上の例で簡単に不適切か判断できますが expの段階ではちゃんと格納されています。
CTASしても問題なくコピーされます。
imp側で切り捨てしているので、あとはサポートに行きかな?
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-06-07 16:30
9.2 くらいから、マルチバイト文字の片割れのようなデータを切り捨てるように
仕様が変わってます。
で、詳しくは書けませんが不具合ではないという扱いのようです(切り捨ての
仕様のからみで)。

暗号化したデータを一旦 RAW とかのバイナリ型データとしてデータベースに
持たせてから exp で抜き出すか、そのデータだけ別途持ってくる、みたいな
方法で回避するしか無さそうです。


_________________
もしもし@RMAN 友の会

[ メッセージ編集済み 編集者: もしもし 編集日時 2007-06-07 16:31 ]
a-zma
会議室デビュー日: 2007/06/04
投稿数: 16
投稿日時: 2007-06-08 10:42
返信が遅くなってしまいすいません。

Tetraさん、もしもしさん、ありがとうございます。

>9.2 くらいから、マルチバイト文字の片割れのようなデータを切り捨てるように
>仕様が変わってます。
Oracleクライアントのバージョンによって動作が異なったのは、こういう事だった
のですね。納得です。

>暗号化したデータを一旦 RAW とかのバイナリ型データとしてデータベースに
>持たせてから exp で抜き出すか、そのデータだけ別途持ってくる、みたいな
>方法で回避するしか無さそうです。
UTL_RAW.CAST_TO_RAWでバイナリ型データとして保存しなおし、exp/impしたところ
オラクル9iクライアント環境下でも正常に処理できました。

>3DES の結果は通常バイナリ
これからは、最初からRAWやBLOB型で保存するような設計にします。

Tetraさん、色々と検証して下さりありがとうございました。
知恵を貸してくださった皆様、本当にありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)