web-dev-qa-db-ja.com

Oracleデータベース10gを12cにコピーする

Oracle 10g(10.2.0.4.0)データベース(150GB)をOracle 12c(12.1.0.2.0)データベースにコピーする必要があります。どちらもスタンダード版です。どの方法を使用すればよいですか?

ターゲットは別のサーバーにあります-空のデータベース。ファイルシステムの構造が異なります。ターゲットは、一貫した状態を必要とするが、本番環境で最新である必要はないテストサーバーです。

4
r0tt

あなたの場合、ソースデータベースはEnterpriseエディションでなければならないため、トランスポータブルテーブルスペースを使用できませんでした。

一般的に、rmanを使用してアップグレードすることをお勧めします。ただし、10.2.0.4から12.1.0.2への直接アップグレードはサポートされていないため、あなたの場合はそれほど簡単ではありません。 12.1.0.2に直接アップグレードできる中間リリース(10.2.0.5など)にアップグレードする必要があります。 https://docs.Oracle.com/database/121/UPGRD/preup.htm#UPGRD12359 を参照してください

したがって、最良のアプローチは、古いインポート(imp)またはデータポンプインポート(impdp)を使用したアップグレードです。

古いインポートを使用するレシピが1つあります。データポンプインポートを使用したアップグレードも同様です。

ソースデータベースの名前が "sourcedb"で、ターゲットが "targetdb"であるとします。

  1. ソースデータベースで完全にエクスポートします。

oracle_home = c:\ Oracle\product\10.2.0\db_1を設定します

oracle_sid = sourcedbを設定します。

c:\ Oracle\product\10.2.0\db_1\bin\exp system/pass buffer = 1200000 file = d:\ dump\full_sourcedb.dmp log = full_sourcedb.log full = y一貫性= y

full_sourcedb.dmpをターゲットマシンにコピーします。

  1. dbcaを使用して新しいターゲットデータベース "targetdb"を作成します(カスタムデータベース-Oracle空間などに必要なすべてのコンポーネントを選択または削除します)
    • 適切な文字セットを選択します。このクエリにより、sourcedbの文字セットを確認できます。

パラメーターを選択し、nls_database_parametersから値を取得します( '%CHARACTERSET%'などのパラメーター)

  1. ターゲットマシンで次のコマンドを実行します。インポートで使用されるsql stamenetsを含むログが生成されます。ここで、テーブルスペースを作成するためのcreateステートメントを見つけることができます。古いインポートではデータファイルを再マッピングできないため、それらを(新しいデータファイルの場所で)編集し、インポート前に手動で実行する必要があります。

テーブルスペース「TEST」を作成します。

等.

  1. すべてのテーブルスペースが作成されたら、ターゲットマシンでインポートを実行できます。

imp system/pass full = y log = d:\ dump\full_import_sourcedb.log file = d:\ dump\full_sourcedb.dmp

エラーについては、d:\ dump\full_import_sourcedb.logを確認してください

  1. ターゲットマシンで正常にインポートした後:

-オブジェクトを再コンパイルします

@%Oracle_HOME%/ rdbms/admin/utlrp.sql

-すべてのデータベースコンポーネントをチェックアウトします。

dba_objectsからowner、object_type、object_nameを選択します。ここで、status!= 'VALID'は1、2、3の順です。

-統計情報を収集し、すぐに起動をシャットダウンします

ベギン
dbms_stats.gather_database_stats(method_opt => 'FOR ALL COLUMNS SIZE AUTO'、estimate_percent => 100、cascade => TRUE);

終わり;

/

注意:
データポンプインポート(expdp、impdp)を使用したインポートの方が簡単な場合があります。

constant = yの代わりに、flashback_time = "to_timestamp('04 -04-2016 11:55:00 '、' DD-MM-YYYY HH24:MI:SS ')"を使用する必要があります.........

インポート中に手動でテーブルスペースを作成する必要はなく、remap_datafileパラメータを使用できます。

3
teo

Oracle datapump expdp/impdpを使用しました。 expdpを使用するソースデータベース:

SQL*PLUS:
CREATE USER username IDENTIFIED BY pw;
GRANT dba TO username;
CREATE DIRECTORY db_copy AS ‘E:\DB_copy’;
GRANT read, write ON DIRECTORY db_copy TO username;

CMD:
expdp username/pw DIRECTORY= db_copy DUMPFILE=filename_%u.dmp 
filesize=5gb FULL=Yes METRICS=Y EXCLUDE=STATISTICS 
flashback_time=systimestamp LOGFILE=dbname_exp.log

データポンプを転送した後、impdpを使用してターゲットデータベースで:

(インポートを開始する前にバックアップを作成してください。)

SQL*PLUS:
CREATE USER username IDENTIFIED BY pw;
GRANT dba to username;
CREATE DIRECTORY db_copy AS ‘E:\DB_copy’;
GRANT read, write ON DIRECTORY db_copy TO username;

最初に、データファイルの再マッピングに行きました。impdpパラメータファイル内で次のようになっています。

REMAP_DATAFILE=D:\Oracle\ORADATA\DBNAME\DATAFILE_01.DBF:
E:\Oracle\ORADATA\DBNMAE\DATAFILE_01.DBF

動作しますが、これはファイルシステム構造を完全に再編成するための要件を満たしていません。もう1つの方法は、sqlfileオプションを指定したimpdpを使用してインポートを行うことです。例えば。:

CMD:
impdp username/pw parfile=impdp.par


impdp.par File:

DIRECTORY=db_copy 
FULL=yes 
DUMPFILE= filename_1.dmp, filename_2.dmp…
**SQLFILE=script.sql**
LOGFILE=dbname_imp.log

Script.sqlから、ddlコマンドをコピーすることができます。

...CREATE TABLESPACE tbs_02     DATAFILE 
F:\Oracle\ORADATA\DBNMAE\DATAFILE_01.DBF, 
G:\Oracle\ORADATA\DBNMAE\DATAFILE_02.DBF,
H:\Oracle\ORADATA\DBNMAE\DATAFILE_03.DBF 
SIZE 500K REUSE    AUTOEXTEND ON NEXT 500K MAXSIZE 100M;

すべてのテーブルスペースを含むスクリプトを作成し、必要に応じてデータファイルを再マップしました。スクリプトを実行すると、すべてのテーブルスペースが作成されます。これで、sqlfileオプションを使用せずにimpdpを再度実行できます。テーブルスペースはすでに存在しているが、データはまだインポートされているため、エラーが発生します。

CMD:
impdp username/pw parfile=impdp.par

impdp.par file:

DIRECTORY=db_copy 
FULL=yes 
DUMPFILE= filename_1.dmp, filename_2.dmp…
LOGFILE=dbname_imp.log

それは多くのアーカイブログを作成します。空き容量を増やすためにバックアップを実行する必要がありました。完了後、エラーがないかログファイルを確認しました-すべてが機能しました。

@?/ rdbms/sadmin/utlrp.sqlを実行しますが、必要ないようです。コンパイルは行われませんでした。これらの手順は、10gから12cへのコピー/移行を行うのに役立ちました。

0
r0tt