1. 程式人生 > 實用技巧 >OracleDBA職責—備份與恢復技術—傳輸表空間

OracleDBA職責—備份與恢復技術—傳輸表空間

資料遷移——傳輸表空間

資料遷移——傳輸表空間
1.什麼是傳輸表空間
2.怎樣實現傳輸表空間
3.傳輸表空間的要求
4.傳輸表空間的模擬實驗
4.1 在原庫上建立要傳輸的表空間:
4.2 在新建的表空間上建立一些表:
4.3 檢視原庫和目標庫的平臺資訊:
4.4 表空間自包含檢查:
4.5 建立傳輸表空間集:
4.6 將傳輸表空間集和資料檔案傳輸到目標庫相應路徑:
4.7 匯入傳輸表空間:
4.8 將原庫與目標庫的表空間重新設定為讀寫:
4.9 檢查目標庫是否一切正常:toc

1.什麼是傳輸表空間

傳輸表空間技術始於Oracle9i,它的原理是將元資料和資料檔案從一個數據庫遷移到另一個數據庫,而且不需要原庫和目標庫具有相同的塊大小,相比較匯入匯出工具,傳輸表空間只會複製包含實際資料的資料庫檔案到目標資料庫的指定位置,所以會節省很多時間,傳輸表空間也是資料庫之間傳輸大資料的一種方法。

2.怎樣實現傳輸表空間

  • 使用sqlplus,rman,資料泵等手動進行表空間傳輸。(我們實驗用這種方式)
  • 使用EM工具中的傳輸表空間嚮導實現傳輸表空間。

3.傳輸表空間的要求

  • 支援傳輸表空間技術的作業系統平臺(傳輸表空間可以跨平臺,但需要符合要求)
SYS@proe>select * from v$transportable_platform order by 1;

PLATFORM_ID PLATFORM_NAME                                           ENDIAN_FORMAT
----------- ------------------------------------------------------- ------------
          1 Solaris[tm] OE (32-bit)                                 Big
          2 Solaris[tm] OE (64-bit)                                 Big
          3 HP-UX (64-bit)                                          Big
          4 HP-UX IA (64-bit)                                       Big
          5 HP Tru64 UNIX                                           Little
          6 AIX-Based Systems (64-bit)                              Big
          7 Microsoft Windows IA (32-bit)                           Little
          8 Microsoft Windows IA (64-bit)                           Little
          9 IBM zSeries Based Linux                                 Big
         10 Linux IA (32-bit)                                       Little
         11 Linux IA (64-bit)                                       Little

PLATFORM_ID PLATFORM_NAME                                           ENDIAN_FORMAT
----------- ------------------------------------------------------- ------------
         12 Microsoft Windows x86 64-bit                            Little
         13 Linux x86 64-bit                                        Little
         15 HP Open VMS                                             Little
         16 Apple Mac OS                                            Big
         17 Solaris Operating System (x86)                          Little
         18 IBM Power Based Linux                                   Big
         19 HP IA Open VMS                                          Little
         20 Solaris Operating System (x86-64)                       Little
         21 Apple Mac OS (x86-64)                                   Little

20 rows selected.
  • Oracle使用傳輸表空間的版本要求:

  • 其他要求:
    1)原庫和目標庫的字符集必須相容。
    2)目標庫不能存在同名表空間。
    3)如果要傳輸的表空間中存在物化檢視,分割槽表等潛在的物件,這些物件一定要包含在表空間集中。
    4)不能傳輸系統表空間,也不能傳輸包含sys使用者物件的表空間。

4.傳輸表空間的模擬實驗

4.1 在原庫上建立要傳輸的表空間:
SYS@proe>create tablespace trans_tbs datafile '/u01/app/oracle/oradata/proe/trans_tbs1.dbf' size 100m;

Tablespace created.
4.2 在新建的表空間上建立一些表:
SYS@proe>create table trantest1 tablespace trans_tbs as select * from hr.employees;
Table created.

SYS@proe>create table trantest2 tablespace trans_tbs as select * from scott.emp;
Table created.
#檢視有表空間存在表的資訊
SYS@proe>select table_name,tablespace_name from dba_tables where tablespace_name='TRANS_TBS';

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
TRANTEST1                      TRANS_TBS
TRANTEST2                      TRANS_TBS
4.3 檢視原庫和目標庫的平臺資訊:
#原庫:
SYS@proe>SELECT d.name,d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
NAME      PLATFORM_NAME                  ENDIAN_FORMAT
--------- ------------------------------ --------------
PROE      Linux x86 64-bit               Little

#目標庫:
SYS@proe>SELECT d.name,d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;
NAME      PLATFORM_NAME                  ENDIAN_FORMAT
--------- ------------------------------ --------------
PROE      Linux x86 64-bit               Little
##不好意思,我太懶了 還是克隆的
#兩個資料庫相容進行下一步。
4.4 表空間自包含檢查:

用來檢測相關物件的屬性是否都存在在一個表空間。使用自包含檢測的包。

SYS@proe>exec dbms_tts.transport_set_check('TRANS_TBS',true,true);
PL/SQL procedure successfully completed.
#可以一次檢查多個表空間,使用逗號隔開即可。
SYS@proe>select * from transport_set_violations;
no rows selected
#檢視檢測結果。沒有結果就是通過。
4.5 建立傳輸表空間集:

1)將原庫表空間置為read only

SYS@proe>alter tablespace trans_tbs read only;
Tablespace altered.

2)匯出傳輸表空間集的元資料資訊到目錄物件中(借用上次資料泵的目錄物件)

[oracle@server1 ~]$ expdp \'sys\/123456 as sysdba\' directory=pump_dir dumpfile=tbs_tran.dmp transport_tablespaces=trans_tbs

Export: Release 11.2.0.4.0 - Production on Thu Jul 16 20:48:25 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYS"."SYS_EXPORT_TRANSPORTABLE_01":  "sys/******** AS SYSDBA" directory=pump_dir dumpfile=tbs_tran.dmp transport_tablespaces=trans_tbs 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Master table "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_TRANSPORTABLE_01 is:
  /home/oracle/pumpdir/tbs_tran.dmp
******************************************************************************
Datafiles required for transportable tablespace TRANS_TBS:
  /u01/app/oracle/oradata/proe/trans_tbs1.dbf
Job "SYS"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Thu Jul 16 20:48:47 2020 elapsed 0 00:00:21

4.6 將傳輸表空間集和資料檔案傳輸到目標庫相應路徑:

首先是傳輸表空間集:

[root@server1 pumpdir]# scp tbs_tran.dmp 11gtest:/home/oracle/pumpdir/
root@11gtest's password: 
tbs_tran.dmp                                            100%  108KB 108.0KB/s   00:00

然後是資料檔案:

[root@server1 proe]# pwd
/u01/app/oracle/oradata/proe
[root@server1 proe]# scp trans_tbs1.dbf 11gtest:/u01/app/oracle/oradata/proe/
root@11gtest's password: 
trans_tbs1.dbf                                          100%  100MB   1.3MB/s   01:16    

目標庫授權一下(因為用root傳的)

[root@11gtest pumpdir]# chown oracle:oinstall tbs_tran.dmp 
[root@11gtest pumpdir]# chmod 664 tbs_tran.dmp 
[root@11gtest pumpdir]# chown oracle:oinstall /u01/app/oracle/oradata/proe/trans_tbs1.dbf 
[root@11gtest pumpdir]# chmod 664 /u01/app/oracle/oradata/proe/trans_tbs1.dbf
4.7 匯入傳輸表空間:

由於目標庫已經有目錄物件了這裡就不再建立
並且,目標資料庫需要有和原庫相同的資料庫模式。不然需要使用remap_schema 引數指定。用法與資料泵一樣。

[oracle@11gtest proe]$ impdp \'sys\/123456 as sysdba\' directory=pump_dir dumpfile=tbs_tran.dmp transport_datafiles='/u01/app/oracle/oradata/proe/trans_tbs1.dbf'

Import: Release 11.2.0.4.0 - Production on Fri Jul 17 16:09:43 2020

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYS"."SYS_IMPORT_TRANSPORTABLE_01":  "sys/******** AS SYSDBA" directory=pump_dir dumpfile=tbs_tran.dmp transport_datafiles=/u01/app/oracle/oradata/proe/trans_tbs1.dbf 
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYS"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Fri Jul 17 16:09:47 2020 elapsed 0 00:00:03
4.8 將原庫與目標庫的表空間重新設定為讀寫:
SYS@proe>alter tablespace trans_tbs read write;
Tablespace altered.

SYS@proe>alter tablespace trans_tbs read write;
Tablespace altered.
4.9 檢查目標庫是否一切正常:

傳輸表空間完成。



來自為知筆記(Wiz)