Oracle 11g和10g是兩個常見的數據庫版本。有時,我們需要將10g的數據庫轉移到11g中。在這種情況下,我們需要學習如何導入10g數據庫到11g中。
首先,我們需要使用expdp命令從10g中導出數據。我們可以使用以下命令:
expdp system/password@10g_db schemas=mySchema dumpfile=mySchema.dmp logfile=mySchema.log
在這里,mySchema是我們要轉移的模式,10g_db是10g數據庫的名稱。該命令將導出mySchema模式并將其保存為mySchema.dmp文件。
接下來,我們需要在11g中使用impdp命令導入10g的數據。我們可以使用以下命令:
impdp system/password@11g_db remap_schema=mySchema:myNewSchema directory=DATA_PUMP_DIR dumpfile=mySchema.dmp logfile=myNewSchema.log
在這里,myNewSchema是我們想在11g中使用的新模式名稱。該命令將讀取我們在10g中導出的mySchema.dmp文件,并在11g中創建myNewSchema模式。由于可能需要轉換數據類型和其他變更,請務必仔細檢查導入的日志文件。
除此之外,我們還可以使用Oracle Transportable Tablespaces來導入數據。這種方法比使用expdp和impdp更快,并避免了在11g中重新創建表的需要。我們可以使用以下步驟:
- 在10g數據庫中選擇要導出的表空間
- 將導出的文件復制到11g服務器
- 在11g中導入表空間
CREATE DIRECTORY MY_DIR AS '/u02/oracle/dumps'; GRANT READ, WRITE ON DIRECTORY MY_DIR TO system; ALTER TABLESPACE my_tablespace READ ONLY; HOST $ expdp system/password@10g_db tablespaces=my_tablespace directory=MY_DIR dumpfile=my_tablespace.dmp logfile=my_tablespace.log ALTER TABLESPACE my_tablespace READ WRITE;
scp my_tablespace.dmp oracle@11g_server:/u02/oracle/dumps
CREATE DIRECTORY MY_DIR AS '/u02/oracle/dumps'; GRANT READ, WRITE ON DIRECTORY MY_DIR TO system; CREATE TABLESPACE my_tablespace DATAFILE '/u01/oracle/oradata/mySID/my_tablespace.dbf' SIZE 50M REUSE AUTOEXTEND ON; ALTER TABLESPACE my_tablespace READ WRITE; ALTER DATABASE DATAFILE '/u01/oracle/oradata/mySID/my_tablespace.dbf' RESIZE 100M; HOST $ impdp system/password directory=MY_DIR dumpfile=my_tablespace.dmp logfile=my_tablespace_imp.log remap_datafile='/u02/oracle/my_tablespace.dbf':/u01/oracle/oradata/mySID/my_tablespace.dbf remap_schema=mySchema:myNewSchema transport_datafiles='/u01/oracle/oradata/mySID/my_tablespace.dbf'
使用Transportable Tablespaces導入數據可以提高效率。但是,我們需要記住移動表空間時可能需要更改其大小或文件名。
總的來說,導入10g數據庫到11g中需要選擇合適的方法,并仔細檢查導入的日志文件。通過合理使用導入方法,我們可以快速而安全地將10g數據庫轉移到11g中。