ほんま、すんませんでした。
初日までぎりぎり自由を楽しもうと何もしてませんでしたが、本日、金曜日あと初出勤まで10日と迫り、やっと我に返りました。にゃごなご。
- Using External Tables
- Using Oracle Data Pump
- Using SQL*Loader
【ETL Tool(ETLに使用するツール)】
1.ETLとは、Extract, Transform, Load のBulk Formatデータです。大量のデータをやり取りすることですな。
2.Data Pumpは、Oracle<->Oracleのやり取り。ややこしい設定なしで、ネットワークでやり取りできたりするので、ステージングのディスクが必要ないこともある。
3.SQL Loaderは、Oracle<->何か他のデータウェア(SQL Serverなど)コントロールファイルが必要で、データストラクチャーなどの詳細をそこに書いておく。次に使いまわしがきく分良い。
【Date Pump】
主に、『Conventional』と『Direct』、そして『External Table』のメソッドがある。
『Conventional』➡Insertステートメントで書いている。これも、まぁ、プログラミングで書くとすれば、融通が利いて悪くもない。
『Direct』➡直接的にファイルを移植してしまう方法。
『External Table』➡暫定的に外にテーブルを作ってデータ移植を行う方法。
Pumpはバイナリを使います。そしてOracle的にはSQLLoaderよりも早いです。
使い方
SQLPlusにPLSQLで書く方法
expdp(Export)とimpdp(Import)コマンド
DBMS_DATAPUMP/DBMS_METADATA
パフォーマンスに関して Master processes ⇔ Worker Processes これらがパラレルでやってくれる。限度は最低でも『1プロセス』がはしっていること。 Master Processesの部分にはMaster Tableを使う。
これが捨てられるときは、以下の3状況
1.プロセスが成功した場合。(KEEP_MASTER=YESをのぞく)
2.KILL_JOBされた場合
3.JOBが走る前にJOBをストップした場合
進行状況を見る
V$SESSION_LONGOPSをつかう。
SELET OPONAM, TARGER_DESC, SOFAR,
TOTALWORK, MESSAGE
FROM V$SESSION_LONGOPS
【Data Pumpをつかいましょう】
Export and Importコマンド
cmd ....\bin
expdp dumpfile=target.dmp table=target_table
user:system
password:
-----------
impdp dumpfile=target.dmp table_exists_action=append
➡新しいのでたーっ! スキーマやテーブルがすでにdmpファイルに入ってて、外部を選択する必要がないからこちらを使いましょう。 既にあるテーブルに対して以下の3つをしてくれます。
table_exists_action=append (追記)
table_exists_action=trancate (データ消してインサートする)
table_exists_action=replace(一度ドロップして跡かたなくして改めて書いてくれる)
【SQL*Loader】
いろんなデータのやり取りができる。たとえば。。。SQLserverなど
なぜなら、テキストベースだから。なので、Pumpとは違いバイナリじゃないからもちろん遅い。設定はコントロールファイルを作って行う。何度も使えるから便利。
後で説明するけど、設定すれば以下のファイルが付いてくるし、必要なものもある。
1.データファイル(CVS、TARなどなど。)
2.Control File
3.Bad File(設定漏れなどで移行できなかったデータが書かれる)
4.Discard File(設定であえて必要とされてなくって、捨てられたデータが書かれる)
5.LogFile
ConventionalとDirect Path
Pumpだと勝手によいものを選んでくれるけど、SQLLoaderは自分で選ぶ。
【SQl*Loaderを使いましょう】
コントロールファイルに書きましょう(場所c:\data\loader.ctl)
load data
infile 'c:\data\data.csv'
into table targetdata
fields terminated by ","
(id, name, address, college, company)
では走らせましょう
sqlldr userid=system control=c:\data\loader.ctl
password:
と、ベースはこれだけ。
では、設定をします。
同じテーブルにAPPEND(データ追加)する場合(場所c:\data\append.ctl)
load data
infile 'c:\data\data.csv'
append
into table targetdata
fields terminated by ","
(id, name, address, college, company)
条件を与える場合(場所c:\data\when.ctl)
load data
infile 'c:\data\data.csv'
into table targetdata
when college='NYU'
fields terminated by ","
(id, name, address, college, company)
c:\data\when.ctlを走らせて、その条件ではじかれたデータを見る場合
sqlldr userid=system control=c:\data\when.ctl discard=c:\data\discard.txt
ログファイルでも見れます。
【External Table】
まぁ、これは実際に移行されたものではないです。データベースのテーブルにのっとって、テキストベースのCSVファイルなんかをOracleのシステムで見せてくれるというか。Read-Only!
必要なのは、「Directry」と「Table」だけ。
External Tableを使いましょう
まずはSQLPlusを開きます。
CREATE DIRECTRY external_dir AS 'C:\data';
Directry created
CREATE TABLE targetOracleTable (
ID CHAR(10),
NAME CHAR(40),
ADDRESS CHAR(40),
COLLEGE CHAR(25)
)
ORGANIZATION EXTERNAL (
DEFAULT DIRECTORY external_dir
LOCATION ('targetCSVTxt.csv')
);
次回は
※コメント投稿者のブログIDはブログ作成者のみに通知されます