DBMS_FILE_TRANSFER
パッケージは、データベース内のバイナリ・ファイルをコピーし、データベース間でバイナリ・ファイルを転送するプロシージャを提供します。
関連項目:
|
この章では、次の項目について説明します。
注意: DBMS_FILE_TRANSFER では、オンライン・バックアップがサポートされています。データベースで変更中のファイルをコピーまたは転送する場合は、ファイルの一貫性が失われリカバリが必要になる可能性があるため、注意する必要があります。一貫性を保証するには、データベースの使用中はファイルをオフラインにしてください。
バックアップの実行に |
表56-1 DBMS_FILE_TRANSFERパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
ソース・ディレクトリからファイルを読み取り、宛先ディレクトリにそのコピーを作成します。ソース・ディレクトリと宛先ディレクトリは、両方ともローカル・ファイル・システム内または自動ストレージ管理(ASM)ディスク・グループ内に指定できます。また、ローカル・ファイル・システムとASMの間に指定して、いずれの方向にもコピーを実行できます。 |
|
リモート・データベースに接続し、リモート・ファイルを読み取り、ローカル・ファイル・システムまたはASMにそのファイルのコピーを作成します。 |
|
ローカル・ファイルまたはASMを読み取り、リモート・データベースに接続して、リモート・ファイル・システムにそのファイルのコピーを作成します。 |
このプロシージャは、ソース・ディレクトリからファイルを読み取り、宛先ディレクトリにそのコピーを作成します。ソース・ディレクトリと宛先ディレクトリは、両方ともローカル・ファイル・システム内または自動ストレージ管理(ASM)ディスク・グループ内に指定できます。また、ローカル・ファイル・システムとASMの間に指定して、いずれの方向にもコピーを実行できます。
ローカル・ファイル・システムは、すべてのタイプのファイルのコピー元およびコピー先に指定できます。ただし、ASMディスク・グループは、データベース・ファイル(データファイル、一時ファイル、制御ファイルなど)のみのコピー元およびコピー先となります。
宛先ファイルはプロシージャが正常に終了するまで閉じられません。
構文
DBMS_FILE_TRANSFER.COPY_FILE( source_directory_object IN VARCHAR2, source_file_name IN VARCHAR2, destination_directory_object IN VARCHAR2, destination_file_name IN VARCHAR2);
パラメータ
表56-2 COPY_FILEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ソース・ディレクトリを指定するディレクトリ・オブジェクト。このディレクトリ・オブジェクトは、すでに存在している必要があります。(ディレクトリ・オブジェクトは、 |
|
コピーするファイルの名前。このファイルは、ソース・ディレクトリ内に存在している必要があります。 |
|
宛先ディレクトリを指定するディレクトリ・オブジェクト。このディレクトリ・オブジェクトは、すでに存在している必要があります。 宛先がASMの場合、このディレクトリ・オブジェクトは、ディスク・グループ名(+ |
|
宛先ディレクトリ内のファイルに割り当てる名前。同じ名前のファイルが宛先ディレクトリに存在しないようにしてください。宛先がASMの場合は、次のようになります。
ファイル名の後に、カッコで囲んだASMテンプレート名を追加できます。この場合、ファイルには、テンプレートによって指定された属性が付与されます。 |
使用上の注意
このプロシージャを正常に実行するには、現在のユーザーに次の権限が必要です。
source_directory_object
パラメータに指定したディレクトリ・オブジェクトについてのREAD
権限
destination_directory_object
パラメータに指定したディレクトリ・オブジェクトについてのWRITE
権限
このプロシージャは二重引用符で囲まれていないディレクトリ・オブジェクト・パラメータを大文字に変換しますが、ファイル名は大文字に変換しません。
さらに、コピーされるファイルは次の要件を満たしている必要があります。
コピーされるファイルのサイズは512バイトの倍数である必要があります。
コピーされるファイルのサイズは、2TB以下である必要があります。
ファイルの転送はトランザクション処理ではありません。コピーされるファイルはバイナリ・ファイルとして扱われ、キャラクタ・セットの変換は行われません。 長いファイルのコピーの進行状況を監視するには、V$SESSION_LONGOPS
動的パフォーマンス・ビューに問い合せてください。
関連項目: ファイル転送の使用方法については、『Oracle Databaseストレージ管理者ガイド』を参照してください。 |
例
SQL> create directory DGROUP as '+diskgroup1/dbs/backup'; Directory created. SQL> BEGIN 2 DBMS_FILE_TRANSFER.COPY_FILE('SOURCEDIR','t_xdbtmp.f', 'DGROUP', 't_xdbtmp.f'); 3 END; 4 / PL/SQL procedure successfully completed. SQL> EXIT $ASMCMD ASMCMD> ls DISKGROUP1/ ASMCMD> cd diskgroup1/dbs/backup ASMCMD> ls t_xdbtmp.f => +DISKGROUP1/ORCL/TEMPFILE/COPY_FILE.267.546546525
このプロシージャは、リモート・データベースに接続し、リモート・ファイルを読み取り、ローカル・ファイル・システムまたはASMにそのファイルのコピーを作成します。コピーされるファイルはソース・ファイルで、コピーで作成された新しいファイルが宛先ファイルです。宛先ファイルはプロシージャが正常に終了するまで閉じられません。
構文
DBMS_FILE_TRANSFER.GET_FILE source_directory_object IN VARCHAR2, source_file_name IN VARCHAR2, source_database IN VARCHAR2, destination_directory_object IN VARCHAR2, destination_file_name IN VARCHAR2);
パラメータ
表56-3 GET_FILEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ソース・サイトにある、ファイルのコピー元のディレクトリ・オブジェクト。このディレクトリ・オブジェクトはソース・サイトに存在している必要があります。 |
|
リモート・ファイル・システムにおいてコピーされるファイルの名前。このファイルは、リモート・ファイル・システムのソース・ディレクトリ・オブジェクトに関連付けられたディレクトリに存在している必要があります。 |
|
ファイルが存在するリモート・データベースへのデータベース・リンクの名前。 |
|
宛先サイトにある、ファイルのコピー先となるディレクトリ・オブジェクト。このディレクトリ・オブジェクトはローカル・ファイル・システムに存在している必要があります。 |
|
ローカル・ファイル・システムにコピーされるファイルの名前。同じ名前のファイルがローカル・ファイル・システムの宛先ディレクトリに存在しないようにしてください。 |
使用上の注意
このプロシージャを正常に実行するには、次のユーザーに次の権限が必要です。
ソース・データベースの接続されるユーザーには、source_directory_object
パラメータに指定したディレクトリ・オブジェクトについての読取り権限が必要です。
ローカル・データベースの現在のユーザーには、destination_directory_object
パラメータに指定したディレクトリ・オブジェクトについての書込み権限が必要です。
このプロシージャは二重引用符で囲まれていないディレクトリ・オブジェクト・パラメータを大文字に変換しますが、ファイル名は大文字に変換しません。
さらに、コピーされるファイルは次の要件を満たしている必要があります。
コピーされるファイルのサイズは512バイトの倍数である必要があります。
コピーされるファイルのサイズは、2TB以下である必要があります。
ファイルの転送はトランザクション処理ではありません。コピーされるファイルはバイナリ・ファイルとして扱われ、キャラクタ・セットの変換は行われません。長いファイルの転送の進行状況を監視するには、V$SESSION_LONGOPS
動的パフォーマンス・ビューに問い合せてください。
例
CREATE OR REPLACE DIRECTORY df AS '+datafile' ; GRANT WRITE ON DIRECTORY df TO "user"; CREATE DIRECTORY DSK_FILES AS ''^t_work^''; GRANT WRITE ON DIRECTORY dsk_files TO "user"; -- asumes that dbs2 link has been created and we are connected to the instance. -- dbs2 could be a loopback or point to another instance. BEGIN -- asm file to an os file -- get an asm file from dbs1.asm/a1 to dbs2.^t_work^/oa5.dat DBMS_FILE_TRANSFER.GET_FILE ( 'df' , 'a1' , 'dbs1', 'dsk_files' , 'oa5.dat' ); -- os file to an os file -- get an os file from dbs1.^t_work^/a2.dat to dbs2.^t_work^/a2back.dat DBMS_FILE_TRANSFER.GET_FILE ( 'dsk_files' , 'a2.dat' , 'dbs1', 'dsk_files' , 'a2back.dat' ); END ; /
このプロシージャは、ローカル・ファイルまたはASMを読み取り、リモート・データベースに接続して、リモート・ファイル・システムにそのファイルのコピーを作成します。コピーされるファイルはソース・ファイルで、コピーで作成された新しいファイルが宛先ファイルです。宛先ファイルはプロシージャが正常に終了するまで閉じられません。
構文
DBMS_FILE_TRANSFER.PUT_FILE( source_directory_object IN VARCHAR2, source_file_name IN VARCHAR2, destination_directory_object IN VARCHAR2, destination_file_name IN VARCHAR2, destination_database IN VARCHAR2);
パラメータ
表56-4 PUT_FILEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ローカル・ソース・サイトにある、ファイルのコピー元のディレクトリ・オブジェクト。このディレクトリ・オブジェクトはソース・サイトに存在している必要があります。 |
|
ローカル・ファイル・システムからコピーされるファイルの名前。このファイルは、ローカル・ファイル・システムのソース・ディレクトリ・オブジェクトに関連付けられたディレクトリに存在している必要があります。 |
|
宛先サイトにある、ファイルのコピー先となるディレクトリ・オブジェクト。このディレクトリ・オブジェクトはリモート・ファイル・システムに存在している必要があります。 |
|
リモート・ファイル・システムにおいてコピーされるファイルの名前。同じ名前のファイルがリモート・ファイル・システムの宛先ディレクトリに存在しないようにしてください。 |
|
ファイルのコピー先となるリモート・データベースへのデータベース・リンクの名前。 |
使用上の注意
このプロシージャを正常に実行するには、次のユーザーに次の権限が必要です。
ローカル・データベースの現在のユーザーには、source_directory_object
パラメータに指定したディレクトリ・オブジェクトについての読取り権限が必要です。
宛先データベースの接続ユーザーには、destination_directory_object
パラメータに指定したディレクトリ・オブジェクトについての書込み権限が必要です。
このプロシージャは二重引用符で囲まれていないディレクトリ・オブジェクト・パラメータを大文字に変換しますが、ファイル名は大文字に変換しません。
さらに、コピーされるファイルは次の要件を満たしている必要があります。
コピーされるファイルのサイズは512バイトの倍数である必要があります。
コピーされるファイルのサイズは、2TB以下である必要があります。
ファイルの転送はトランザクション処理ではありません。コピーされるファイルはバイナリ・ファイルとして扱われ、キャラクタ・セットの変換は行われません。長いファイルの転送の進行状況を監視するには、V$SESSION_LONGOPS
動的パフォーマンス・ビューに問い合せてください。
例
CREATE OR REPLACE DIRECTORY df AS '+datafile' ;
GRANT WRITE ON DIRECTORY df TO "user";
CREATE OR REPLACE DIRECTORY ft1 AS '+datafile/ft1' ;
GRANT READ,WRITE ON DIRECTORY ft1 TO "user";
CREATE OR REPLACE DIRECTORY ft1_1 AS '+datafile/ft1/ft1_1' ;
CONNECT user;
Enter password: password
-- - put a1.dat to a4.dat (using dbs2 dblink)
-- - level 2 sub dir to parent dir
-- - user has read privs on ft1_1 at dbs1 and write on df in dbs2
BEGIN
DBMS_FILE_TRANSFER.PUT_FILE ( 'ft1_1' , 'a2.dat' , 'df' , 'a4.dat' ,
'dbs2' ) ;
END ;