利用RMAN把ORACLE從WINDOWS轉換到LINUX

zhengbao_jun發表於2014-03-25

注:本文件是本人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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章