Oracle10g新特性——利用RMAN遷移表空間(二)
Oracle10g對遷移表空間特性進行了進一步增強,利用RMAN進行表空間遷移,可以避免將源資料庫的表空間置於READ ONLY狀態。
這一篇繼續描述遷移表空間的匯入過程。
Oracle10g新特性——利用RMAN遷移表空間(一):http://yangtingkun.itpub.net/post/468/479902
由於篇幅問題,上一篇只是列出了RMAN的結果,沒有進一步的說明。
雖然只是一個簡單的TRANSPORT TABLESPACE命令,但是RMAN執行了很多的操作。首先RMAN生成了一些初始化引數,自動新建了一個例項,用來執行及時點恢復。
可以看到,例項啟動後,Oracle執行了SET UNTIL SCN,設定了一個TSPITR恢復的時間點,然後恢復控制檔案,MOUNT克隆資料庫。
隨後根據auxiliary destination的設定對資料檔案和臨時檔案進行重新命名。
隨後開始恢復所有需要的資料檔案,並執行RECOVER操作,恢復完成後透過RESETLOGS方式開啟了這個資料庫。
至此,從備份中恢復目標表空間的操作已經完成,隨後進行的是遷移表空間的步驟,RMAN將這個步驟也包含在TRANSPORT TABLESPACE命令當中了。
首先,將目標表空間置為只讀狀態。可以看到,遷移表空間需要源資料庫的目標表空間置於只讀狀態,這個根本性的限制仍然存在,RMAN之所以不需要將源資料庫的表空間置於只讀狀態,在於RMAN在TRANSPORT TABLESPACE的過程中,利用及時點恢復的方式構造了一個CLONE資料庫,在進行遷移表空間的時候,只需要將克隆資料庫的對應表空間置於只讀狀態就可以了。
隨後RMAN透過命令列的方式呼叫了EXPDP執行資料泵的匯出操作。為了能順利的訪問到這個新建的例項,Oracle採用了完整的TNSNAMES規則來作為EXPDP的服務名。並將TRANSPORT TABLESPACE命令中指定的DATAPUMP DIRECTORY、DUMP FILE和EXPORT LOG引數帶入到EXPDP命令中。
在匯出結束後,RMAN還自動生成了匯入的指令碼,存放在IMPORT SCRIPT引數指定的檔案中。而且RMAN生成了兩種匯入方式,分別是IMPDP和PL/SQL匯入的指令碼。
在指令碼生成之後,RMAN自動刪除了輔助例項,並刪除了除目標表空間資料檔案外,所有臨時生成的資料檔案和控制檔案。
下面匯出操作就結束了,將資料檔案、匯出的源資料,以及匯入指令碼檔案複製到目標資料庫所在節點:
bash-2.03$ cd /data1/oradata/testrac
bash-2.03$ ftp 172.25.198.223
Connected to 172.25.198.223.
220 racnode2 FTP server (SunOS 5.8) ready.
Name (172.25.198.223:oracle): oracle
331 Password required for oracle.
Password:
230 User oracle logged in.
ftp> bin
200 Type set to I.
ftp> prompt
Interactive mode off.
ftp> cd /data1/backup
250 CWD command successful.
ftp> mget yangtk01.dbf
200 PORT command successful.
150 Binary data connection for yangtk01.dbf (172.25.198.226,34008) (1056768 bytes).
226 Binary Transfer complete.
local: yangtk01.dbf remote: yangtk01.dbf
1056768 bytes received in 0.14 seconds (7227.95 Kbytes/s)
ftp> cd /data/dmp
250 CWD command successful.
ftp> mget *
200 PORT command successful.
150 Binary data connection for yangtk_meta.dp (172.25.198.226,34013) (69632 bytes).
226 Binary Transfer complete.
local: yangtk_meta.dp remote: yangtk_meta.dp
69632 bytes received in 0.11 seconds (595.27 Kbytes/s)
200 PORT command successful.
150 Binary data connection for yangtk_meta.log (172.25.198.226,34014) (1123 bytes).
226 Binary Transfer complete.
local: yangtk_meta.log remote: yangtk_meta.log
1123 bytes received in 0.013 seconds (86.91 Kbytes/s)
ftp> quit
221 Goodbye.
執行匯入操作,使用的命令可以參考yangtk_imp.scr,這是RMAN的TRANSPORT TABLESPACE命令自動生成的:
$ more yangtk_imp.src
/*
The following command may be used to import the tablespaces.
Substitute values for
impdp
*/
--------------------------------------------------------------
-- Start of sample PL/SQL script. for importing the tablespaces
--------------------------------------------------------------
-- creating directory objects
CREATE DIRECTORY STREAMS$DIROBJ$1 AS '/data1/backup/';
/* PL/SQL Script. to import the exported tablespaces */
DECLARE
-- the datafiles
tbs_files dbms_streams_tablespace_adm.file_set;
cvt_files dbms_streams_tablespace_adm.file_set;
-- the dumpfile to import
dump_file dbms_streams_tablespace_adm.file;
dp_job_name VARCHAR2(30) := NULL;
-- names of tablespaces that were imported
ts_names dbms_streams_tablespace_adm.tablespace_set;
BEGIN
-- dump file name and location
dump_file.file_name := 'yangtk_meta.dp';
dump_file.directory_object := 'd_output';
-- forming list of datafiles for import
tbs_files( 1).file_name := 'yangtk01.dbf';
tbs_files( 1).directory_object := 'STREAMS$DIROBJ$1';
-- import tablespaces
dbms_streams_tablespace_adm.attach_tablespaces(
datapump_job_name => dp_job_name,
dump_file => dump_file,
tablespace_files => tbs_files,
converted_files => cvt_files,
tablespace_names => ts_names);
-- output names of imported tablespaces
IF ts_names IS NOT NULL AND ts_names.first IS NOT NULL THEN
FOR i IN ts_names.first .. ts_names.last LOOP
dbms_output.put_line('imported tablespace '|| ts_names(i));
END LOOP;
END IF;
END;
/
-- dropping directory objects
DROP DIRECTORY STREAMS$DIROBJ$1;
--------------------------------------------------------------
-- End of sample PL/SQL script
--------------------------------------------------------------
下面進行匯入的準備過程:
bash-2.03$ mkdir /data1/dmp
bash-2.03$ mv yangtk_meta.* /data1/dmp
bash-2.03$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.3.0 - Production on 星期三 3月 11 11:12:36 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> create user yangtk identified by yangtk;
使用者已建立。
SQL> grant connect, resource, dba to yangtk;
授權成功。
SQL> create directory d_output as '/data1/dmp';
目錄已建立。
SQL> grant read, write on directory d_output to yangtk;
授權成功。
SQL> exit
最後就可以執行匯入過程了:
bash-2.03$ impdp yangtk/yangtk directory=d_output dumpfile=yangtk_meta.dp logfile=imp_yangtk.log transport_datafiles=/data1/oradata/testrac/yangtk01.dbf
Import: Release 10.2.0.3.0 - 64bit Production on 星期三, 11 3月, 2009 14:32:48
Copyright (c) 2003, 2005, Oracle. All rights reserved.
連線到: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
已成功載入/解除安裝了主表 "YANGTK"."SYS_IMPORT_TRANSPORTABLE_01"
啟動 "YANGTK"."SYS_IMPORT_TRANSPORTABLE_01": yangtk/******** directory=d_output dumpfile=yangtk_meta.dp logfile=imp_yangtk.log transport_datafiles=/data1/oradata/testrac/yangtk01.dbf
處理物件型別 TRANSPORTABLE_EXPORT/PLUGTS_BLK
處理物件型別 TRANSPORTABLE_EXPORT/TABLE
處理物件型別 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
作業 "YANGTK"."SYS_IMPORT_TRANSPORTABLE_01" 已於 14:32:58 成功完成
進入資料庫中檢查一下:
bash-2.03$ sqlplus yangtk/yangtk
SQL*Plus: Release 10.2.0.3.0 - Production on 星期三 3月 11 14:41:21 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> SET PAGES 100 LINES 120
SQL> SELECT OWNER, TABLE_NAME, TABLESPACE_NAME
2 FROM DBA_TABLES
3 WHERE TABLESPACE_NAME = 'YANGTK';
OWNER TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
TEST T YANGTK
SQL> SELECT COUNT(*) FROM TEST.T;
COUNT(*)
----------
45229
可以看到,透過這種方式實現表空間的遷移不需要修改源資料庫表空間的只讀狀態。這使得傳輸表空間在產品環境中使用的可能性大大增加。
當然,對於9i或10.1的環境,完全可以仿照上面的步驟來自己實現表空間及時點的恢復,並從克隆資料庫傳輸表空間。但是自己實現的方法要遠比一個TRANSPORT TABLESPACE命令要複雜得多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-566886/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle10g新特性——利用RMAN遷移表空間Oracle
- Oracle10g新特性——利用RMAN遷移表空間(一)Oracle
- 利用RMAN遷移表空間碰到的問題(二)
- RMAN遷移表空間
- 利用RMAN遷移表空間碰到的問題(五)
- 利用RMAN遷移表空間碰到的問題(四)
- 利用RMAN遷移表空間碰到的問題(三)
- 利用RMAN遷移表空間碰到的問題(一)
- 利用PLSQL實現表空間的遷移(二)SQL
- 使用RMAN簡單遷移表空間
- 遷移表到新的表空間
- 利用可傳輸表空間跨平臺遷移 -RMAN CONVERT
- 利用oracle10g_rman_convert_transportable tablespace遷移表空間Oracle
- 表空間遷移
- 遷移表空間
- 利用PLSQL實現表空間的遷移(一)SQL
- 利用PLSQL實現表空間的遷移(四)SQL
- 利用PLSQL實現表空間的遷移(三)SQL
- 利用PLSQL實現表空間的遷移(五)SQL
- 【遷移】表空間transport
- ORACLE表批量遷移表空間Oracle
- 遷移SYSTEM表空間為本地管理表空間
- expdp/impdp 遷移表空間
- 利用CONVERT實現跨平臺表空間遷移
- 跨平臺表空間遷移(傳輸表空間)
- 通過oracle10g exp/imp在不同表空間間遷移資料Oracle
- Oracle10g新特性:臨時表空間組(temporary tablespace group)Oracle
- table/index/LOBINDEX遷移表空間Index
- lob欄位表空間遷移
- 基於可傳輸表空間的表空間遷移
- Oracle 不同平臺間表空間遷移Oracle
- MySQL 遷移表空間,備份單表MySql
- 表、索引遷移表空間alter table move索引
- 空間遷移
- oracle10G新特性之臨時表空間組的應用Oracle
- Oracle中表空間、表、索引的遷移Oracle索引
- 表空間遷移辦法補充
- 資料庫物件遷移表空間資料庫物件