Oracle 10g(10.2.0.4.0)データベース(150GB)をOracle 12c(12.1.0.2.0)データベースにコピーする必要があります。どちらもスタンダード版です。どの方法を使用すればよいですか?
ターゲットは別のサーバーにあります-空のデータベース。ファイルシステムの構造が異なります。ターゲットは、一貫した状態を必要とするが、本番環境で最新である必要はないテストサーバーです。
あなたの場合、ソースデータベースは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"であるとします。
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をターゲットマシンにコピーします。
パラメーターを選択し、nls_database_parametersから値を取得します( '%CHARACTERSET%'などのパラメーター)
テーブルスペース「TEST」を作成します。
等.
imp system/pass full = y log = d:\ dump\full_import_sourcedb.log file = d:\ dump\full_sourcedb.dmp
エラーについては、d:\ dump\full_import_sourcedb.logを確認してください
-オブジェクトを再コンパイルします
@%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パラメータを使用できます。
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へのコピー/移行を行うのに役立ちました。