Appendix
3. CREATE AS SELECT + 元表削除(DROP) + RENAME
4. ALTER TABLE <表名> MOVE TABLESPACE <表領域名>)
※ 索引等のメンテナンスも必須
オンライン状態で実施
1.
オンライン表再定義(Enterprise Edition機能)2.
オンライン・セグメント縮小(標準機能)HWM を下げるオペレーション
オンライン・セグメント縮小
– 業務でテーブルを利用中でもセグメント縮小が可能
– 自動セグメント領域管理(ASSM)のみ利用可能
オンライン・セグメント縮小
ALTER TABLE <
表名> ENABLE ROW MOVEMENT;
ALTER TABLE <表名> SHRINK SPACE[CASCADE];
① ②
データの移動 HWMの移動
③
領域の解放 空き領域
HWM
Appendix
Oracle Database からの
CSV アンロード
なぜ CSV でロード / アンロードしたいのか?
RDBMS 製品間のデータ交換
– Oracle Database から他社 RDBMS へ
– 他社RDBMSから Oracle Database へ
業務処理 ( 本番環境 ) としてデータ交換を行なっている
検証・開発用にデータをベンダーに提供する
CSV ロード / アンロードに関する問題
CSV はフォーマット・エラーが発生しやすい
– ローディングが行えず、 PoC が始まらない
Oracle Database には CSV アンローダーが存在しない
– どのような手法でアンロードするかが性能に大きく影響する
– CSV フォーマット・エラーが発生しやすい
CSV フォーマットとは
狭義では CSV = Comma-Separated Values [RFC4180]
– フィールド終端 : , レコード終端 : CRLF
広義では CSV = Character-Separated Values
– フィールド終端とレコード終端が特定の文字
狭義の CSV を使いがちだが
ほとんどのソフトウェアが広義の CSV に対応している
狭義の CSV はフォーマット・エラーを起こしやすい
フォーマット・エラーの例
abc def 1,234
uvw xyz 7,890
データにフィールド終端が含まれている
abc def 1 234
uvw xyz 7 890
abc,def,1,234
uvw,xyz,7,890 2
列に分割されてしまっている正しい対応例
例)フィールド終端 : タブ( ^I ) abc^Idef^I1,234
uvw^Ixyz^I7,890
タブ区切りテキスト (TSV) は Microsoft Excel 含め、
対応ソフトウェアが多いので利用しやすい
注意 : ユーザーが自由入力できるアプリケーション
( textarea 要素を含む Web アプリケーションなど)では データにタブが含まれることが少なくない
終端記号をデータに含まれない文字にする
ORACLE_LOADER の場合の最適な対応例
ORACLE_LOADER ドライバー( SQL*Loader 含む)は
ASCII 制御文字を含むあらゆる文字に対応できる
例)フィールド終端 : ユニット分離標識( ^_) レコード終端 : レコード分離標識( ^^ )
abc^_def^_1,234^^uvw^_xyz^_7,890
マイナーな ASCII 制御文字がデータに含まれている確率はほぼゼロ
Vim では Ctrl + V → Ctrl + ^ で ASCII 制御文字を入力可能
制御ファイルでは DELIMITED BY X'1E' のように 16 進数指定も可能
終端記号にマイナーな ASCII 制御文字を使用する
誤った対応例
エンクロージャ " を追加する
"abc","def","1,234"
データに " は含まれていないか? → 含まれている → エラー
"abc","def","1'23""
データに " が含まれていないことが確実なのであれば、
フィールド終端を " にするだけで解決 abc"def"1,234
エンクロージャでは解決できない
ドキュメント内
スライド 1
(ページ 80-90)