前に書く
この記事の複製元:Oracle Transportable Tablespaceについての説明(パート1)
実用的であるため、クリエイターのおかげで再版。
Oracle環境には、exp / imp、expdp / impdp、rmanなど、多くのデータのバックアップおよび移行方法があります。これらの方法の中で、Transportable Tablespaceは、従来の意味で常に最速のデータ移行技術的手段でした。理想的には、Transportable Tablespaceは、直接ネットワーク伝送と同様のレート特性を実現できます。この記事では、伝送テーブルスペース技術の使用法の詳細をいくつか紹介します。
1.トランスポータブル表スペースの概要
他の従来のバックアップ移行方法は、ほとんどが「extract-transport-restore」モデルに従います。expdpを例にとると、Oracleは特別な内部スケジューリングジョブを使用して、保存と保存のためにエクスポートする必要のあるデータ(Used Block)をdmp形式のファイルに変換します。その後、ネットワークを介してTarget Envionmentに送信され、最終的に新しい環境に復元されます。このモードの加速された最適化は、主に、並列およびその他の手段の使用など、抽出と削減に反映されます。
Transportable Tablespaceは、そのような概念ではありません。比較すると、ポータブル/プラグインの概念に似ています。同じプラットフォームと文字セットの表スペースは、データファイルをターゲット環境に直接コピーできます。Oracleレベルでは、データディクショナリにこれらのデータのメタデータを通知するだけで済みます。
他の方法と比較して、Transportable Tablespaceの最大の利点は、複雑な抽出および復元プロセスを必要とせず、中間環境に必要なスペースが非常に小さいことです。一連の実験を通してデモンストレーションしましょう。
2.環境への準備と前提条件
Oracle Transportable Tablespace(以下、TTSと呼びます)は非常に早く登場しました。従来のTTSには、次の3つの基本的な制限があります。
- 表領域の内容は自己完結型です。一度にエクスポートする表スペース(1つ以上)は、他の表スペースに従属オブジェクトを持つことはできません。たとえば、データ表データと索引を異なる表スペースに分散することがよくあるため、トランスポータブル表スペースを使用する場合は、これらすべての表スペースを一度にエクスポートする必要があります。
- ソースDBとターゲットDBの文字セットと国別文字セットは完全に同じである必要があります。
- オペレーティングシステムのソースターゲットDBには互換性が必要です。注:10gを超えるバージョンでは、この制限は解除されています。
これらの制約を紹介し、メソッドをより直感的に以下で確認します。著者の環境の制限により、一部の実験は1台のサーバーでのみ実行できます。特定の実験では、Oracle11gR2を選択します。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
-二つの実験テーブルスペースの構築
SQL> create tablespace ttstbl datafile size 10m autoextend on
2 extent management local uniform. size 1m
3 segment space management auto;
Tablespace created
SQL> create tablespace ttsind datafile size 10m autoextend on
2 extent management local uniform. size 1m
3 segment space management auto;
Tablespace created
-テストユーザー
SQL> create user test identified by test default tablespace ttstbl;
User created
SQL> grant resource, connect to test;
Grant succeeded
SQL> grant select_catalog_role to test;
Grant succeeded
テストユーザーを使用して、テーブルスペースにいくつかのオブジェクトを作成します。
SQL> conn test/test@ora11gp;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as test
SQL> create table t tablespace ttstbl as select * from dba_objects;
Table created
SQL> create index idx_t_id on t(object_id) tablespace ttsind;
Index created
3、事前条件チェック
前提条件として、最初にソースデータベースの文字セット情報を決定します。
SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
VALUE
--------------------
AL32UTF8
SQL> select value from nls_database_parameters where parameter='NLS_NCHAR_CHARACTERSET';
VALUE
--------------------
AL16UTF16
新しく作成された表スペースttsindおよびttstblをエクスポートしたいと考えています-データファイルを表示します。
SQL> select file_name, tablespace_name from dba_data_files where tablespace_name like 'TTS%';
FILE_NAME TABLESPACE_NAME
-------------------------------------------------------------------------------- ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf TTSTBL
/u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf TTSIND
[oracle@bsplinux datafile]$ ls -l
total 2095500
(篇幅原因,省略部分内容)
-rw-r----- 1 oracle oinstall 10493952 Nov 19 18:04 o1_mf_ttsind_8bmyjz69_.dbf
-rw-r----- 1 oracle oinstall 20979712 Nov 19 17:59 o1_mf_ttstbl_8bmyjf3w_.dbf
-rw-r----- 1 oracle oinstall 267395072 Nov 19 18:13 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 11804672 Nov 19 17:29 o1_mf_users_7vpyc2xd_.dbf
従来の制約の中で、TTSを使用する場合、オペレーティングシステムプラットフォームのOSは避けられない要素です。オラクルは、サポートされているプラットフォームをBigとLittle(CPUのビッグエンドとスモールエンド)の2つの大きなタイプに分けています。同じプラットフォーム間で無料のテーブルスペース移行を実行でき、異なるプラットフォーム間の移行は許可されていません。注:この制限は、Oracle10g以降で解消されました。後で詳しく紹介します。
v $ transportable_platformをチェックして、システムに互換性があるかどうかを判断できます。
SQL> col platform_name for a30;
SQL> select platform_name, ENDIAN_FORMAT from v$transportable_platform;
PLATFORM_NAME ENDIAN_FORMAT
------------------------------ --------------
Solaris[tm] OE (32-bit) Big
Solaris[tm] OE (64-bit) Big
Microsoft Windows IA (32-bit) Little
Linux IA (32-bit) Little
AIX-Based Systems (64-bit) Big
HP-UX (64-bit) Big
HP Tru64 UNIX Little
HP-UX IA (64-bit) Big
Linux IA (64-bit) Little
HP Open VMS Little
Microsoft Windows IA (64-bit) Little
IBM zSeries Based Linux Big
Linux x86 64-bit Little
Apple Mac OS Big
Microsoft Windows x86 64-bit Little
Solaris Operating System (x86) Little
IBM Power Based Linux Big
HP IA Open VMS Little
Solaris Operating System (x86- Little64)
Apple Mac OS (x86-64) Little
20 rows selected
独自のデータベースの場合、v $ databaseビューで独自のプラットフォーム情報を照会できます。
SQL> select PLATFORM_ID , PLATFORM_NAME from v$database;
PLATFORM_ID PLATFORM_NAME
----------- ------------------------------
10 Linux IA (32-bit)
プラットフォームの互換性を判断した後、移植する表領域が「自己完結型」であるかどうかを判断する必要があります。Oracleは、検証用のdbms_ttsパッケージメソッドを提供しています。
SQL> exec dbms_tts.transport_set_check('ttstbl, ttsind',true);
PL/SQL procedure successfully completed
SQL> select * from transport_set_violations;
VIOLATIONS
--------------------------------------------------------------------------------
検証でエラーが発生した場合は、transport_set_violationsでプロンプト情報を見つけることができます。自己完結型の問題を解決した後でのみ、次の手順に進むことができます。
4.環境データのエクスポート
元のデータベースの変更を制御するには、表スペースを読み取り専用に設定する必要があります。具体的なステートメントは次のとおりです。altertablespacexxxreadonly。
SQL> select tablespace_name, status from dba_tablespaces where tablespace_name like 'TTS%';
TABLESPACE_NAME STATUS
------------------------------ ---------
TTSIND READ ONLY
TTSTBL READ ONLY
Oracle TTSは、exp / expdpを使用して、表スペースのメタデータ情報をdmpファイルとしてエクスポートする必要があります。dmpファイルは、表スペース情報を記述するために使用されます。この処理時間は非常に短く、生成されるdmpファイルは通常非常に小さいことに注意してください。
[root@bsplinux ~]# cd /
[root@bsplinux /]# mkdir transtts
[root@bsplinux /]# chown -R oracle:oinstall transtts/
[root@bsplinux /]# ls -l | grep transtts
drwxr-xr-x 2 oracle oinstall 4096 Nov 19 18:19 transtts
[root@bsplinux /]#
ExpはTTS作業方法をサポートしています。
[oracle@bsplinux transtts]$ exp userid=\"/ as sysdba\" transport_tablespace=y tablespaces=ttstbl,ttsind file=ttsdmp.dmp log=res.log statistics=none
Export: Release 11.2.0.1.0 - Production on Mon Nov 19 19:32:14 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in AL32UTF8 character set and AL16UTF16 NCHAR character set
Note: table data (rows) will not be exported
About to export transportable tablespace metadata...
For tablespace TTSTBL ...
. exporting cluster definitions
. exporting table definitions
. . exporting table T
For tablespace TTSIND ...
. exporting cluster definitions
. exporting table definitions
. exporting referential integrity constraints
. exporting triggers
. end transportable tablespace metadata export
Export terminated successfully without warnings.
その後、データファイル(cp、scpなど)を直接コピーするだけで済みます。
SQL> select 'cp '||file_name ||' /transtts' from dba_data_files where tablespace_name like 'TTS%';
'CP'||FILE_NAME||'/TRANSTTS'
--------------------------------------------------------------------------------
cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf /transtts
cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf /transtts
[oracle@bsplinux transtts]$ cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf /transtts
cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf /transtts
[oracle@bsplinux transtts]$ cp /u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf /transtts
[oracle@bsplinux transtts]$
5.データ環境の回復
FTP / SFTPを介してデータファイルをターゲットデータベースサーバーに転送する必要があります。同じデータベースが使用されているため、作成者は最初にデータ環境を復元します。
SQL> drop tablespace ttstbl including contents and datafiles;
Tablespace dropped
SQL> drop tablespace ttsind including contents and datafiles;
Tablespace dropped
SQL> select file_name from dba_data_files where tablespace_name like 'TTS%';
FILE_NAME
--------------------------------------------------------------------------------
ソースデータベースにはTTSテーブルスペースがありません。次に、データファイルを新しい場所にコピーし、メタデータ情報をインポートします。
[oracle@bsplinux transtts]$ cp o1_mf_ttstbl_8bmyjf3w_.dbf /u01/app/oradata/ORA11G/datafile/
[oracle@bsplinux transtts]$ cp o1_mf_ttsind_8bmyjz69_.dbf /u01/app/oradata/ORA11G/datafile/
[oracle@bsplinux datafile]$ ls -l
total 2095500
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:48 mytesttbl01.dbf
-rw-r----- 1 oracle oinstall 10493952 Jul 3 03:48 mytesttbl02.dbf
-rw-r----- 1 oracle oinstall 104865792 Nov 19 17:29 o1_mf_rman_ts_87bx5kcg_.dbf
-rw-r----- 1 oracle oinstall 838868992 Nov 19 19:46 o1_mf_sysaux_7vpyc2hb_.dbf
-rw-r----- 1 oracle oinstall 807411712 Nov 19 19:43 o1_mf_system_7vpyc1x7_.dbf
-rw-r----- 1 oracle oinstall 60825600 Nov 19 18:02 o1_mf_temp_7vpz05do_.tmp
-rw-r----- 1 oracle oinstall 10493952 Nov 19 19:47 o1_mf_ttsind_8bmyjz69_.dbf
-rw-r----- 1 oracle oinstall 20979712 Nov 19 19:46 o1_mf_ttstbl_8bmyjf3w_.dbf
-rw-r----- 1 oracle oinstall 267395072 Nov 19 19:47 o1_mf_undotbs1_7vpyc2py_.dbf
-rw-r----- 1 oracle oinstall 11804672 Nov 19 17:29 o1_mf_users_7vpyc2xd_.dbf
Impコマンドのインポート。
[oracle@bsplinux transtts]$ imp userid=\'/ as sysdba\' file=ttsdmp.dmp transport_tablespace=y tablespaces=ttsind,ttstbl datafiles=/u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf,/u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf
メタデータをインポートした後、Oracleはインポートされた表領域を判別できます。
SQL> select file_name,tablespace_name from dba_data_files where tablespace_name like 'TTS%';
FILE_NAME TABLESPACE_NAME
-------------------------------------------------------------------------------- ------------------------------
/u01/app/oradata/ORA11G/datafile/o1_mf_ttsind_8bmyjz69_.dbf TTSIND
/u01/app/oradata/ORA11G/datafile/o1_mf_ttstbl_8bmyjf3w_.dbf TTSTBL
SQL> conn test/test@ora11gp
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as test
SQL> select count(*) from t;
COUNT(*)
----------
72348
インポートされたテーブルスペースはまだ読み取り専用状態であり、オンにする必要があることに注意してください。
SQL> alter tablespace ttsind read write;
Tablespace altered
SQL> alter tablespace ttstbl read write;
Tablespace altered
上記に、簡単なTTSの例を示しました。TTSの場合、まだ多くの詳細と複雑なアプリケーションシナリオがあり、これらは後で継続されます。
その他のサプリメント
- 実際のアプリケーションでは、トランスポータブル表領域機能の使用を容易にするために、スキーマの作成時にデフォルトのUSER表領域を使用するのではなく、新しい表領域を指定するのが最善です。これにより、自己完結型の要件を満たすのに便利です。
- 著者の実際の使用環境では、OSはvmware仮想レベルであり、redhatのエンタープライズバージョンは標準テンプレートに基づくクラウドプラットフォームを使用して自動的に構築されるため、文字セット、国別文字セットなどの要件を簡単に満たすことができます。