您好,登錄后才能下訂單哦!
本篇內容主要講解“RMAN怎么跨平臺傳輸數據庫和表空間”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“RMAN怎么跨平臺傳輸數據庫和表空間”吧!
一.跨平臺傳輸表空間
使用跨平臺傳輸表空間,平臺之間可以是不同的字節存儲順序(endian format)。當源平臺和目的地平臺的字節存儲順序不同,源平臺要傳輸表空間下的數據文件的字節存儲順序必須轉換成和目的地平臺相同。轉換操作使用RMAN CONVERT TABLESPACE命令(在源平臺轉換)或者CONVERT DATAFILE命令(在目的地平臺轉換)。
CONVERT TABLESPACE命令必須用在源平臺,CONVERT DATAFILE命令用在目的地平臺。
1.在源平臺使用CONVERT TABLESPACE... TO PLATFORM命令:
CONVERT TABLESPACE... TO PLATFORM命令用于在源平臺轉換表空間到目的地平臺格式。在源平臺數據庫調用CONVERT TABLESPACE命令指定一個或更多表空間名稱,例如:
RMAN> CONVERT TABLEPSACE ts_1, ts_2 ...
TO PLATFORM 'platform_name';
platform_name支持的值可以從V$TRANSPORTABLE_PLATFORM查詢到。
在源平臺必須轉換整個表空間,不能只轉換一個數據文件。
CONVERT TABLESPACE ... TO PLATFORM包含如下可選參數:
PARALLELISM n
用于指定n個服務器會話并行執行轉換工作,以提升性能。每個數據文件只能分配一個單獨的服務器會話進行轉換,因此,不能通過分配一個大并行度轉換單一數據文件來提升性能。
fileNameConversionSpec
指定使用fileNameConversionSpec參數,用于對轉換的數據文件生成新的文件名。
FORMAT formatSpec
提供一個格式模板用于對轉換的數據文件生成新的,唯一的文件名。如果沒有指定FORMAT,RMAN使用和平臺相關的目的地和格式。
下面在源平臺轉換表空間的例子:
1).設置傳輸表空間為只讀模式。
2).在V$TRANSPORTABLE_PLATFORM中查看目的地平臺的名稱。
SQL> SELECT PLATFORM_ID, PLATFORM_NAME, ENDIAN_FORMAT
FROM V$TRANSPORTABLE_PLATFORM
WHERE UPPER(PLATFORM_NAME) LIKE 'LINUX';
針對Linux在PC上的PLATFORM_NAME是'Linux IA (32bit)'。
3).使用CONVERT TABLESPACE轉換命令。
使用RMAN轉換數據文件到目的地平臺的字節存儲順序,FORMAT參數控制轉換后數據文件的名稱和位置:
% rman TARGET /
RMAN> CONVERT TABLESPACE finance,hr
TO PLATFORM 'Linux IA (32-bit)'
FORMAT='/tmp/transport_linux/%U';
轉換后的數據文件被放在/tmp/transport_linux目錄,數據和目的地系統的字節存儲順序相同。
4).使用導出工具創建導出dump文件。
5).移動轉換后的文件和導出的dump文件到目的地平臺主機。
6).使用導入工具插入表空間到新數據庫。
7).修改表空間為讀寫模式。
2.在目的地主機使用CONVERT DATAFILE... FROM PLATFORM命令:
CONVERT DATAFILE ... FROM PLATFORM用于在目的地平臺轉換源平臺的表空間字節存儲順序。不能在目的地平臺使用CONVERT TABLESPACE。
CONVERT DATAFILE命令可以跟上一個或多個需要轉換的數據文件,例如:
RMAN> CONVERT DATAFILE datafile_1, datafile_2 ...
FROM PLATFORM 'platform_name';
提供的FROM PLATFORM值必須匹配待轉換數據文件的真實平臺,否則RMAN返回一個錯誤,platform_name支持的值可以從V$TRANSPORTABLE_PLATFORM查詢到。
PARALLELISM、FORMAT、fileNameConversionSpec參數和CONVERT TABLESPACE在源平臺用法是相同的。
下面是在目的地平臺轉換數據文件的例子:
1).在源庫將需要轉換的表空間設置為只讀模式,表空間對應的數據文件包括:
/tmp/transport_solaris/fin/fin01.dbf
/tmp/transport_solaris/fin/fin02.dbf
/tmp/transport_solaris/hr/hr01.dbf
/tmp/transport_solaris/hr/hr02.dbf
2).在源庫使用導出工具創建dump文件。
3).拷貝dump文件和數據文件到目的地。
4).使用RMAN CONVERT命令轉換數據文件到目標主機格式,將轉換后的數據文件存放在/orahome/dbs目錄。
% rman TARGET /
RMAN> CONVERT DATAFILE
'/tmp/transport_solaris/fin/fin01.dbf',
'/tmp/transport_solaris/fin/fin02.dbf',
'/tmp/transport_solaris/hr/hr01.dbf',
'/tmp/transport_solaris/hr/hr02.dbf'
DB_FILE_NAME_CONVERT
'/tmp/transport_solaris/fin','/orahome/dbs/fin',
'/tmp/transport_solaris/hr','/orahome/dbs/hr';
注意:
a).FORMAT參數控制數據文件的名稱和位置。
b).當在目的地平臺轉換數據文件時,必須使用FROM PLATFORM參數指定源平臺。否則,RMAN將假設源和目的地平臺字節存儲順序是相同的。
5).使用導入工具插入轉換后的表空間到新的數據庫。
6).修改表空間為讀寫模式。
對于跨平臺傳輸表空間而言,如果源平臺和目的地平臺的字節存儲順序是相同,那么可以不必執行CONVERT TABLESPACE或CONVERT DATAFILE進行轉換,直接簡單拷貝即可。
CONVERT TABLESPACE和CONVERT DATAFILE限制:
a).源和目的地數據庫的COMPATIBLE初始化參數必須設置為10.0或者更高。
b).不是所有源和目的地平臺的組合都是支持的,確定源和目的地平臺是否被支持需要查詢V$TRANSPORTABLE_PLATFORM。如果源和目的地都在該視圖列表中,那么CONVERT能用于一個平臺到另一個平臺的轉換。
c).在10g版本,使用CONVERT命令將表空間傳遞到另一個平臺之前必須至少一次被設置為讀寫模式。
d).RMAN的endian轉換不能處理用戶自定義數據類型。
e).10g之前的版本,CLOBs以可變長度字符集創建,并且依賴字節存儲順序存儲,CONVERT命令不能執行CLOBs的轉換,RMAN捕獲每個LOB字段的字節存儲順序,傳播它到目的地數據庫。之后通過SQL層讀寫這個數據,基于兩者之一的字節存儲順序正確翻譯數據,如果表空間可寫,那么基于相關字節存儲順序寫數據。
f).在Oracle Database 10g創建的CLOBs,存儲在AL16UTF16字符集中,具有平臺獨立性。
二.跨平臺傳輸數據庫
RMAN CONVERT DATABASE命令用于自動從一個平臺(源平臺)移動整個數據庫到另一個平臺(目的地平臺)。源和目的地平臺必須是相同的字節存儲順序,RMAN在目的地平臺自動完成大多數創建新數據庫的步驟,確保與源數據庫有相同的數據,相同的設置。
CONVERT DATABASE步驟可以在源平臺或者目的地平臺執行。
跨平臺傳輸數據庫要求平臺之間必須有相同的字節存儲順序(endian format),傳輸數據庫的數據文件必須經歷轉換過程,不能簡單的從一個平臺拷貝到另一個平臺,可傳輸表空間是可以的。
如果數據庫使用的是PFILE,它是可以被傳遞的。如果使用的是SPFILE,那么將基于SPFILE生成PFILE,進行傳遞,之后在目標主機基于PFILE的設置創建一個新的SPFILE。大多數情況下,PFILE中的一些參數要求手動更新到新的數據庫,例如,DB_NAME,CONTROL_FILES等。
跨平臺傳輸數據庫的限制:
a).源和目的地平臺字節存儲順序必須是相同的。
b).數據庫文件不能簡單的直接從源拷貝到目標主機,必須經過轉換過程。
c).源平臺的Redo日志文件和控制文件不支持傳輸,在傳輸過程中,針對新的數據庫將創建新的控制文件和redo日志文件,OPEN RESETLOGS執行一次,新數據庫即被創建。
注意:轉換后的數據庫控制文件不會包含源庫的RMAN資料庫的拷貝信息,源數據庫的備份不能用于轉換后的新數據庫。
d).BFILEs不能被傳輸,RMAN在CONVERT DATABASE命令的輸出中包含BFILE類型的對象列表,用戶必須拷貝BFILEs到目的地平臺指定的位置。
e).屬于本地管理的臨時表空間下的臨時文件不能被傳輸,當執行transport script時,臨時表空間將在目的地平臺被重建。
f).外部表和directory不能傳輸,RMAN在CONVERT DATABASE命令的輸出中列出了受影響的對象,用戶必須在目的地數據庫重新定義。
g).密碼文件不能被傳輸。如果源庫有密碼文件,CONVERT DATABASE命令的輸出將包括密碼文件中所有用戶的列表和它們對應的權限,用戶參考這些信息在目的地數據庫中重新創建新的密碼文件。
1.使用DBMS_TDB包準備CONVERT DATABASE操作。
DBMS_TDB PL/SQL包定義了兩個函數用于準備CONVERT DATABASE操作。
1).使用DBMS_TDB.CHECK_DB檢查數據庫狀態:
DBMS_TDB.CHECK_DB檢查數據庫是否能被傳輸到期望的平臺,當前數據庫狀態是否允許傳輸。它能在不跟任何參數的情況下被調用,查看源庫是否有任何條件輸出。
DBMS_TDB.CHECK_DB返回TRUE,表示源數據庫能使用CONVERT DATABASE傳輸,FALSE表示不能被傳輸。
確保數據庫以只讀模式打開,然后再帶上合適的參數調用DBMS_TDB.CHECK_DB。
如果SERVEROUTPUT是ON,DBMS_TDB.CHECK_DB返回FALSE,那么會輸出數據庫不能被傳輸的原因。以下是可能阻止使用CONVERT DATABASE傳輸的原因:
a).未知的目的地平臺名稱。
b).目的地平臺有不同的字節存儲順序。
c).數據庫不是以只讀模式打開。
d).數據庫有活動或被懷疑的事務。
e).需要執行事務回滾操作。
f).數據庫兼容版本小于10。
g).一些表空間沒有在兼容版本是10或更高的庫中以讀寫模式打開過。
如果調用DBMS_TDB.CHECK_DB在PL/SQL procedure successfully completed消息之前沒有阻止傳輸的消息顯示,表明數據庫準備好被傳輸。
2).使用DBMS_TDB.CHECK_EXTERNAL標識外部對象:
DBMS_TDB.CHECK_EXTERNAL用于表示任何外部表,directory或者BFILEs。RMAN不能自動傳輸這些文件。
DBMS_TDB.CHECK_EXTERNAL沒有參數,當SERVEROUTPUT設置為ON,DBMS_TDB.CHECK_EXTERNAL輸出數據庫包含的外部表,directory和BFILEs。
2.使用RMAN CONVERT DATABASE命令轉換數據庫。
在源和目的地平臺執行CONVERT DATABASE的過程是不同的。
1).在源平臺使用CONVERT DATABASE轉換數據文件。
下面是轉換步驟:
a).準備傳輸數據庫,源數據庫必須以只讀方式打開。
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN READ ONLY;
b).使用DBMS_TDB.CHECK_DB檢查數據庫狀態。
使用DBMS_TDB包的CHECK_DB函數檢查數據庫是否準備好了。
set serveroutput on
declare
db_ready boolean;
begin
/* db_ready is ignored, but with SERVEROUTPUT set to ON any
* conditions preventing transport will be output to console */
db_ready := dbms_tdb.check_db('Microsoft Windows IA (32-bit)',
dbms_tdb.skip_none);
end;
c).使用DBMS_TDB.CHECK_EXTERNAL標識外部對象。
SQL> set serveroutput on
SQL> declare
external boolean;
begin
/* value of external is ignored, but with SERVEROUTPUT set to ON
* dbms_tdb.check_external displays report of external objects
* on console */
external := dbms_tdb.check_external;
end;
當數據庫準備好傳輸后,執行RMAN CONVERT DATABASE命令,指定目的地平臺和輸出文件名稱。RMAN處理需要移動到目的地數據庫的文件,包括以下:
*數據庫數據文件的完整拷貝,準備傳輸。
*用于目的地平臺新數據庫的PFILE,包括源數據庫PFILE或者SPFILE的設置:
# Please change the values of the following parameters:
control_files = "/tmp/convertdb/cf_D-NEWDBT_id-1778429277_00gb9u2s"
db_recovery_file_dest = "/tmp/convertdb/orcva"
db_recovery_file_dest_size= 10737418240
instance_name = "NEWDBT"
service_names = "NEWDBT.regress.rdbms.dev.us.oracle.com"
plsql_native_library_dir = "/tmp/convertdb/plsqlnld1"
db_name = "NEWDBT"
*transport script,包含用于在目的地平臺創建新數據庫SQL語句。
d).執行CONVERT DATABASE操作。
以下是在源平臺使用CONVERT DATABASE的例子:
RMAN> CONVERT DATABASE NEW DATABASE 'newdb'
transport script '/tmp/convertdb/transportscript'
to platform 'Microsoft Windows IA (32-bit)'
db_file_name_convert '/disk1/oracle/dbs' '/tmp/convertdb'
;
Starting convert at 25-JAN-05
using channel ORA_DISK_1
External table SH.SALES_TRANSACTIONS_EXT found in the database
Directory SYS.DATA_PUMP_DIR found in the database
Directory SYS.MEDIA_DIR found in the database
Directory SYS.DATA_FILE_DIR found in the database
Directory SYS.LOG_FILE_DIR found in the database
BFILE PM.PRINT_MEDIA found in the database
User SYS with SYSDBA and SYSOPER privilege found in password file
User OPER with SYSDBA privilege found in password file
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00001 name=/disk1/oracle/dbs/tbs_01.f
converted datafile=/tmp/convertdb/tbs_01.f
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00002 name=/disk1/oracle/dbs/tbs_ax1.f
converted datafile=/tmp/convertdb/tbs_ax1.f
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:03
.
.
.
channel ORA_DISK_1: starting datafile conversion
input datafile fno=00016 name=/disk1/oracle/dbs/tbs_52.f
converted datafile=/tmp/convertdb/tbs_52.f
channel ORA_DISK_1: datafile conversion complete, elapsed time: 00:00:01
Run SQL script /tmp/convertdb/transportscript on the target platform
to create database
Edit init.ora file init_00gb3vfv_1_0.ora.This PFILE will be used to
create the database on the target platform
To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on
the target platform
To change the internal database identifier, use DBNEWID Utility
Finished backup at 25-JAN-05
當CONVERT DATABASE完成,源數據庫可以以讀寫模式被再次打開。
e).將所有處理的文件拷貝到目的地主機。
放置數據文件到目的地主機期望的位置,如果在目的地的數據文件路徑和源不同,編輯transport script引用新的數據文件位置。同時編輯PFILE修改任何針對目的地數據庫的設置。
f).在目的地主機的SQL*PLUS中執行transport scirpt創建新數據庫。
SQL> @transportscript
當transport sciprt完成,新數據庫即創建完成。
2).在目的地主機使用CONVERT DATABASE轉換數據文件。
我們可能基于以下的原因考慮在目的地執行CONVERT DATABASE轉換操作:
*防止在源主機執行轉換過程帶來任何性能的開銷。
*從源系統分發數據庫到多個可接受的不同的平臺。
下面是轉換步驟:
a).以只讀模式打開源數據庫。
b).執行DBMS_TDB.CHECK_DB標識任何阻止傳輸的原因。
c).執行DBMS_TDB.CHECK_EXTERNAL標識外部對象。
d).在源平臺運行RMAN CONVERT DATABASE命令指定ON TARGET PLATFORM參數,下面是源主機上執行CONVERT DATABASE ON TARGET PLATFORM的例子:
RMAN> convert database on target platform
convert script '/tmp/convertdb/convertscript-target'
transport script '/tmp/convertdb/transportscript-target'
new database 'newdbt'
format '/tmp/convertdb/%U'
;
Starting convert at 28-JAN-05
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=39 devtype=DISK
External table SH.SALES_TRANSACTIONS_EXT found in the database
Directory SYS.DATA_PUMP_DIR found in the database
Directory SYS.MEDIA_DIR found in the database
Directory SYS.DATA_FILE_DIR found in the database
Directory SYS.LOG_FILE_DIR found in the database
BFILE PM.PRINT_MEDIA found in the database
User SYS with SYSDBA and SYSOPER privilege found in password file
User OPER with SYSDBA privilege found in password file
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00001 name=/disk1/oracle/dbs/tbs_01.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00002 name=/disk1/oracle/dbs/tbs_ax1.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00017 name=/disk1/oracle/dbs/tbs_03.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
.
.
.
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00015 name=/disk1/oracle/dbs/tbs_51.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile fno=00016 name=/disk1/oracle/dbs/tbs_52.f
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
Run SQL script /tmp/convertdb/transportscript-target on the target platform to create database
Edit init.ora file /tmp/convertdb/init_00gb9u2s_1_0.ora. This PFILE will be used to create the database on the target platform
Run RMAN script /tmp/convertdb/convertscript-target on target platform to convert datafiles
To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the target platform
To change the internal database identifier, use DBNEWID Utility
Finished backup at 28-JAN-05
在源平臺執行CONVERT DATABASE ON TARGET PLATFORM命令產生transport script,包含在目的地平臺創建新數據庫的SQL*PLUS命令,和包含同源數據庫相同設置的新數據庫PFILE。
e).將所有要處理的文件拷貝到目的地主機。
f).執行convert script。
CONVERT DATABASE ON TARGET PLATFORM針對被傳輸的數據庫的每個數據文件生成一個convert script,包含RMAN CONVERT DATAFILE命令。必須拷貝未轉換的源數據文件到目的地相同的位置,然后在目的地運行轉換腳本,轉換數據文件到目的地可用的字節存儲順序。傳統的轉換命令類似以下內容:
RUN {
CONVERT DATAFILE '/disk1/oracle/dbs/tbs_01.f'
FROM PLATFORM 'Linux IA (32-bit)'
FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-1_7qgb9u2s';
CONVERT DATAFILE '/disk1/oracle/dbs/tbs_ax1.f'
FROM PLATFORM 'Linux IA (32-bit)'
FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSAUX_FNO-2_7rgb9u2s';
CONVERT DATAFILE '/disk1/oracle/dbs/tbs_03.f'
FROM PLATFORM 'Linux IA (32-bit)'
FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-SYSTEM_FNO-17_7sgb9u2s';
.
.
.
CONVERT DATAFILE '/disk1/oracle/dbs/tbs_51.f'
FROM PLATFORM 'Linux IA (32-bit)'
FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-15_8egb9u2u';
CONVERT DATAFILE '/disk1/oracle/dbs/tbs_52.f'
FROM PLATFORM 'Linux IA (32-bit)'
FORMAT '/tmp/convertdb/data_D-TV_I-1778429277_TS-TBS_5_FNO-16_8fgb9u2u';
}
CONVERT DATABASE ON TARGET PLATFORM不能處理轉換后的數據文件拷貝。
如果源和目的地的臨時位置不同,注意修改convert script中的CONVERT和FORMAT指定的位置。
g).創建參數文件和執行transport script。
在目的地平臺運行convert script準備數據文件,然后創建期望改變的參數文件,最后運行transport script創建新數據庫。
當transport script完成,新數據庫就創建。
到此,相信大家對“RMAN怎么跨平臺傳輸數據庫和表空間”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。