- Oracle Cloud
- Oracle Database
Oracle CloudWorld 2024視察記
2024年9月ラスベガスで開催された「Oracle CloudWorld 2024」そのハイライトとアシストの注目ポイントをイベント全体の雰囲気とともにお伝えします。
|
Oracle DBをご利用中の皆さまは、データをエクスポートして他のOracle DBにインポートしたいときに、ディスク容量不足でダンプファイルが出力できず、困った経験はありませんか?
IMPDP(インポート・ユーティリティ)のNETWORK_LINKパラメータを使用すると、データがネットワークを介して直接転送されるため、ダンプファイルなしでソースDBからターゲットDBにデータを直接インポートできます。
前述のように、ダンプファイルを保存するのに十分なディスク容量が無い場合に役立ちます。
また、今回紹介するNETWORL_LINKを使用した方法はダンプファイルの出力や転送が不要で、直接データを転送・インポートしますので、所要時間も短縮できます。
このブログでは、NETWORK_LINKパラメータを使用し、以下の2種類のターゲットDBにデータを移行するテストケースを用意しました。ターゲットDBに選択したのは、Oracle DBをクラウドで利用する一般的な方法の中の2種類です。
目次
なお、どちらのテストケースでも、ソースDBには以下のオブジェクトを持つ「TESTUSER」スキーマがあり、このスキーマ単位でデータをインポートします。
SQL> select object_name, object_type from dba_objects where owner ='TESTUSER'; OBJECT_NAME OBJECT_TYPE -------------------- ----------------------- DATAID SEQUENCE SAMPLEDATA TABLE
以下は、テーブルTESTUSER.SAMPLEDATAの構造です。
SQL> DESC TESTUSER.SAMPLEDATA Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER NAME VARCHAR2(20) CITY VARCHAR2(30)
今回は、TESTUSER.SAMPLEDATAテーブルに26,101,010行のデータを格納して検証してみます。
以下の手順に従って、ソースDBからターゲットのOCI Databaseにデータを移行しましょう。
ターゲット・サーバの/etc/hostsファイルにソース・サーバのホスト情報(testinstance1)を追加します。
xxx.x.xxx.xxx testinstance1.xxxx.xxxx.oraclevcn.com testinstance1
ソースDBのTNSエントリをターゲット・サーバのtnsnames.oraファイルに追加します。
ORCLPDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = testinstance1.xxxx.xxxx.oraclevcn.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb1) ) )※tnsnames.oraを使用せず、CREATE DATABASE LINK文内でTNSエントリを指定して実行も可能です。ステップ2-2の手順で紹介しています。
設定したTNSエントリを使用して、ターゲットDBからソースDBへの接続を確認します。
[oracle@dbtest2 admin]$ sqlplus testuser@orclpdb1 SQL*Plus: Release 19.0.0.0.0 - Production on Mon Apr 25 04:21:21 2022 Version 19.13.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Enter password: Last Successful login time: Mon Apr 25 2022 02:56:12 +00:00 Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> select name from v$database; NAME --------- ORCLCDB SQL> show con_name; CON_NAME ------------------------------ ORCLPDB1
ターゲットDBとソースDBの両方でGLOBAL_NAMESパラメータをFALSEに設定します。
今回は、ターゲットDBのOCI DatabaseでのみGLOBAL_NAMESパラメータがデフォルトでTRUEでしたので、以下の手順でFALSEに設定します。
[oracle@dbtest2 ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Fri Apr 22 07:46:25 2022 Version 19.13.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Connected to: Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production Version 19.13.0.0.0 SQL> show parameter global_names; NAME TYPE VALUE --------------------------------- ----------- ------------------------------ global_names boolean TRUE SQL> alter session set container=pdb1; Session altered. SQL> show parameter global_names; NAME TYPE VALUE --------------------------------- ----------- ------------------------------ global_names boolean TRUE SQL> alter system set global_names = false scope=both; System altered.
今回の環境ではソースDBは既にFALSEの設定だったため、ここでの説明は割愛します。
ターゲットDBに、ソースDBを指すデータベースリンクを作成します。構文は以下のとおりです。
[oracle@dbtest2 ~]$ sqlplus system@pdb1 SQL*Plus: Release 19.0.0.0.0 - Production on Mon Apr 25 04:23:12 2022 Version 19.13.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Enter password: Last Successful login time: Mon Apr 25 2022 04:07:42 +00:00 Connected to: Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production Version 19.13.0.0.0 SQL> create database link ORCLPDB1 connect to testuser identified by xxxxxx using 'ORCLPDB1'; Database link created. SQL> select sysdate from dual@ORCLPDB1; SYSDATE -------------- 25-Apr-22
ORCLPDB1というデータベースリンクを使用して、ソースDBのDUAL表にアクセスできました。
DataPumpのログファイルを保存するためのダンプディレクトリを、ターゲットDBに作成します。
[oracle@dbtest2 ~]$ mkdir dumplogs [oracle@dbtest2 ~]$ sqlplus system@pdb1 SQL*Plus: Release 19.0.0.0.0 - Production on Mon Apr 25 04:29:09 2022 Version 19.13.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Enter password: Last Successful login time: Mon Apr 25 2022 04:23:16 +00:00 Connected to: Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production Version 19.13.0.0.0 SQL> create directory dump_dir as '/home/oracle/dumplogs'; Directory created.
/home/oracleの中に、dumplogsディレクトリが作成できました。
前提で述べたようにスキーマ単位でデータをインポートするので、現時点でターゲットDBにはTESTUSERが存在しないことを確認します。
SQL> select object_name, object_type from dba_objects where owner ='TESTUSER'; no rows selected
ステップ5で作成したデータベースリンクを指すNETWORK_LINKパラメータを使用して、ソースDBからTESTUSERスキーマをインポートします。
インポートの構文は以下のとおりです。
[oracle@dbtest2 dumplogs]$ impdp system@pdb1 directory=dump_dir logfile=testexp.log schemas=testuser network_link=ORCLPDB1; Import: Release 19.0.0.0.0 - Production on Mon Apr 25 07:29:59 2022 Version 19.13.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. Password: Connected to: Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/********@pdb1 directory=dump_dir logfile=testexp.log schemas=testuser network_link=ORCLPDB1 Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 1.126 GB Processing object type SCHEMA_EXPORT/USER Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE Processing object type SCHEMA_EXPORT/TABLE/TABLE . . imported "TESTUSER"."SAMPLEDATA" 26101010 rows Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Processing object type SCHEMA_EXPORT/STATISTICS/MARKER Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" successfully completed at Mon Apr 25 07:31:02 2022 elapsed 0 00:00:58
スキーマがターゲットDBに適切にインポートされたことを確認します。
SQL> col object_name for a20 SQL> select object_name, object_type from dba_objects where owner ='TESTUSER'; OBJECT_NAME OBJECT_TYPE -------------------- ----------------------- DATAID SEQUENCE SAMPLEDATA TABLE SQL> select count(1) from testuser.sampledata; COUNT(1) ---------------- 26101010
検証結果の通り、すべてのデータが適切にインポートできたことが確認できました。
ターゲットDBにソースDBを指すデータベースリンクを作成します。構文は以下のとおりで、USING句でTNSエントリを指定します。
CREATE DATABASE LINK[ec2-user@ip-xxx-xx-xx-xx ~]$ sqlplus admin@testrds SQL*Plus: Release 19.0.0.0.0 - Production on Wed Apr 27 07:37:18 2022 Version 19.15.0.0.0 Copyright (c) 1982, 2022, Oracle. All rights reserved. Enter password: Last Successful login time: Wed Apr 27 2022 07:17:44 +00:00 Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.13.0.0.0 SQL> CREATE DATABASE LINK ORCLPDB1 CONNECT TO testuser IDENTIFIED BY xxxxx USING '(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.x.xxx.xxx)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orclpdb1)))'; Database link created. SQL> select sysdate from dual@ORCLPDB1; SYSDATE ------------- 27-Apr-22
テストケース1と同様にスキーマ単位でインポートするため、TESTUSERが存在しないことを確認します。
SQL> select object_name, object_type from dba_objects where owner ='TESTUSER'; no rows selected
[ec2-user@ip-xxx-xx-xx-xx ~]$ impdp admin@testrds directory=data_pump_dir logfile=imp_test_tables_using_nw_link.log schemas=testuser network_link=ORCLPDB1; Import: Release 19.0.0.0.0 - Production on Wed Apr 27 07:39:14 2022 Version 19.15.0.0.0 Copyright (c) 1982, 2022, Oracle and/or its affiliates. All rights reserved. Password: Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Starting "ADMIN"."SYS_IMPORT_SCHEMA_01": admin/********@testrds directory=data_pump_dir logfile=imp_test_tables_using_nw_link.log schemas=testuser network_link=ORCLPDB1 Estimate in progress using BLOCKS method... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Total estimation using BLOCKS method: 1.126 GB Processing object type SCHEMA_EXPORT/USER Processing object type SCHEMA_EXPORT/SYSTEM_GRANT Processing object type SCHEMA_EXPORT/ROLE_GRANT Processing object type SCHEMA_EXPORT/DEFAULT_ROLE Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE Processing object type SCHEMA_EXPORT/TABLE/TABLE . . imported "TESTUSER"."SAMPLEDATA" 26101010 rows Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Processing object type SCHEMA_EXPORT/STATISTICS/MARKER Job "ADMIN"."SYS_IMPORT_SCHEMA_01" successfully completed at Wed Apr 27 07:40:08 2022 elapsed 0 00:00:47
エラーがなく実行できていることを確認しましょう。
最後に、スキーマがターゲットDBに正しくインポートされたかどうかを確認します。
[ec2-user@ip-xxx-xx-xx-xx ~]$ sqlplus admin@testrds SQL*Plus: Release 19.0.0.0.0 - Production on Wed Apr 27 07:40:43 2022 Version 19.15.0.0.0 Copyright (c) 1982, 2022, Oracle. All rights reserved. Enter password: Last Successful login time: Wed Apr 27 2022 07:39:17 +00:00 Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.13.0.0.0 SQL> select count(1) from testuser.sampledata; COUNT(1) ---------------- 26101010 SQL> select object_name, object_type from dba_objects where owner ='TESTUSER'; OBJECT_NAME OBJECT_TYPE -------------------- --------------------- DATAID SEQUENCE SAMPLEDATA TABLE
テストケース2の場合も、適切にデータがインポートできていることが確認できました。
NETWORK_LINKパラメータの使用には制限があり、使用するOracle DBのバージョンによって異なります。そのため、NETWORK_LINKを使用する前に、Oracle DBのマニュアルをご参照ください。
また、暗号化されていないネットワーク・リンクでインポート操作を実行すると、データベースで暗号化されている場合でも、全てのデータがクリア・テキストとしてインポートされることにご注意ください。
今回はNETWORK_LINKを利用したデータのインポート手順をご紹介しました。注意事項もあるので本番環境での利用にはご注意いただきたいですが、検証環境などでディスク容量に余裕がないときに活用できるのではないでしょうか。
ぜひお試しください。
■本記事の内容について
本記事に示した定義及び条件は変更される場合があります。あらかじめご了承ください。
■商標に関して
・Oracle®、Java、MySQL及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
2024年9月ラスベガスで開催された「Oracle CloudWorld 2024」そのハイライトとアシストの注目ポイントをイベント全体の雰囲気とともにお伝えします。
OCIで提供されている生成AIサービスとGPUインスタンスを前回の記事「生成AIにGPUが適している理由」で紹介しました。本記事では、GPUインスタンスをデプロイして、インスタンス上でLLM(大規模言語モデル)の動作環境を構築する方法をご紹介します。