用傳輸表空間跨平臺遷移資料
最近做了一次跨平臺的資料遷移,遷移要求是把部分使用者的資料遷移到另一個資料庫中。
源資料庫環境是Solaris 10(x86_64) + ORACLE 10203 RAC + ASM
目標資料庫環境是Linux AS 4(x86) + ORACLE 10203 + 檔案系統
我在這次遷移用的是傳輸表空間技術。
1、檢查需要傳輸的使用者對應的表空間
SQL> SELECT DISTINCT TABLESPACE_NAME FROM DBA_SEGMENTS WHERE OWNER='NDMAIN';
TABLESPACE_NAME
------------------------------
NDMAIN
SQL> SELECT DISTINCT TABLESPACE_NAME FROM DBA_SEGMENTS WHERE OWNER='ZHEJIANG';
TABLESPACE_NAME
------------------------------
ZHEJIANG
2、查詢是否滿足傳輸表空間的條件
1)查詢是否支援平臺轉換
--查詢源庫的平臺資訊
SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_NAME ENDIAN_FORMAT
---------------------------------------- --------------
Solaris[tm] OE (64-bit) Big
--查詢目標庫的平臺資訊
SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
PLATFORM_NAME ENDIAN_FORMAT
---------------------------------------- --------------
Linux IA (32-bit) Little
--從v$transportable_platform檢視查詢以上兩個平臺的備份集是否可以轉換
SQL> select * from v$transportable_platform where PLATFORM_NAME in ('Solaris[tm] OE (64-bit)','Linux IA (32-bit)');
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ---------------------------------------- --------------
2 Solaris[tm] OE (64-bit) Big
10 Linux IA (32-bit) Little
有兩個記錄,表示這兩種平臺下的備份集可以互相轉換稱對應的平臺備份集。
2)檢視錶空間集是否是子包含
如果某個表空間集引用了其他表空間的物件(如外來鍵引用的表在其他表空間、表空間包含物化檢視等),則這個表空間不是自包含的;否則就是自包含。
只有自包含的表空間集才可以用表空間傳輸技術。
oracle提供dbms_tts.transport_set_check過程來幫助我們判斷某個表空間集是否是自包含的:
SQL> execute dbms_tts.transport_set_check('NDMAIN,ZHEJIANG',TRUE);
PL/SQL procedure successfully completed.
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
no rows selected
如果查詢TRANSPORT_SET_VIOLATIONS有記錄返回,則表示表空間集不是自包含的,無法對這些表空間使用表空間傳輸技術;反之,則表示表空間集是自包含的,可以對這些表空間使用表空間傳輸技術。
注意:
1)使用dbms_tts.transport_set_check時,要把需要表空間傳輸的表空間列表都寫上,用都好分割,不要每一個表空間執行一次dbms_tts.transport_set_check,這樣可能會引起誤解:
例如:
A表在表空間T1上,
B表在表空間T2上,並且B表上有一個外來鍵引用A表。
如果要遷移A、B兩個表空間,如果分別執行:
execute dbms_tts.transport_set_check('T1',TRUE);
execute dbms_tts.transport_set_check('T2',TRUE);
則在檢查T2時TRANSPORT_SET_VIOLATIONS肯定會有記錄,因為B表引用了A表,兩個表不在一個表空間上。
但實際上,A、B兩個表的表空間都在我們要遷移的範圍內,所以遷移後資料的完整性也是有保證的,這個問題就在於我們把T1、T2分別檢驗造成了誤解。
正確的方法應該是:
execute dbms_tts.transport_set_check('T1,T2',TRUE);
2)TRANSPORT_SET_VIOLATIONS是一個臨時表,必須在執行dbms_tts.transport_set_check同一個會話中查詢這個表。
3、在源庫匯出資料
1)建立directory
SQL> create directory tran as '/backup/dmp';
Directory created.
2)把對應表空間置於只讀模式
SQL> alter tablespace ndmain read only;
Tablespace altered.
SQL> alter tablespace zhejiang read only;
Tablespace altered.
3)用資料泵匯出
指定了transport_tablespaces後,資料泵匯出的只是一些結構方面的資訊,所以匯出檔案會比較小。
bash-3.00$ expdp system/test directory=tran transport_tablespaces=ndmain,zhejiang
Export: Release 10.2.0.3.0 - 64bit Production on 星期二, 23 10月, 2007 1:21:36
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/******** directory=tran transport_tablespaces=ndmain,zhejiang
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type TRANSPORTABLE_EXPORT/INDEX
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/COMMENT
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/REF_CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/TRIGGER
Processing object type TRANSPORTABLE_EXPORT/INDEX/FUNCTIONAL_AND_BITMAP/INDEX
Processing object type TRANSPORTABLE_EXPORT/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/MATERIALIZED_VIEW
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
/backup/dmp/expdat.dmp
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at 01:24:55
4、轉換資料檔案格式
由於源資料庫和目標資料庫所在平臺不同,所以要把要傳輸的表空間對應的資料檔案轉換為目標平臺的格式。
10g下rman提供這一功能,你可以選擇在源資料庫或者目標資料庫進行轉換:
1)在源資料庫轉換:conver tablespace ... to platform
2)在目標資料庫轉換:conver datafile ... from fplatform
在這裡選擇第一種方式:
bash-3.00$ export ORACLE_SID=prerac1
bash-3.00$ rman target /
Recovery Manager: Release 10.2.0.3.0 - Production on 星期二 10月 23 01:26:01 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: PRETRADE (DBID=3201410814)
RMAN> run{
2> allocate channel c1 device type disk connect ;
3> convert tablespace ndmain,zhejiang to platform 'Linux IA (32-bit)' Format '/backup/dmp/%U';
4> release channel c1;
5> }
--這段指令碼的意思是把ndmain、zhejiang這兩個表空間對應的資料檔案轉換成Linux IA (32-bit),並把轉換後的資料檔案放在/backup/dmp下
allocated channel: c1
channel c1: sid=316 instance=prerac1 devtype=DISK
Starting backup at 23-10月-07
channel c1: starting datafile conversion
input datafile fno=00014 name=+DATA/datafile/ndmain1.ora
converted datafile=/backup/dmp/data_D-PRETRADE_I-3201410814_TS-NDMAIN_FNO-14_64iv64lb
channel c1: datafile conversion complete, elapsed time: 00:05:06
......
channel c1: starting datafile conversion
input datafile fno=00038 name=+DATA/datafile/zhejiang18.ora
converted datafile=/backup/dmp/data_D-PRETRADE_I-3201410814_TS-ZHEJIANG_FNO-38_6oiv6bac
channel c1: datafile conversion complete, elapsed time: 00:05:45
Finished backup at 23-10月-07
released channel: c1
5、傳送檔案到目標資料庫
[oracle@tdata dmp]$ sftp 172.0.2.1
Password:
sftp> cd /backup
sftp> ls
dmp lost+found soft
sftp> cd dmp
sftp> mget *
6、在目標資料庫建立對應的使用者及授權
在匯入資料時,對應的使用者必須已經存在,並有合適的許可權,否則會報錯。
[oracle@tdata dmp]$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on 星期二 10月 23 09:32:00 2007
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning and Data Mining options
SQL> create user ndmain identified by testndmain202;
User created.
SQL> create user zhejiang identified by testzj202;
User created.
SQL> create user ZHEJIANG_OPERATOR identified by testzjop202;
User created.
SQL> create user ZHEJIANG_KHD identified by testzjkhd202;
User created.
SQL> grant connect,resource to ndmain;
Grant succeeded.
SQL> grant connect,resource to zhejiang;
Grant succeeded.
SQL> grant connect,resource to ZHEJIANG_OPERATOR;
Grant succeeded.
SQL> grant connect,resource to ZHEJIANG_KHD;
Grant succeeded.
SQL> grant create materialized view to zhejiang;
Grant succeeded.
SQL> grant create materialized view to ndmain;
Grant succeeded.
SQL> grant create synonym to zhejiang;
Grant succeeded.
SQL> grant create synonym to ndmain;
Grant succeeded.
SQL> grant create materialized view to ZHEJIANG_KHD;
Grant succeeded.
SQL> grant create materialized view to ZHEJIANG_OPERATOR;
Grant succeeded.
SQL> grant create synonym to ZHEJIANG_KHD;
Grant succeeded.
SQL> grant create synonym to ZHEJIANG_OPERATOR;
Grant succeeded.
--建立directory
SQL> create directory tran as '/oradata/dmp';
Directory created.
7、在目標庫轉換檔案路徑和名稱
在目標資料庫以rman執行:
run{
convert datafile '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-NDMAIN_FNO-14_64iv64lb' db_file_name_convert '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-NDMAIN_FNO-14_64iv64lb' , '/oradata/oradata/testzj/ndmain1.dbf';
convert datafile '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-NDMAIN_FNO-15_65iv64ut' db_file_name_convert '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-NDMAIN_FNO-15_65iv64ut' , '/oradata/oradata/testzj/ndmain2.dbf';
convert datafile '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-NDMAIN_FNO-16_66iv658p' db_file_name_convert '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-NDMAIN_FNO-16_66iv658p' , '/oradata/oradata/testzj/ndmain3.dbf';
......
convert datafile '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-ZHEJIANG_FNO-36_6miv6ald' db_file_name_convert '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-ZHEJIANG_FNO-36_6miv6ald' , '/oradata/oradata/testzj/zhejiang16.dbf';
convert datafile '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-ZHEJIANG_FNO-37_6niv6b06' db_file_name_convert '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-ZHEJIANG_FNO-37_6niv6b06' , '/oradata/oradata/testzj/zhejiang17.dbf';
convert datafile '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-ZHEJIANG_FNO-38_6oiv6bac' db_file_name_convert '/oradata/dmp/data_D-PRETRADE_I-3201410814_TS-ZHEJIANG_FNO-38_6oiv6bac' , '/oradata/oradata/testzj/zhejiang18.dbf';
}
--這段話的意思是把源資料庫複製過來的檔案複製並重新命名。
8、把資料匯入到目標庫中
[oracle@tdata dmp]$ impdp system/test dumpfile=expdat.dmp directory=tran exclude=transportable_export/materialized_view,transportable_export/table_statistics,transportable_export/grant/owner_grant/object_grant transport_datafiles='/oradata/oradata/testzj/ndmain1.dbf','/oradata/oradata/testzj/ndmain2.dbf','/oradata/oradata/testzj/ndmain3.dbf','/oradata/oradata/testzj/zhejiang1.dbf','/oradata/oradata/testzj/zhejiang2.dbf','/oradata/oradata/testzj/zhejiang3.dbf','/oradata/oradata/testzj/zhejiang4.dbf','/oradata/oradata/testzj/zhejiang5.dbf','/oradata/oradata/testzj/zhejiang6.dbf','/oradata/oradata/testzj/zhejiang7.dbf','/oradata/oradata/testzj/zhejiang8.dbf','/oradata/oradata/testzj/zhejiang9.dbf','/oradata/oradata/testzj/zhejiang10.dbf','/oradata/oradata/testzj/zhejiang11.dbf','/oradata/oradata/testzj/zhejiang12.dbf','/oradata/oradata/testzj/zhejiang13.dbf','/oradata/oradata/testzj/zhejiang14.dbf','/oradata/oradata/testzj/zhejiang15.dbf','/oradata/oradata/testzj/zhejiang16.dbf','/oradata/oradata/testzj/zhejiang17.dbf','/oradata/oradata/testzj/zhejiang18.dbf'
Import: Release 10.2.0.3.0 - Production on 星期二, 23 10月, 2007 17:08:14
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning and Data Mining options
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/******** dumpfile=expdat.dmp directory=tran exclude=transportable_export/materialized_view,transportable_export/table_statistics,transportable_export/grant/owner_grant/object_grant transport_datafiles=/oradata/oradata/testzj/ndmain1.dbf,/oradata/oradata/testzj/ndmain2.dbf,/oradata/oradata/testzj/ndmain3.dbf,/oradata/oradata/testzj/zhejiang1.dbf,/oradata/oradata/testzj/zhejiang2.dbf,/oradata/oradata/testzj/zhejiang3.dbf,/oradata/oradata/testzj/zhejiang4.dbf,/oradata/oradata/testzj/zhejiang5.dbf,/oradata/oradata/testzj/zhejiang6.dbf,/oradata/oradata/testzj/zhejiang7.dbf,/oradata/oradata/testzj/zhejiang8.dbf,/oradata/oradata/testzj/zhejiang9.dbf,/oradata/oradata/testzj/zhejiang10.dbf,/oradata/oradata/testzj/zhejiang11.dbf,/oradata/oradata/testzj/zhejiang12.dbf,/oradata/oradata/testzj/zhejiang13.dbf,/oradata/oradata/testzj/zhejiang14.dbf,/oradata/oradata/testzj/zhejiang15.dbf,/oradata/oradata/testzj/zhejiang16.dbf,/oradata/oradata/testzj/zhejiang17.dbf,/oradata/oradata/testzj/zhejiang18.dbf
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/INDEX
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/COMMENT
Processing object type TRANSPORTABLE_EXPORT/CONSTRAINT/REF_CONSTRAINT
Processing object type TRANSPORTABLE_EXPORT/TRIGGER
Processing object type TRANSPORTABLE_EXPORT/INDEX/FUNCTIONAL_AND_BITMAP/INDEX
Processing object type TRANSPORTABLE_EXPORT/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at 17:10:00
在匯入時有三個部分物件排除出去:
transportable_export/materialized_view:因為是測試環境,不需要同步資料,所以沒有必要建立物化檢視
transportable_export/grant/owner_grant/object_grant:因為新環境有很多使用者不存在,保留授權會導致一大堆的報錯資訊,故排除
transportable_export/table_statistics:不匯入表統計資訊是為了避免bug:
ORA-39083: Object type TABLE_STATISTICS failed to create with error:
ORA-06550: line 12, column 17:
PL/SQL: ORA-00917: missing comma
ORA-06550: line 4, column 127:
PL/SQL: SQL Statement ignored
注意:用傳輸表空間的方法,只是把傳輸過來的表空間的資料都導過來,使用者的很多物件如序列、檢視等是不會導過來的,你需要手工補上這些物件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63878/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【資料遷移】XTTS跨平臺傳輸表空間v4TTS
- 【資料遷移】XTTS跨平臺傳輸表空間(1.傳統方式)TTS
- 【資料遷移】XTTS跨平臺傳輸表空間v3(3.DFT方式)TTS
- 【資料遷移】XTTS跨平臺傳輸表空間v3(2.RMAN增量)TTS
- 【MOS】如何利用RMAN可傳輸表空間遷移資料庫到不同位元組序的平臺(文件 ID 1983639.1)資料庫
- Oracle資料庫遷移 - 異構傳輸表空間TTS HP-UX遷移至Redhat Linux 7.7Oracle資料庫TTSRedhatLinux
- MySQL 傳輸表空間MySql
- table/index/LOBINDEX遷移表空間Index
- mysql之 表空間傳輸MySql
- MySQL 遷移表空間,備份單表MySql
- Oraclc 12C使用不一致備份執行跨平臺傳輸表空間
- 【XTTS】使用XTTS傳輸表空間將Oracle11.2.0.4資料遷移至Oracle19CTTSOracle
- 12c – 使用跨平臺增量備份來減少傳輸表空間的停機時間 (文件 ID 2102859.1)
- 12c – 使用跨平臺增量備份來減少傳輸表空間的停機時間 (Doc ID 2102859.1)
- Oracle中表空間、表、索引的遷移Oracle索引
- 達夢資料庫系統表空間資料檔案遷移過程資料庫
- 達夢(DM)資料庫的表空間建立和遷移維護資料庫
- Oracle 12cbigfile表空間物件遷移Oracle物件
- 使用 Velero 跨雲平臺遷移叢集資源到 TKE
- mysql共享表空間擴容,收縮,遷移MySql
- 上雲遷移還怕傳輸慢、開機久、停機長?深信服SCMT遷移平臺這樣節省時間!
- impala 資料表在叢集間遷移方案
- 【XTTS】Oracle傳輸表空間xtts增量方式TTSOracle
- elasticsearch跨叢集資料遷移Elasticsearch
- GBASE助力山東移動大資料平臺PB級資料主倉業務跨機房無感知遷移大資料
- 12c跨平臺完成PDB的備份遷移
- RMAN備份恢復典型案例——跨平臺遷移pdb
- oracle 表移動表空間Oracle
- Oracle表移動表空間Oracle
- 資料遷移(1)——通過資料泵表結構批量遷移
- MySQL傳輸表空間的簡單使用方法MySql
- SecureFX for Mac(跨平臺檔案傳輸客戶端)Mac客戶端
- 資料實時傳輸平臺(CDC)與低程式碼平臺(APAAS)資料整合
- 高途資料平臺遷移與成本治理實踐
- 【DB寶50】Oracle異構平臺遷移之完全可傳輸匯出匯入Oracle
- PostgreSQL在不同的表空間移動資料檔案SQL
- PostgreSQL:表空間-->資料庫-->表SQL資料庫
- MYSQL造資料佔用臨時表空間MySql