使用Oracle可傳輸表空間的特性複製資料(5)實戰CONVERT

junsansi發表於2008-01-15

設定:

源資料庫:JSSWEB ,Oracle10.2.0.1 ,Windows 2003(32-bit)

目標資料庫:JSSCON  ,Oracle10.2.0.1 ,RHEL U2 (32-bit),已安裝好資料庫軟體。

注:我知道,我明白,我理解,位元組順序相同,按照前面說的應該不需要使用CONVERT轉換的嘛!沒錯你說的對,我們這是演示,你別當真,更別糊塗,相同位元組順序是不需要convert,但convert database例外的嘛。

一、啟動資料庫到read only狀態

首先連線到源資料庫。

E:\ORA10G>set oracle_sid=jssweb

E:\ORA10G>sqlplus "/ as sysdba"

啟動到read only狀態

SQL> startup mount

ORACLE 例程已經啟動。

Total System Global Area  113246208 bytes

Fixed Size                  1247564 bytes

Variable Size              92276404 bytes

Database Buffers           12582912 bytes

Redo Buffers                7139328 bytes

資料庫裝載完畢。

SQL> alter database open read only;

資料庫已更改。

二、檢查資料庫是否支援傳輸,主要檢查平臺

SQL> set serveroutput on

SQL> declare

  2    db_ready boolean;

  3  begin

  4    db_ready := dbms_tdb.check_db('Linux IA (32-bit)');

  5  end;

  6  /

PL/SQL 過程已成功完成。

無輸出,說明支援平臺間轉換,然後檢查是否存在外部物件。

SQL> declare

  2    external boolean;

  3  begin

  4    external := dbms_tdb.check_external;

  5  end;

  6  /

The following directories exist in the database:

SYS.DATA_PUMP_DIR

Sys使用者下有一個directory,記錄下來。

三、執行CONVERT命令,假設我們希望在源平臺執行轉換操作。

首先連線到RMAN管理器中。

E:\ora10g>rman target /

選擇在源平臺執行轉換操作(注意下列中的加粗部分)

RMAN> convert database new database 'jsscon'

2>  transport script 'e:\oratmp\script\ts.sql'

3>  to platform 'Linux IA (32-bit)'

4>  db_file_name_convert 'E:\ora10g\oradata\jssweb' 'e:\oratmp\oradata';

啟動 convert 於 16-11月-07

使用通道 ORA_DISK_1

在資料庫中找到目錄 SYS.DATA_PUMP_DIR

在口令檔案中找到使用者 SYS (具有 SYSDBA and SYSOPER 許可權)

通道 ORA_DISK_1: 啟動資料檔案轉換

輸入資料檔案 fno=00001 name=E:\ORA10G\ORADATA\JSSWEB\SYSTEM01.DBF

已轉換的資料檔案 = E:\ORATMP\ORADATA\SYSTEM01.DBF

通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:25

通道 ORA_DISK_1: 啟動資料檔案轉換

輸入資料檔案 fno=00002 name=E:\ORA10G\ORADATA\JSSWEB\UNDOTBS01.DBF

已轉換的資料檔案 = E:\ORATMP\ORADATA\UNDOTBS01.DBF

通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:16

通道 ORA_DISK_1: 啟動資料檔案轉換

輸入資料檔案 fno=00004 name=E:\ORA10G\ORADATA\JSSWEB\JSSWEB.DBF

已轉換的資料檔案 = E:\ORATMP\ORADATA\JSSWEB.DBF

通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:15

通道 ORA_DISK_1: 啟動資料檔案轉換

輸入資料檔案 fno=00003 name=E:\ORA10G\ORADATA\JSSWEB\SYSAUX01.DBF

已轉換的資料檔案 = E:\ORATMP\ORADATA\SYSAUX01.DBF

通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:15

通道 ORA_DISK_1: 啟動資料檔案轉換

輸入資料檔案 fno=00005 name=E:\ORA10G\ORADATA\JSSWEB\USERS01.DBF

已轉換的資料檔案 = E:\ORATMP\ORADATA\USERS01.DBF

通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:03

在目標平臺上執行 SQL 指令碼 E:\ORATMP\SCRIPT\TS.SQL 以建立資料庫

編輯 init.ora 檔案 E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA。此 PFILE 將用於在目標平臺上建立資料庫據

要重新編譯所有 PL/SQL 模組, 請在目標平臺上執行 utlirp.sql 和 utlrp.sql

要更改內部資料庫識別符號, 請使用 DBNEWID 實用程式

完成 backup 於 16-11月-07

遮蔽輸出中提供了二處指令碼所在路徑,記錄下來。

四、複製檔案到目標平臺

複製源庫中資料檔案到目標平臺,從上述遮蔽輸出中看到共涉及E:\ORATMP\ORADATA\目錄中5個資料檔案(臨時表空間資料檔案不需要轉換,可以目標資料庫重新建立),E:\ORATMP\SCRIPT目錄中的TS.SQL指令碼檔案,以及E:\ORA10G\PRODUCT\10.2.0\DB_1\DATABASE\INIT_00J16HQT_1_0.ORA客戶端初始化引數檔案,複製到目標平臺的適當位置,此處我們將複製到/opt/oratmp目錄中。

提示:資料檔案複製完成後即可以將源資料庫置為read-write狀態了。

建立相關目錄:

[oracle@jsslinux oradata]$ mkdir /opt/ora10g/oradata/jsscon -p

[oracle@jsslinux oradata]$ mkdir /opt/ora10g/admin/jsscon -p

[oracle@jsslinux oradata]$ cd /opt/ora10g/admin/jsscon

[oracle@jsslinux jsscon]$ mkdir adump bdump cdump dpdump pfile udump

五、修改指令碼檔案和初始化引數檔案

再次著重提示,oracle生成的指令碼檔案,僅供參考有些引數還需要你自己手工調整,特別是檔案複製到目標平臺後,如果路徑有變化,一定要記的修改指令碼檔案中對應的引數。

INIT_00J16HQT_1_0.ORA為客戶端初始化引數檔案,需要注意其中db_name, xxx_dest,control_files等引數,為便於輸入,複製到目標平臺時將其更新為inittmp.ora。

TS.SQL為建立控制檔案指令碼,需要注意各資料檔案路徑。

六、執行指令碼,建立資料庫。

你可以開啟指令碼檔案,按照語句手工一步步執行,也可以直接呼叫該指令碼檔案。此處我們是第一次執行,穩妥期間還是手工一步一步來吧:)))

首先指定SID(如果是windows系統,就不只是export這麼簡單了,還需要oradim重建一個service,前面的文章有中具體示例,這裡不詳述了):

[oracle@jsslinux jsscon]$ export ORACLE_SID=jsscon

[oracle@jsslinux jsscon]$ sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 11月 16 11:10:07 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

已連線到空閒例程。

從客戶端初始化引數檔案啟動到nomount模式

SQL> STARTUP NOMOUNT PFILE='/opt/oratmp/scripts/INIT_00J14FQ2_1_0.ORA'

ORACLE 例程已經啟動。

Total System Global Area  109051904 bytes

Fixed Size                  1217980 bytes

Variable Size              92277316 bytes

Database Buffers           12582912 bytes

Redo Buffers                2973696 bytes

建立控制檔案

SQL> CREATE CONTROLFILE REUSE SET DATABASE "JSSCON" RESETLOGS  NOARCHIVELOG

  2      MAXLOGFILES 16

  3      MAXLOGMEMBERS 3

  4      MAXDATAFILES 100

  5      MAXINSTANCES 8

  6      MAXLOGHISTORY 292

  7  LOGFILE

  8    GROUP 1 '/opt/ora10g/oradata/jsscon/redo01.log'  SIZE 20M,

  9    GROUP 2 '/opt/ora10g/oradata/jsscon/redo02.log'  SIZE 20M,

 10    GROUP 3 '/opt/ora10g/oradata/jsscon/redo03.log'  SIZE 20M

 11  DATAFILE

 12    '/opt/oratmp/oradata/SYSTEM01.DBF',

 13    '/opt/oratmp/oradata/UNDOTBS01.DBF',

 14    '/opt/oratmp/oradata/SYSAUX01.DBF',

 15    '/opt/oratmp/oradata/JSSWEB.DBF',

 16    '/opt/oratmp/oradata/USERS01.DBF'

 17  CHARACTER SET ZHS16GBK

 18  ;

控制檔案已建立。

以resetlogs模式開啟資料庫

SQL> ALTER DATABASE OPEN RESETLOGS;

資料庫已更改。

建立臨時表空間

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/opt/ora10g/oradata/jsscon/TEMP01.DBF'

  2       SIZE 200M;

表空間已更改。

注意:下面的操作就很關鍵了。

SQL> set echo off

SQL> SHUTDOWN IMMEDIATE

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE 例程已經關閉。

啟動到升級模式

SQL> STARTUP UPGRADE PFILE='/opt/oratmp/scripts/inittmp.ora'

ORACLE 例程已經啟動。

Total System Global Area  109051904 bytes

Fixed Size                  1217980 bytes

Variable Size              92277316 bytes

Database Buffers           12582912 bytes

Redo Buffers                2973696 bytes

資料庫裝載完畢。

資料庫已經開啟。

重新編譯資料庫物件。

SQL> @@ ?/rdbms/admin/utlirp.sql 

....

....

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

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

DOC>   utlirp.sql completed successfully. All PL/SQL objects in the

DOC>   database have been invalidated.

DOC>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-145401/,如需轉載,請註明出處,否則將追究法律責任。

相關文章