Oracle 單實例 遷移到 RAC 實例 -- 使用導出導入方法


Oracle 單實例遷移到 RAC 實例上有兩種方法:

1.      使用RMAN 複製

2.      使用邏輯導出導入(exp/imp) 或者 數據泵(expdp/impdp

 

這篇演示用數據泵(expdp/impdp)將單實例遷移到RAC 環境。 導出導入schema方式來進行。邏輯導出導入相對數據泵而言,更簡單一點。

 

 

這裏假設RAC 環境已經搭建好了。 如果沒有搭建好,可以參考我的Blog

       Redhat 5.4 + ASM + RAW+ Oracle 10g RAC 安裝文檔

http://blog.csdn.net/tianlesoftware/archive/2010/09/09/5872593.aspx

 

 

導出導入參考:

       Oracle 10g EXPDPIMPDP使用說明

http://blog.csdn.net/tianlesoftware/archive/2009/10/16/4674224.aspx

 

ORACLE 數據庫邏輯備份 簡單 EXP/IMP

http://blog.csdn.net/tianlesoftware/archive/2009/10/24/4718366.aspx

 

 

測試過程如下:

 

1.      現在本地庫上創建用戶Dave, 與值對應的表空間。

2.      Dave 登陸,創建相關的表。

3.      Dave用戶的表空間導出

4.      dump文件導入到RAC 實例

 

 

 

一.    在本地庫上創建表空間,用戶

 

SQL> select file_name from dba_data_files;

FILE_NAME

--------------------------------------------------------------------------------

D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF

D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF

D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF

D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF

D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF

D:/APP/ADMINISTRATOR/ORADATA/ORCL/DBA1.DBF

D:/APP/ADMINISTRATOR/ORADATA/ORCL/CATALOG1.DBF

D:/APP/ADMINISTRATOR/ORADATA/ORCL/CATALOG_TS1.DBF

已選擇8行。

 

SQL> create tablespace tianlesoftware datafile

'D:/APP/ADMINISTRATOR/ORADATA/ORCL/tianlesoftware.dbf' size 50m;

表空間已創建。

 

SQL> create user dave identified by dave default tablespace tianlesoftware temporary tablespace temp;

用戶已創建。

SQL> grant dba to dave;

授權成功。

 

SQL> grant connect to dave;

授權成功。

 

SQL> grant resource to dave;

授權成功。

SQL>

 

 

二. 用dave登陸,創建相關表

 

SQL> create table userinfo(name varchar2(10),hometown varchar2(20));

表已創建。

 

SQL> insert into userinfo values('dave','安徽省安慶市懷寧縣');

已創建 1 行。

 

SQL> commit;

提交完成。

 

SQL> insert into userinfo values('Tianle','安徽省安慶市懷寧縣');

已創建 1 行。

 

SQL> commit;

提交完成。

 

SQL> select * from userinfo;

NAME       HOMETOWN

---------- --------------------

dave       安徽省安慶市懷寧縣

Tianle     安徽省安慶市懷寧縣

 

SQL>

 

 

三. 用數據泵導出Dave 用戶的表空間

 

3.1 創建directory 並賦權

 

SQL> conn / as sysdba;

已連接。

 

SQL> create directory backup as 'e:/tmp';

目錄已創建。

 

SQL> grant read,write on directory backup to dave;

授權成功。

 

SQL> select * from dba_directories;

OWNER            DIRECTORY_NAME    DIRECTORY_PATH

------------------------------ ------------------------------ ------------------

SYS                  BACKUP            e:/tmp

 

 

3.2 導出Dave schema - - - SCHEMA 與用戶對應

 

[oracle@localhost ~]$ expdp dave/dave DIRECTORY=backup DUMPFILE=tianlesoftware.dmp SCHEMAS=Dave logfile=exp.log;

 

Export: Release 10.2.0.1.0 - Production on Tuesday, 28 September, 2010 15:12:36

 

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

 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

Starting "DAVE"."SYS_EXPORT_SCHEMA_01":  dave/******** DIRECTORY=backup DUMPFILE=tianlesoftware.dmp SCHEMAS=Dave logfile=exp.log

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 64 KB

Processing object type SCHEMA_EXPORT/USER

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TABLE/TABLE

Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type SCHEMA_EXPORT/TABLE/COMMENT

. . exported "DAVE"."USERINFO"                            5.25 KB       2 rows

Master table "DAVE"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded

******************************************************************************

Dump file set for DAVE.SYS_EXPORT_SCHEMA_01 is:

  /u01/tianlesoftware.dmp

Job "DAVE"."SYS_EXPORT_SCHEMA_01" successfully completed at 15:13:32

 

 

四. 將dump 文件導入RAC

 

RAC 狀態:

[oracle@rac2 bin]$ crs_stat -t

Name           Type           Target    State     Host

------------------------------------------------------------

ora.orcl.db    application    ONLINE    ONLINE    rac1

ora....oltp.cs application    ONLINE    ONLINE    rac2

ora....cl1.srv application    ONLINE    ONLINE    rac1

ora....cl2.srv application    ONLINE    ONLINE    rac2

ora....l1.inst application    ONLINE    ONLINE    rac1

ora....l2.inst application    ONLINE    ONLINE    rac2

ora....SM1.asm application    ONLINE    ONLINE    rac1

ora....C1.lsnr application    ONLINE    ONLINE    rac1

ora.rac1.gsd   application    ONLINE    ONLINE    rac1

ora.rac1.ons   application    ONLINE    ONLINE    rac1

ora.rac1.vip   application    ONLINE    ONLINE    rac1

ora....SM2.asm application    ONLINE    ONLINE    rac2

ora....C2.lsnr application    ONLINE    ONLINE    rac2

ora.rac2.gsd   application    ONLINE    ONLINE    rac2

ora.rac2.ons   application    ONLINE    ONLINE    rac2

ora.rac2.vip   application    ONLINE    ONLINE    rac2

 

 

4.1 創建相關用戶和表空間

 

SQL> select file_name from dba_data_files;

FILE_NAME

--------------------------------------------------------------------------------

+DATA/orcl/datafile/users.279.730181053

+DATA/orcl/datafile/sysaux.277.730181053

+DATA/orcl/datafile/undotbs1.278.730181053

+DATA/orcl/datafile/system.276.730181051

+DATA/orcl/datafile/undotbs2.284.730181347

+DATA/orcl/datafile/anhuianqing.dbf

 

6 rows selected.

 

SQL> create tablespace tianlesoftware datafile '+DATA/orcl/datafile/tianlesoftware.dbf' size 50m;

Tablespace created.

 

SQL> create user dave identified by dave default tablespace tianlesoftware temporary tablespace temp;

User created.

 

SQL> grant dba to dave;

Grant succeeded.

 

SQL> grant connect to dave;

Grant succeeded.

 

SQL> grant resource to dave;

Grant succeeded.

 

SQL>

 

 

4.2 創建導入directory

 

SQL> create directory backup as '/u01';

Directory created.

SQL> grant read,write on directory backup to dave;

Grant succeeded.

SQL> set wrap off

SQL> select * from dba_directories;

OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH

------------------------------ ------------------------------ ------------------

SYS                            ADMIN_DIR                      /ade/aime_10.2_lnx

SYS                            DATA_PUMP_DIR                  /u01/app/oracle/pr

SYS                            WORK_DIR                       /ade/aime_10.2_lnx

SYS                            BACKUP                         /u01

 

 

4.3 開始導入

 

導入之前需要將導出的dump 文件copy backup directory目錄下,即/u01。 Windowslinux的話,mount過去,linuxlinux SCP命令就可以了。

 

導入數據:

 

[oracle@rac1 u01]$ export ORACLE_SID=orcl1

[oracle@rac1 u01]$ impdp dave/dave DIRECTORY=BACKUP DUMPFILE=tianlesoftware.dmp SCHEMAS=DAVE logfile=impdp.log;

 

Import: Release 10.2.0.1.0 - Production on Tuesday, 28 September, 2010 6:32:42

 

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

 

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, Real Application Clusters, OLAP and Data Mining options

 

Master table "SYSTEM"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded

Starting "SYSTEM"."SYS_IMPORT_SCHEMA_01":  system/******** DIRECTORY=BACKUP DUMPFILE=tianlesoftware.dmp SCHEMAS=DAVE logfile=impdp.log

Processing object type SCHEMA_EXPORT/USER

ORA-31684: Object type USER:"DAVE" already exists

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/TABLE/TABLE

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

. . imported "DAVE"."USERINFO"                            5.25 KB       2 rows

Job "SYSTEM"."SYS_IMPORT_SCHEMA_01" completed with 1 error(s) at 06:33:51

 

這裏要注意,要指定ORACLE_SID, 不然會報如下錯誤:

 

UDI-00008: operation generated ORACLE error 1034

ORA-01034: ORACLE not available

ORA-27101: shared memory realm does not exist

Linux Error: 2: No such file or directory

UDI-00003: all allowable logon attempts failed

 

 

驗證:

 

SQL> conn dave/dave;

Connected.

SQL> select * from userinfo;

NAME       HOMETOWN

---------- --------------------

dave       安徽省安慶市懷寧縣

Tianle     安徽省安慶市懷寧縣

 

[oracle@rac2 bin]$ export ORACLE_SID=orcl2

[oracle@rac2 bin]$ sqlplus /nolog

 

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Sep 28 06:54:45 2010

 

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

 

SQL> conn dave/dave;

Connected.

SQL> select * from userinfo;

 

NAME       HOMETOWN

---------- --------------------

dave       安徽省安慶市懷寧縣

Tianle     安徽省安慶市懷寧縣

 

 

 

如果在導入之前,禁用了相關的觸發器,那麼在導入之後要啓用它們。 並且還要檢查是否有無效的procedure, function, packages, job 等。 如果有,重新編譯一下。

 

方法參考:

       Oracle Compile 編譯 無效對象

http://blog.csdn.net/tianlesoftware/archive/2009/11/21/4843600.aspx

 

 

一些注意事項:

1)導出導入之前檢查每個table之間是否有嚴格的關聯,比如PK, FK , 使用如下SQL查找,如果有,DISABLE先。

select * from all_constraints where constraint_type='R' and OWNER='DAVE' ;

 

2)自動歸檔模式下,導入數據的時候注意手工清理歸檔 。

 

3)如果在導出時,如果只導結構,如exp 使用了 rows=n , 或者expdp 使用了 content=metadata_only 都會導致導入後再次分析表的時候報ora-20005這個錯誤。我們需要在exp  rows=n 的時候加入statistics=none 。 或者在expdp  content=metadata_only的時候使用 exclude=(table_statistics,index_statistics)  來避免這個錯誤的發生。

 

       也就是說導出沒有數據的結構的時候不需要導出統計信息。 如果導出後,在導入時,統計信息會出於鎖定狀態,必須使用 execute DBMS_STATS.UNLOCK_TABLE_STATS('<user name>','<table name>'); 來幫所有table解掉統計信息上的鎖,否則不能再次統計 。

 

如果是先導入結構,注意先Disable Trigger 及相關可能觸發的Job, 導入完成後再開啓。

 

 

在只導結構的情況下, Table, Index 統計信息的一個說明:

 

因爲導入的時候沒有包含統計信息,所以需要重新收集統計。

exec dbms_stats.gather_schema_stats(ownname => 'dave',estimate_percent => dbms_stats.auto_sample_size,

method_opt => 'for all columns sizeauto',      

cascade=>TRUE,

degree => 8 ) ;

 

如果在expdp的時候沒有加入 exclude=(table_statistics,index_statistics) , 這時就會碰到類似下面的錯誤:

ERROR at line 1:

ORA-20005: object statistics are locked (stattype = ALL)

ORA-06512: at "SYS.DBMS_STATS", line 13437

ORA-06512: at "SYS.DBMS_STATS", line 13457

ORA-06512: at line 1

 

解決方法:解鎖:

 

找到這些table,index

select owner, table_name, stattype_locked from dba_tab_statistics where stattype_locked is not null and owner='DAVE' ;

 

批量修改爲unlock .

select  'exec   dbms_stats.unlock_table_stats(''DFMS'','''||table_name||'''); '  from  sys.dba_tab_statistics where stattype_locked is not null and  wner='DFMS' ;

 

 

 

上面只是簡單的測試,對於生產環境的搬遷,還是那句話:具體情況具體對待。 在搬遷之前最好在測試環境上測試一下。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章