熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle10g同字節序跨平台遷移

2013-11-13 15:50:26  來源: Oracle 

  在Oracleg中同字節序跨平台的文件頭信息Oracle會自動改寫不再需要轉換

  我們看以下測試

  [oracle@danaly oradata]$ sqlplus / as sysdba

  SQL*Plus: Release Production on Thu Jul ::

  Copyright (c) Oracle All rights reserved

  Connected to:

  Oracle Database g Enterprise Edition Release Production

  With the Partitioning Oracle Label Security OLAP and Data Mining Scoring Engine options

  SQL> alter database mount;

  Database altered

  SQL> alter database open;

  Database altered

  SQL> select name from v$datafile;

  NAME

  

  /opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_system_tcxns_dbf

  /opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_undotbs_tcmb_dbf

  /opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_sysaux_tcgqc_dbf

  /opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_users_tctth_dbf

  SQL> show parameter comp

  NAME TYPE VALUE

  

  compatible string

  nls_comp string

  plsql_compiler_flags string INTERPRETED NON_DEBUG

  plsql_v_compatibility boolean FALSE

  SQL> create tablespace trans

   datafile /opt/oracle/oradata/eygle/EYGLE/datafile/transdbf size M;

  Tablespace created

  SQL> create user trans identified by trans default tablespace trans;

  User created

  SQL> grant connectresource to trans;

  Grant succeeded

  SQL> connect trans/trans

  create table test as select * from dict;

  Connected

  SQL>

  Table created

  SQL> select count(*) from test;

  COUNT(*)

  

  

  SQL> connect / as sysdba

  Connected

  SQL> alter tablespace trans read only;

  Tablespace altered

  SQL> exit

  Disconnected from Oracle Database g Enterprise Edition Release Production

  With the Partitioning Oracle Label Security OLAP and Data Mining Scoring Engine options

  [oracle@danaly oradata]$ exp \/ as sysdba\ tablespaces=trans transport_tablespace=y file=exp_transdmp

  Export: Release Production on Thu Jul ::

  Copyright (c) Oracle All rights reserved

  Connected to: Oracle Database g Enterprise Edition Release Production

  With the Partitioning Oracle Label Security OLAP and Data Mining Scoring Engine options

  Export done in ZHSGBK character set and ALUTF NCHAR character set

  Note: table data (rows) will not be exported

  About to export transportable tablespace metadata

  For tablespace TRANS

   exporting cluster definitions

   exporting table definitions

   exporting table TEST

   exporting referential integrity constraints

   exporting triggers

   end transportable tablespace metadata export

  Export terminated successfully without warnings

  [oracle@danaly oradata]$ ls l exp_transdmp

  rwrr oracle dba Jul : exp_transdmp

  [oracle@danaly oradata]$ pwd

  /opt/oracle/oradata

  然後我們可以直接將這兩個文件傳輸到Windows平台上

  C:\oracle\oradata\EYGLE\DATAFILE>ftp

  Connected to

   (vsFTPd )

  User (:(none)): oracle

   Please specify the password

  Password:

   Login successful

  ftp> bin

   Switching to Binary mode

  ftp> mget oradata/eygle/EYGLE/datafile/transdbf

   Switching to Binary mode

  mget oradata/eygle/EYGLE/datafile/transdbf? y

   PORT command successful Consider using PASV

   Opening BINARY mode data connection for oradata/eygle/EYGLE/datafile/transdbf ( bytes)

   File send OK

  ftp: 收到 字節用時 Seconds Kbytes/sec

  ftp> mget oradata/exp_transdmp

   Switching to Binary mode

  mget oradata/exp_transdmp? y

   PORT command successful Consider using PASV

   Opening BINARY mode data connection for oradata/exp_transdmp ( bytes)

   File send OK

  ftp: 收到 字節用時 Seconds Kbytes/sec

  ftp> quit

   Goodbye

  SQL> create user trans identified by trans;

  用戶已創建

  SQL> grant connectresource to trans;

  授權成功

  接下來執行導入

  C:\oracle\oradata\EYGLE\DATAFILE>imp / as sysdba tablespaces=trans transport_tablespace=y file=exp_transdmp datafiles=C:\oracle\oradata\EYGLE\DATAFILE\transdbf

  Import: Release Production on 星期四 ::

  Copyright (c) Oracle All rights reserved

  連接到: Oracle Database g Enterprise Edition Release Production

  With the Partitioning OLAP and Data Mining options

  經由常規路徑由 EXPORT:V 創建的導出文件

  即將導入可傳輸的表空間元數據

  已經完成 ZHSGBK 字符集和 ALUTF NCHAR 字符集中的導入

   正在將 SYS 的對象導入到 SYS

   正在將 SYS 的對象導入到 SYS

   正在將 TRANS 的對象導入到 TRANS

   正在導入表 TEST

   正在將 SYS 的對象導入到 SYS

  成功終止導入 沒有出現警告

  我們看到這個文件可以直接被Windows上的系統識別

  SQL> select count(*) from transtest;

  COUNT(*)

  

  

  SQL> select tablespace_namestatus from dba_tablespaces;

  TABLESPACE_NAME STATUS

  

  SYSTEM ONLINE

  UNDOTBS ONLINE

  SYSAUX ONLINE

  TEMP ONLINE

  USERS ONLINE

  TRANS READ ONLY

  已選擇

   Oracleg同字節序跨平台遷移的增強

  上一節介紹的方法不免過於復雜也許很多朋友會發出這樣的疑問既然同字節序數據文件跨平台的差異如此之小為什麼Oracle不直接實現這一技術呢?

  也許是這一遷移的技術優先級較低在OraclegROracle開始支持同字節序數據庫的跨平台遷移

  這一技術實現有以下幾點注意事項

  . 源平台和目的平台需要具有相同的字節序

  . 重做日志文件和控制文件不會傳輸遷移之後需要重建控制文件使用RESETLOGS方式打開數據庫臨時文件不會被傳輸

  . BFILES外部表和Directories口令文件等不會被傳輸

  我們通過Linux平台到Windows平台的遷移來看一下這一技術的實現

  . 確認平台及版本

  首先要確定源平台和目標平台具有相同的字節序

  SQL> select PLATFORM_NAME ENDIAN_FORMAT from V$TRANSPORTABLE_PLATFORM

   where platform_name in (Linux IA (bit)Microsoft Windows IA (bit));

  PLATFORM_NAME ENDIAN_FORMAT

  

  Microsoft Windows IA (bit) Little

  Linux IA (bit) Little

  然後需要確定源平台及目標平台的數據庫版本通常需要這兩者具有相同的數據庫版本本例的情況有所不同Linux平台的數據庫版本為Windows平台的數據庫版本為數據庫版本不同將使情況稍微復雜一點而且需要注意的是通常高版本的數據庫不能向低版本遷移

  . 確認遷移是否支持

  跨平台遷移需要數據庫處於READ ONLY模式打開使用DBMS_TDBCHECK_DB進行檢查

  SQL> set serveroutput on

  SQL> declare

   db_ready boolean;

   begin

   db_ready := dbms_tdbcheck_db(Microsoft Windows IA (bit));

   end;

   /

  PL/SQL procedure successfully completed

  如果以上過程成功執行並沒有其他相關警告輸出則說明數據庫可以支持跨平台轉移

  . 檢查外部對象

  使用DBMS_TDBCHECK_EXTERNAL來識別外部表Directories或BFILES等這些對象所指向的外部數據不能被RMAN自動轉移

  SQL> set serveroutput on

  SQL> declare

   external boolean;

   begin

   external := dbms_tdbcheck_external;

   end;

   /

  The following directories exist in the database:

  SYSDATA_PUMP_DIR

  PL/SQL procedure successfully completed

  如果數據庫中存在外部表DIRECTORIES等則以上過程執行後的輸出與以上類似

  . 使用RMAN進行跨平台文件遷移

  執行跨平台遷移首先要通過RMAN對數據文件進行轉換RMAN執行過程如下

  [oracle@danaly eygle]$ rman target /

  Recovery Manager: Release Production on Sat Jun ::

  Copyright (c) Oracle All rights reserved

  connected to target database: EYGLE (DBID=)

  RMAN> CONVERT DATABASE NEW DATABASE JULIA

  > TRANSPORT SCRIPT /opt/oracle/oradata/transport/transportsql

  > TO PLATFORM Microsoft Windows IA (bit)

  > DB_FILE_NAME_CONVERT /opt/oracle/oradata/eygle/EYGLE/datafile /opt/oracle/oradata/transport;

  Starting convert at JUN

  using target database control file instead of recovery catalog

  allocated channel: ORA_DISK_

  channel ORA_DISK_: sid= devtype=DISK

  Directory SYSDATA_PUMP_DIR found in the database

  User SYS with SYSDBA and SYSOPER privilege found in password file

  channel ORA_DISK_: starting datafile conversion

  input datafile

  fno= name=/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_system_tcxns_dbf

  converted datafile=/opt/oracle/oradata/transport/o_mf_system_tcxns_dbf

  channel ORA_DISK_: datafile conversion complete elapsed time: ::

  channel ORA_DISK_: starting datafile conversion

  input datafile

  fno= name=/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_undotbs_tcmb_dbf

  converted datafile=/opt/oracle/oradata/transport/o_mf_undotbs_tcmb_dbf

  channel ORA_DISK_: datafile conversion complete elapsed time: ::

  channel ORA_DISK_: starting datafile conversion

  input datafile

  fno= name=/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_sysaux_tcgqc_dbf

  converted datafile=/opt/oracle/oradata/transport/o_mf_sysaux_tcgqc_dbf

  channel ORA_DISK_: datafile conversion complete elapsed time: ::

  channel ORA_DISK_: starting datafile conversion

  input datafile

  fno= name=/opt/oracle/oradata/eygle/EYGLE/datafile/o_mf_users_tctth_dbf

  converted datafile=/opt/oracle/oradata/transport/o_mf_users_tctth_dbf

  channel ORA_DISK_: datafile conversion complete elapsed time: ::

  Run SQL script /opt/oracle/oradata/transport/transportsql on the target platform to create database

  Edit initora file /opt/oracle/product//dbs/init_ilir__ora This PFILE will be used to create the database on the target platform

  To recompile all PL/SQL modules run utlirpsql and utlrpsql on the target platform

  To change the internal database identifier use DBNEWID Utility

  Finished backup at JUN

  RMAN的轉換語句中指定生成一個轉換腳本transportsql用於參考轉換的目標平台是Microsoft Windows IA (bit)所有的數據文件轉換後存放在一個新的目錄下

  最後RMAN還自動生成一個參數文件這個文件是init_ilir__ora這個參數文件裡包含了一些重要的初始化參數可以根據需要進行相應的更改由於平台以及路徑的不同很多涉及路徑的參數都需要進行變更這個參數文件的內容大致分為三個部分

  第一部分列出需要修改的參數

  # Please change the values of the following parameters:

  control_files = /opt/oracle/product//dbs/cf_DJULIA_id_ilir

  db_create_file_dest = /opt/oracle/product//dbs/eygle

  db_recovery_file_dest = /opt/oracle/product//dbs/flash_recovery_area

  db_recovery_file_dest_size=

  background_dump_dest = /opt/oracle/product//dbs/bdump

  user_dump_dest = /opt/oracle/product//dbs/udump

  core_dump_dest = /opt/oracle/product//dbs/cdump

  audit_file_dest = /opt/oracle/product//dbs/adump

  db_name = JULIA

  第二部分列出了建議Review的參數

  # Please review the values of the following parameters:

  remote_login_passwordfile= EXCLUSIVE

  db_domain =

  dispatchers = (PROTOCOL=TCP) (SERVICE=eygleXDB)

  第三部分列出了來自於源數據庫的一些特殊設置這些參數可以酌情修改

  # The values of the following parameters are from source database:

  processes =

  sga_target =

  db_block_size =

  compatible =

  db_file_multiblock_read_count=

  undo_management = AUTO

  undo_tablespace = UNDOTBS

  job_queue_processes =

  open_cursors =

  pga_aggregate_target =

  參數文件的內容我們可以在新的平台上重新創建這個參數文件可以作為參考

  . 轉移文件到目標平台

  源平台的工作完成之後數據文件可以通過ftp等方式轉移到目標平台部署到相應目錄我的操作步驟如下

  C:\oracle\oradata>gzip d transtargz

  C:\oracle\oradata>tar xvf transtar

  tar: blocksize =

  x transport/transportsql bytes tape blocks

  x transport/o_mf_sysaux_tcgqc_dbf bytes tape blocks

  x transport/o_mf_undotbs_tcmb_dbf bytes tape blocks

  x transport/o_mf_system_tcxns_dbf bytes tape blocks

  x transport/o_mf_users_tctth_dbf bytes tape blocks

  C:\oracle\oradata>mkdir p JULIA\DATAFILE

  C:\oracle\oradata>mkdir JULIA\CONTROLFILE

  C:\oracle\oradata>mkdir JULIA\ONLINELOG

  C:\oracle\oradata>mv transport\* JULIA\DATAFILE

  . 創建基礎環境

  首先創建相關目錄

  C:\oracle\oradata>mkdir C:\oracle\admin\julia\adump

  C:\oracle\oradata>mkdir C:\oracle\admin\julia\bdump

  C:\oracle\oradata>mkdir C:\oracle\admin\julia\cdump

  C:\oracle\oradata>mkdir C:\oracle\admin\julia\dpdump

  C:\oracle\oradata>mkdir C:\oracle\admin\julia\pfile

  C:\oracle\oradata>mkdir C:\oracle\admin\julia\udump

  創建Windows數據庫服務

  C:\oracle\oradata>oradim new sid julia

  實例已創建

  修改參數文件參數文件可以從前面自動生成的參數文件進行修改得到其中目錄結構需要依據新平台的具體設置進行修改和存儲主要相關的兩個參數修改如下

  db_create_file_dest = C:\oracle\oradata

  db_recovery_file_dest = C:\oracle\flash_recovery_area

  修改後的參數文件在Windows上應該位於$ORACLE_HOME/database下參數文件中的另外一個重要參數是控制文件路徑

  control_files = /opt/oracle/product//dbs/cf_DJULIA_id_ilir

  如果我們計劃使用OMF管理可以暫時注釋這一參數在創建控制文件後再將控制文件的名稱路徑追加到參數文件中

  . 遷移步驟

  准備工作完成之後我們可以進行新平台的數據庫加載等工作這些工作還可以參考在源平台生成的transportsql腳本

  這個腳本的第一部分給出了使用參數文件啟動實例及重新創建控制文件的語法參考當然我們還需要修改才能使用這段腳本

  STARTUP NOMOUNT PFILE=/opt/oracle/product//dbs/init_ilir__ora

  CREATE CONTROLFILE REUSE SET DATABASE LINDBG RESETLOGS NOARCHIVELOG

  MAXLOGFILES

  MAXLOGMEMBERS

  MAXDATAFILES

  MAXINSTANCES

  MAXLOGHISTORY

  LOGFILE

  GROUP SIZE M

  GROUP SIZE M

  GROUP SIZE M

  DATAFILE

  /opt/oracle/oradata/transport/o_mf_system_tcxns_dbf

  /opt/oracle/oradata/transport/o_mf_undotbs_tcmb_dbf

  /opt/oracle/oradata/transport/o_mf_sysaux_tcgqc_dbf

  /opt/oracle/oradata/transport/o_mf_users_tctth_dbf

  CHARACTER SET ZHSGBK

  ;

  由於我們已經編輯好了新的參數文件可以使用這個參數文件啟動實例

  C:\oracle\oradata>set ORACLE_SID=julia

  C:\oracle\oradata>sqlplus / as sysdba

  SQL*Plus: Release Production on 星期一 ::

  Copyright (c) Oracle All Rights Reserved

  已連接到空閒例程

  SQL> startup nomount pfile=?\database\initjuliaora

  ORACLE 例程已經啟動

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  接下來創建控制文件

  SQL> CREATE CONTROLFILE REUSE SET DATABASE JULIA RESETLOGS NOARCHIVELOG

   MAXLOGFILES

   MAXLOGMEMBERS

   MAXDATAFILES

   MAXINSTANCES

   MAXLOGHISTORY

   LOGFILE

   GROUP SIZE M

   GROUP SIZE M

   GROUP SIZE M

   DATAFILE

   C:\oracle\oradata\JULIA\DATAFILE\o_mf_system_tcxns_dbf

   C:\oracle\oradata\JULIA\DATAFILE\o_mf_undotbs_tcmb_dbf

   C:\oracle\oradata\JULIA\DATAFILE\o_mf_sysaux_tcgqc_dbf

   C:\oracle\oradata\JULIA\DATAFILE\o_mf_users_tctth_dbf

   CHARACTER SET ZHSGBK

   ;

  控制文件已創建

  然後將控制文件的名稱等信息追加到參數文件中

  SQL> column ctl_files NEW_VALUE ctl_files;

  SQL> SELECT CONCAT (control_files=

   CONCAT (REPLACE (VALUE ) )

   ) ctl_files

   FROM v$parameter WHERE NAME = control_files;

  CTL_FILES

  

  control_files=C:\ORACLE\ORADATA\JULIA\CONTROLFILE\O_MF_YSZR_CTLC:\ORAC

  LE\FLASH_RECOVERY_AREA\JULIA\CONTROLFILE\O_MF_YSZMK_CTL

  SQL> host echo &ctl_files >>C:\oracle\\database\initjuliaora;

  注意執行完以上命令後需要檢查參數文件的格式如果控制文件名稱未正確添加可以手工調整一下

  完成了以上工作後可以關閉數據庫再次啟動數據庫到Mount狀態這時候新的控制文件已經發揮作用

  SQL> shutdown immediate;

  ORA: ??????

  已經卸載數據庫

  ORACLE 例程已經關閉

  SQL> startup mount;

  ORACLE 例程已經啟動

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  數據庫裝載完畢

  . 完成數據庫恢復

  接下來再參考一下transportsql中的推薦步驟

  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

  SIZE AUTOEXTEND ON NEXT MAXSIZE M;

   End of tempfile additions

  現在我們需要通過RESETLOGS方式來重新生成日志文件然後手工添加臨時文件

  注意在遷移過程中如果兩個平台的數據庫版本完全一致則以上步驟可以順利執行參考transportsql可以順利完成遷移而本例的測試平台由於Linux平台的數據庫版本為Windows平台版本為所以實際操作中還會有所不同在執行RESETLOGS過程中數據庫會發生中斷

  SQL> alter database open resetlogs;

  alter database open resetlogs

  *

  第 行出現錯誤:

  ORA: ORACLE 實例終止強制斷開連接

  檢查日志我們發現以下提示

  Mon Jun ::

  Errors in file c:\oracle\admin\julia\udump\julia_ora_trc:

  ORA: 引導程序進程失敗

  ORA: 必須用 UPGRADE 選項打開數據庫

  Oracle要求以UPGRADE選項打開數據庫對數據庫執行跨版本遷移

  我們繼續參考transportsql的最後部分

  SHUTDOWN IMMEDIATE

  STARTUP UPGRADE PFILE=/opt/oracle/product//dbs/init_ilir__ora

  @@ ?/rdbms/admin/utlirpsql

  SHUTDOWN IMMEDIATE

  STARTUP PFILE=/opt/oracle/product//dbs/init_ilir__ora

   The following step will recompile all PL/SQL modules

   It may take serveral hours to complete

  @@ ?/rdbms/admin/utlrpsql

  set feedback ;

  再次啟動數據庫到UPGRADE模式由於之前的數據庫中斷現在這些需要進行一點恢復工作

  SQL> startup upgrade;

  ORACLE 例程已經啟動

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  數據庫裝載完畢

  ORA: 文件 需要介質恢復

  ORA: 數據文件 :C:\ORACLE\ORADATA\JULIA\DATAFILE\O_MF_SYSTEM_TCXNS_DBF

  SQL> recover database;

  完成介質恢復

  恢復完成之後啟動數據庫到UPGRADE模式

  SQL> shutdown immediate;

  ORA: 數據庫未打開

  已經卸載數據庫

  ORACLE 例程已經關閉

  SQL> startup upgrade;

  ORACLE 例程已經啟動

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  數據庫裝載完畢

  數據庫已經打開

  執行腳本?/rdbms/admin/utlirpsql這個腳本執行完成之後會有如下提示

  DOC>#######################################################################

  DOC> utlirpsql completed successfully All PL/SQL objects in the

  DOC> database have been invalidated

  DOC>

  DOC> Shut down and restart the database in normal mode and run utlrpsql to

  DOC> recompile invalid objects

  DOC>#######################################################################

  也就是說這個腳本的作用是使數據庫中的PL/SQL對象INVALID然後通過utlrpsql的重新編譯消除跨平台的兼容性影響

  按照transportsql腳本提示的步驟我們可以重新啟動數據庫來執行utlrpsql腳本(由於本例涉及到版本遷移需要再次啟動數據庫到upgrade模式如果數據庫版本相同則可以直接啟動數據庫執行utlrpsql腳本完成最後的編譯工作)

  SQL> @@ ?/rdbms/admin/utlrpsql

  TIMESTAMP

  

  COMP_TIMESTAMP UTLRP_BGN ::

  

  PL/SQL 過程已成功完成

  TIMESTAMP

  

  COMP_TIMESTAMP UTLRP_END ::

  PL/SQL 過程已成功完成

  utlrpsql執行完成之後我們需要再執行和數據庫升級相關的腳本這個腳本是catupgrdsql

  SQL> @?/rdbms/admin/catupgrdsql

  這個腳本調用catlogsql和 catprocsql來重建字典對象等在執行完這個腳本之後我們可以關閉數據庫後正常打開數據庫

  SQL> startup

  ORACLE 例程已經啟動

  Total System Global Area bytes

  Fixed Size bytes

  Variable Size bytes

  Database Buffers bytes

  Redo Buffers bytes

  數據庫裝載完畢

  數據庫已經打開

  SQL> select count(*) from dba_objects where status=INVALID;

  COUNT(*)

  

  

  已選擇

  SQL> @?\rdbms\admin\utlrpsql

  catupgrdsql腳本可能會使部分字典對象失效我們可以再次運行utlrpsql腳本來進行編譯編譯完成後不要忘記為數據庫添加臨時文件

  SQL> ALTER TABLESPACE TEMP ADD TEMPFILE

   SIZE AUTOEXTEND ON NEXT MAXSIZE M;

  表空間已更改

  至此同字節序的跨平台遷移全部完成當然由於版本的不同整個過程稍微復雜了一些不過這個過程對於跨平台的遷移及版本升級是一個很好的參考

   實現數據遷移的高可用性

  通過以上測試實際上可以確認對於可傳輸表空間可以很容易從Oracle i向Oracle g遷移那麼這種方法對於可用性要求極高的環境進行數據遷移或數據庫遷移具有極大的便利

  如果進行數據庫升級通常的方法是通過DBUA(Database Upgrade AssistantOracle g引入的新工具)進行但是DBUA存在的問題在於操作過程過長而且如果升級過程中出現問題數據文件可能不能重新被使用這就需要從備份中進行恢復這使得業務連續性要求高的企業很難采用這種方法進行升級

  另外一種常見的遷移的方法是通過邏輯導出導入(EXP/IMP)但是這種方法對於不斷變化的數據無能為力所以通常也不可行

  那麼現在可傳輸表空間就成了一個可以考慮的快速遷移或升級方法

  Oracle有一個小組專注於設計高可用性架構的實現以幫助用戶最大限度的提高系統可用性Oracle有一個專有名詞用來命名這類技術MAA(Maximum Availability Architecture MAA)OTN上MAA部分有一個Amadeus公司的實踐案例通過可傳輸表空間從Oracle i向Oracle g實現快速數據遷移

  當然這種方法的使用要考慮的還有很多通過各種技術和方法的結合使用才能最終的達到快速遷移的目標

  Amadeus公司的遷移是在同類型平台不同主機之間進行的其實現步驟大致如下

  () 在升級主機安裝Oracle i版本並創建生產庫的DataGuard數據庫這個工作可以在線進行不影響主節點的工作

  () 在升級主機安裝Oracle gR數據庫軟件創建數據庫此時升級主機上存在了個數據庫

  () 整理不能通過transport tablespace處理的內容如sequencesynonymsgrants等

  () 在升級割接時間將主庫置為只讀將日志全部應用到備機業務影響從此時開始

  () 將備機的數據文件通過可傳輸表空間遷移至Oracle gR數據庫並創建sequenceesynonymsgrants等對象檢查驗證

  () 如果沒有問題則即可將業務切換至新的Oracle gR數據庫運行業務恢復正常運行

  在這個遷移過程中如果遷移失敗那麼直接讀寫打開主庫即可恢復業務的正常運行回退非常方便

  使用這種方法業務影響僅發生在以上()~()步在OTN的案例中Amadeus公司在實際操作中分鐘之內就將一個大型數據庫遷移到Oracle gR這種方式是一種非常有新意的創新性應用在熟悉了Oracle的各項技術之後通過不斷實踐和探索我們就能夠不斷發現充滿價值的Oracle應用

   最後的腳本

  以上腳本已經完成了主要的工作剩下的是一些最後的維護工作

  這裡還有兩個腳本需要執行首先執行的是postScriptssql腳本這個腳本主要對部分用戶及部分數據庫選件進行維護

  connect SYS/&&sysPassword as SYSDBA

  set echo on

  spool C:\oracle\admin\eygle\scripts\postScriptslog

  @C:\oracle\\rdbms\admin\dbmssmlsql;

  execute dbms_datapump_utlreplace_default_dir;

  commit;

  connect SYS/&&sysPassword as SYSDBA

  alter session set current_schema=ORDSYS;

  @C:\oracle\\ord\im\admin\ordlibsql;

  alter session set current_schema=SYS;

  connect SYS/&&sysPassword as SYSDBA

  connect SYS/&&sysPassword as SYSDBA

  alter user CTXSYS account unlock identified by change_on_install;

  connect CTXSYS/change_on_install

  @C:\oracle\\ctx\admin\defaults\drdefdpsql;

  @C:\oracle\\ctx\admin\defaults\drdefinsql SIMPLIFIED CHINESE;

  connect SYS/&&sysPassword as SYSDBA

  execute dbms_swrf_internalcleanup_database(cleanup_local => FALSE);

  commit;

  spool off

  最後執行的腳本是postDBCreationsql在這個腳本中將創建spfile解鎖SYSMANDBSNMP用戶編譯失效對象並配置DB Control

  connect SYS/&&sysPassword as SYSDBA

  set echo on

  spool C:\oracle\admin\eygle\scripts\postDBCreationlog

  connect SYS/&&sysPassword as SYSDBA

  set echo on

  create spfile=C:\oracle\/dbs/spfileeygleora

  FROM pfile=C:\oracle\admin\eygle\scripts\initora;

  shutdown immediate;

  connect SYS/&&sysPassword as SYSDBA

  startup ;

  alter user SYSMAN identified by &&sysmanPassword account unlock;

  alter user DBSNMP identified by &&dbsnmpPassword account unlock;

  select utl_recomp_begin: || to_char(sysdate HH:MI:SS) from dual;

  execute utl_recomprecomp_serial();

  select utl_recomp_end: || to_char(sysdate HH:MI:SS) from dual;

  host C:\oracle\\bin\emcabat config dbcontrol db silent DB_UNIQUE_NAME eygle PORT EM_HOME C:\oracle\ LISTENER LISTENER SERVICE_NAME eygle SYS_PWD &&sysPassword SID eygle ORACLE_HOME C:\oracle\ DBSNMP_PWD &&dbsnmpPassword HOST gqgai LISTENER_OH C:\oracle\ LOG_FILE C:\oracle\admin\eygle\scripts\emConfiglog SYSMAN_PWD &&sysmanPassword;

  spool C:\oracle\admin\eygle\scripts\postDBCreationlog

  exit;

  看到在最後部分通過emcabat批處理文件配置了DB Control這裡通過一條完整的命令快速地完成了DB Control的創建等工作也可以通過手工方式對DB Control進行維護關於這部分內容請參考章 從OEM到iSQL*Plus的內容

  此外需要注意的是以下幾句命令

  select utl_recomp_begin: || to_char(sysdate HH:MI:SS) from dual;

  execute utl_recomprecomp_serial();

  select utl_recomp_end: || to_char(sysdate HH:MI:SS) from dual;

  在Oracle i的postDBCreationsql的腳本中這部分的內容如下

  @/opt/oracle/product//rdbms/admin/utlrpsql;

  其實兩者是相同的utlrpsql中主體部分和Oracle g中是相同的

  @@utlrcmpsql

  execute utl_recomprecomp_serial();

  Rem =====================================================================

  Rem Run component validation procedure

  Rem =====================================================================

  EXECUTE dbms_registryvalidate_components;

  Oracle在utlrpsql腳本的注釋中說得很明確這是一個通用腳本可以在任意時候運行以重新編譯數據庫失效對象

  通常我們會在Oracle的升級指導中看到這個腳本Oracle強烈推薦在migration / upgrade / downgrade之後通過運行此腳本編譯失效對象但是注意此腳本需要用SQL*Plus以SYSDBA身份運行並且當時數據庫中最好不要有活動事物或DDL操作否則極容易導致死鎖的出現

  這樣使用模板創建數據庫就完成了


From:http://tw.wingwit.com/Article/program/Oracle/201311/17385.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.