利用RMAN把ORACLE從WINDOWS轉換到LINUX
注:本文件是本人2010年6月將財政局的AIX上的ORACLE遷移到LINUX所做的測試實驗
瞭解ORACLE的人都知道,如果要把ORACLE從一臺機器遷移到別一臺機器,如果作業系統型別和資料庫版本相同時,直接可以把資料庫乾淨的關閉之後,把資料檔案、控制檔案、引數檔案拷貝到目標機算機,並在目標計算機上只安裝資料庫軟體和建立相同的目錄結構後,就可以完成資料庫的遷移了。
那麼在異構平臺能夠實現這樣的遷移方法嗎?在異構平臺大家用得最多的遷移方法是EXP和EXPDP,還有RMAN的輔助通道、Dataguard、流複製等方法實現。但是利用EXP和EXPDP遷移大資料庫時太慢,Dataguard、流複製等方法又太麻煩。其實在ORACLE 10G以後我們還可以利用RMAN Convert database的新特性進行跨平臺資料遷移。
利用RMAN Convert database特性進行跨平臺遷移資料在Oracle10g中,不僅可以利用跨平臺傳輸表空間的新特性在異構平臺資料庫之間遷移資料,在特定條件下,還可以利用Convert database特性進行整個資料庫跨平臺的遷移。
如果要在10G中進行全庫跨平臺的遷移,那麼只能在低位和低位或者高位和高位平臺之間進行遷移,無法進行高位與低位平臺的遷移。大家可以參考V$TRANSPORTABLE_PLATFORM中的資訊以決定是否能夠遷移。
1:Convert database特性介紹:
1)、只能傳輸資料表空間的資料檔案。臨時表空間將不會被傳輸,如果臨時表空間是本地管理的話,那麼傳輸資料庫完成後將會自動在目標資料庫建立臨時表空間。
2)、假如源主資料庫使用PFILE,那麼PFILE也會被傳輸。如果源資料庫使用的是SPFILE,那麼將會自動產生一個PFILE進行傳輸,並在目標資料庫生成SPFILE。
3)、控制檔案和聯機日誌檔案將不會被傳輸。在目標資料庫open resetlogs的過程中,將會自動建立控制檔案和聯機日誌檔案。
4)、 BFILE、外部表和directory將不會被傳輸。RMAN檢查的時候將會把這些物件列出,使用者可以手工建立這些物件。
5)、密碼檔案將不會被傳輸,使用者必須在目標資料庫手工建立密碼檔案。
傳輸資料庫的第一步是將源資料庫置於READ ONLY模式:
2:檢視ORACLE 10可以支援轉換的目標資料庫的平臺
SQL> select * from V$TRANSPORTABLE_PLATFORM. order by 3;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ----------------------------- ----------------
4 HP-UX IA (64-bit) Big
1 Solaris[tm] OE (32-bit) Big
16 Apple Mac OS Big
3 HP-UX (64-bit) Big
9 IBM zSeries Based Linux Big
6 AIX-Based Systems (64-bit) Big
2 Solaris[tm] OE (64-bit) Big
18 IBM Power Based Linux Big
17 Solaris Operating System (x86) Little
12 Microsoft Windows 64-bit for AMD Little
13 Linux 64-bit for AMD Little
8 Microsoft Windows IA (64-bit) Little
15 HP Open VMS Little
5 HP Tru64 UNIX Little
10 Linux IA (32-bit) Little
7 Microsoft Windows IA (32-bit) Little
11 Linux IA (64-bit) Little
通過上面的查詢我們瞭解到,目標資料庫除了WIN 32平臺和LINUX 32平臺不支援以外,其它的平臺基本都支援。
在本實驗中我們就以從WIN 32位系統中的資料庫遷移到LINUX 64位系統資料庫為例。
3:將源資料庫置於READ ONLY模式:
SQL> shutdown immediate
SQL> startup mount
SQL> alter database open read only;
4:轉換前的檢驗
利用dbms_tdb包檢查資料庫能否被傳輸以及列出外部表和DIRECTORY等無法傳輸的物件資訊(測試案例採用Windows遷移至LINUX 64BIT平臺):
SQL> set serveroutput on
SQL> declare
db_ready boolean;
begin
db_ready := dbms_tdb.check_db('Linux 64-bit for AMD',
dbms_tdb.skip_none);
end;
/
PS:如果沒有輸出表示正常
SQL> declare
external boolean;
begin
external := dbms_tdb.check_external;
end;
/
PS:如果沒有輸出表示正常
5:利用RMAN把資料庫轉換成64位LINUX格式
環境檢查完畢後就可以利用RMAN的convert database命令在源資料庫進行轉換(convert database也可以在目標資料庫進行,具體可以參考文件):
RMAN> CONVERT DATABASE NEW DATABASE 'testdb'
transport script. 'd:\bak\transportdb.sql'
to platform. 'Linux 64-bit for AMD'
db_file_name_convert 'd:\oracle\oradata\ufida' 'd:\oracle\oradata\testdb';
PS:1)、new database表示目標資料庫的名字,
2)、transport script指定生成建庫指令碼的位置,
3)、to platform表示目標資料庫的平臺,
4)、db_file_name_convert中
指定源資料庫資料檔案所在的位置為:'d:\oracle\oradata\ufida'
轉換後資料檔案存放的目錄為:'d:\oracle\oradata\testdb'
6:修改生成的引數檔案
通過檢視RMAN轉換時生成的指令碼d:\bak\transportdb.sql,可以找到生的的引數檔案是:D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00LUACFK_1_0.ORA
由於WIN和LINUX的目錄結構區別太大,我們需要修改這個指令碼以適應LINUX系統。特別要注意大小寫。修改完成之後我們把它複製到目標資料庫的相關位置。
最終的引數檔案如下
cat /u01/oracle/product/10.2.0/db_1/dbs/inittestdb.ora
# Please change the values of the following parameters:
control_files = "/u01/oradata/testdb/testdb.ctl"
audit_file_dest = "/u01/oracle/admin/testdb/adump"
background_dump_dest = "/u01/oracle/admin/testdb/bdump"
user_dump_dest = "/u01/oracle/admin/testdb/udump"
core_dump_dest = "/u01/oracle/admin/testdb/cdump"
db_name = "testdb"
# Please review the values of the following parameters:
__shared_pool_size = 282274688
__large_pool_size = 12194304
__java_pool_size = 12194304
__streams_pool_size = 0
__db_cache_size = 518743680
remote_login_passwordfile= "EXCLUSIVE"
db_domain = ""
dispatchers = "(PROTOCOL=TCP) (SERVICE=ufidaXDB)"
# The values of the following parameters are from source database:
processes = 150
nls_language = "SIMPLIFIED CHINESE"
nls_territory = "CHINA"
sga_target = 293601280
db_block_size = 8192
compatible = "10.2.0.1.0"
# log_archive_dest_1 = "location=/oracle/oradata/testdb/archive"
db_file_multiblock_read_count= 16
undo_management = "AUTO"
undo_tablespace = "UNDOTBS1"
job_queue_processes = 10
open_cursors = 300
pga_aggregate_target = 286468992
7:修改生成的SQL指令碼
同樣由於WIN和LINUX的目錄結構區別太大,我們需要修改這個指令碼以適應LINUX系統。特別要注意大小寫。
最終的SQL指令碼如下
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.
-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
STARTUP NOMOUNT PFILE='/u01/oracle/product/10.2.0/db_1/dbs/inittestdb.ora'
CREATE CONTROLFILE REUSE SET DATABASE "TESTDB" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/oradata/testdb/logfile01.log' SIZE 50M,
GROUP 2 '/u01/oradata/testdb/logfile02.log' SIZE 50M,
GROUP 3 '/u01/oradata/testdb/logfile03.log' SIZE 50M
DATAFILE
'/u01/oradata/testdb/SYSTEM01.DBF',
'/u01/oradata/testdb/UNDOTBS01.DBF',
'/u01/oradata/testdb/SYSAUX01.DBF',
'/u01/oradata/testdb/USERS01.DBF',
'/u01/oradata/testdb/NHCZCW01.DBF'
CHARACTER SET ZHS16GBK
;
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/testdb/temp01.dbf'
SIZE 239075328 AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
--
set echo off
prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prompt * Your database has been created successfully!
prompt * There are many things to think about for the new database. Here
prompt * is a checklist to help you stay on track:
prompt * 1. You may want to redefine the location of the directory objects.
prompt * 2. You may want to change the internal database identifier (DBID)
prompt * or the global database name for this database. Use the
prompt * NEWDBID Utility (nid).
prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SHUTDOWN IMMEDIATE
STARTUP UPGRADE PFILE='/u01/oracle/product/10.2.0/db_1/dbs/inittestdb.ora'
@@ ?/rdbms/admin/utlirp.sql
SHUTDOWN IMMEDIATE
STARTUP PFILE='/u01/oracle/product/10.2.0/db_1/dbs/inittestdb.ora'
-- The following step will recompile all PL/SQL modules.
-- It may take serveral hours to complete.
@@ ?/rdbms/admin/utlrp.sql
set feedback 6;
8:在目標資料庫上還原資料庫
1):在目標資料庫上僅安裝資料庫軟體,不建庫
2):在目標資料庫上建立如下目錄
/u01/oracle/admin/testdb/adump
/u01/oracle/admin/testdb/bdump
/u01/oracle/admin/testdb/cdump
/u01/oracle/admin/testdb/ddump
/u01/oracle/admin/testdb/udump
/u01/oradata/testdb/archive
3) :拷貝相關的檔案到目標資料庫
把RMAN轉換時生成資料檔案、生成並修改過的SQL指令碼和引數檔案拷貝到如下位置
/u01/oradata/testdb/SYSTEM01.DBF
/u01/oradata/testdb/UNDOTBS01.DBF
/u01/oradata/testdb/SYSAUX01.DBF
/u01/oradata/testdb/USERS01.DBF
/u01/oradata/testdb/NHCZCW01.DBF
/u01/oracle/product/10.2.0/db_1/dbs/inittestdb.ora
/u01/oracle/transportdb.sql
4) :拷貝控制檔案到目標資料庫
由於控制檔案不存在跨平臺的差異,我們只需把源資料庫的控制檔案複製到目標資料庫中即可,注意控制檔名字和路徑要與引數檔案中定義的致
/u01/oradata/testdb/testdb.ctl
5) :執行指令碼,還原資料庫
export oracle_sid=testdb
sqlplus / as sysdba
@/u01/oracle/transportdb.sql
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/235507/viewspace-1129121/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle使用RMAN從Windows遷移資料到LinuxOracleWindowsLinux
- 利用 Kylix3 從 Windows 遷移到 Linux(轉)WindowsLinux
- 從Windows到LinuxWindowsLinux
- 將檔案從Linux傳輸到Windows(後期利用)LinuxWindows
- Windows oracle 11g rman備份恢復到linux系統WindowsOracleLinux
- 利用RMAN把ORACLE 10G 64位降級為32位Oracle 10g
- windows下把資料從oracle匯入hbaseWindowsOracle
- [轉]Linux、windows下回車換行格式轉換LinuxWindows
- Windows轉到linux中,檔案亂碼,檔案編碼轉換WindowsLinux
- 利用RMAN 建立 oracle dataguardOracle
- 利用rman來實現linux平臺資料庫複製到windows平臺資料庫Linux資料庫Windows
- windows下利用ffmpeg進行視訊格式轉換Windows
- 從linux接入到windows遠端桌面LinuxWindows
- 怎樣把Oracle查詢轉換為SQL ServerOracleSQLServer
- 從 pthread 轉換到 std::threadthread
- Converting Oracle Database from Linux to Windows using RMANOracleDatabaseLinuxWindows
- Converting Oracle Database from Windows to Linux using RMANOracleDatabaseWindowsLinux
- 利用ORACLE DBMS_REDEFINITION包進行普通表到分割槽表的線上轉換Oracle
- 傳輸表空間(從Linux到Windows)LinuxWindows
- Socket相關程式:從Windows移植到LinuxWindowsLinux
- RMAN異機恢復異作業系統(Linux到Windows)作業系統LinuxWindows
- Rman 單例項filesystem(Windows)恢復到ASM環境(Linux)單例WindowsASMLinux
- 初識Linux滲透:從列舉到核心利用Linux
- 把Iptables移植到嵌入式Linux系統(轉)Linux
- ORACLE11G從WINDOWS到LINUX跨平臺遷移並升級OracleWindowsLinux
- 利用securt crt下載linux或者unix檔案到windowsLinuxWindows
- Oracle 利用RMAN 完成資料遷移Oracle
- 如何從 Windows 上用 SSH 連線到 LinuxWindowsLinux
- Windows 到 Linux 之旅:第 1 部分. Linux 思想(轉)WindowsLinux
- 把資料從MySQL遷到Oracle的幾點注意事項MySqlOracle
- WIX是如何從CRUD轉換到Event Sourcing?
- 從‘void*’到‘int’的轉換損失精度
- windows 下oracle從10.2.0.1升級到10.2.0.4WindowsOracle
- 如何把PDF轉換成EXCELExcel
- Windows 到 Linux 之旅:系列文章概述(轉)WindowsLinux
- RMAN跨版本恢復--從Oracle10.2.0.5恢復到Oracle11.2.0.4Oracle
- 利用RMAN搭建DATAGARD進行主備切換
- 【轉】Oracle rman備份Oracle