利用Oracle的STANDBY技术,可以将单实例数据库升级到RAC数据库。这种方式可以有效的降低单实例迁移到RAC环境的停机时间。


这篇文章介绍STANDBY数据库建立的准备工作。






首先需要确保目标服务器上的RAC环境已经建立,如果使用ASM作为存储机制,则ASM实例也配置完成。


下面开始STANDBY数据库建立的过程,更改源数据库的FORCE LOGGING属性:


bash-3.00$ sqlplus "/ as sysdba"


SQL*Plus: Release11.1.0.6.0 - Production on星期三7月1 00:18:29 2009


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




连接到:


Oracle Database11gEnterprise Edition Release11.1.0.6.0 - 64bit Production


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


SQL> SET PAGES 100 LINES 120


SQL> SELECT NAME, LOG_MODE, FORCE_LOGGING FROM V$DATABASE;


NAME               LOG_MODE                 FORCE_


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


TEST11G            ARCHIVELOG               NO


SQL> ALTER DATABASE FORCE LOGGING;


数据库已更改。


由于要进行将目标数据库升级为RAC环境,因此需要添加UNDOTBS2和THREAD2对应的日志:


SQL> CREATE UNDO TABLESPACE UNDOTBS2


 2  DATAFILE '/data/oracle/oradata/test11g/undotbs2_01.dbf' SIZE1024M;


表空间已创建。


SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 4


 2  '/data/oracle/oradata/test11g/redo04.log' SIZE50M;


数据库已更改。


SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 5


 2  '/data/oracle/oradata/test11g/redo05.log' SIZE50M;


数据库已更改。


SQL> ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 6


 2  '/data/oracle/oradata/test11g/redo06.log' SIZE50M;


数据库已更改。


SQL> ALTER DATABASE ENABLE THREAD 2;


数据库已更改。


由于RMAN的DUPLICATE创建STANDBY,没有办法将数据文件放到远端的ASM磁盘组中,因此采用手工创建备份的方法,首先将所有的表空间置于BACKUP状态:


SQL> SELECT 'ALTER TABLESPACE ' || TABLESPACE_NAME || ' BEGIN BACKUP;'


 2  FROM DBA_TABLESPACES


 3  WHERE CONTENTS != 'TEMPORARY';


'ALTERTABLESPACE'||TABLESPACE_NAME||'BEGINBACKUP;'


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


ALTER TABLESPACE SYSTEM BEGIN BACKUP;


ALTER TABLESPACE SYSAUX BEGIN BACKUP;


ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP;


ALTER TABLESPACE UNDOTBS2 BEGIN BACKUP;


ALTER TABLESPACE USERS BEGIN BACKUP;


ALTER TABLESPACE YANGTK BEGIN BACKUP;


ALTER TABLESPACE TEST BEGIN BACKUP;


已选择7行。


SQL> ALTER TABLESPACE SYSTEM BEGIN BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE SYSAUX BEGIN BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE UNDOTBS2 BEGIN BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE USERS BEGIN BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE YANGTK BEGIN BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE TEST BEGIN BACKUP;


表空间已更改。


下面将数据文件发送到远端服务器的ASM磁盘组上,方法其实有很多,但是绝大部分需要额外的数据库支持,比如如果远端ASM实例上存在一个数据库,那么可以使用ftp的方式、DBMS_FILE_TRANSFER的方式等等。如果不依靠其他的数据库辅助,那么可以使用ftp到远端磁盘,然后通过asmcmd工具将文件拷贝到ASM磁盘组中。


由于目标服务器上已经有rac数据库存在,因此使用ftp的方式会更加的方便一些:


bash-3.00$ cd /data/oracle/oradata/test11g


bash-3.00$ ftp 172.0.2.62 7788


Connected to 172.0.2.62.


220- ser1


Unauthorised use of this FTP server is prohibited and may be subject to civil and criminal prosecution.


220 ser1 FTP Server (Oracle XML DB/Oracle Database) ready.


Name (172.0.2.62:oracle): system


331 pass required for SYSTEM


Password:


230 SYSTEM logged in


Remote system type is Unix.


ftp> bin


200  Type set toI.


ftp> prompt


Interactive mode off.


ftp> cd sys


250 CWD Command successful


ftp> cd asm


250 CWD Command successful


ftp> cd data/test11g


250 CWD Command successful


ftp> mput sysaux01.dbf test01.dbf undotbs01.dbf redo0*.log users01.dbf system01.dbf undotbs2_01.dbf yangtk01.dbf


200 PORT Command successful


150 BIN Data Connection


550- Error Response


ORA-31199: Warning in processing file +data/test11g/sysaux01.dbf


ORA-19698: +DATA/test11g/sysaux01.dbf is from different database: id=2655088921, db_name=TEST11G


550 End Error Response


200 PORT Command successful


150 BIN Data Connection


550- Error Response


ORA-31199: Warning in processing file +data/test11g/test01.dbf


ORA-19698: +DATA/test11g/test01.dbf is from different database: id=2655088921, db_name=TEST11G


550 End Error Response


.


.


.


200 PORT Command successful


150 BIN Data Connection


550- Error Response


ORA-31199: Warning in processing file +data/test11g/yangtk01.dbf


ORA-19698: +DATA/test11g/yangtk01.dbf is from different database: id=2655088921, db_name=TEST11G


550 End Error Response


ftp> quit


221 QUIT Goodbye.


出现错误的原因是当前ftp的数据文件也打开asm的ftp端口的数据库不符,这里不用理会这个错误。


在源数据库上可以关闭表空间的备份状态:


SQL> ALTER TABLESPACE SYSTEM END BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE SYSAUX END BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE UNDOTBS1 END BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE UNDOTBS2 END BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE YANGTK END BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE USERS END BACKUP;


表空间已更改。


SQL> ALTER TABLESPACE TEST END BACKUP;


表空间已更改。


在源数据库的tnsnames.ora文件中添加下面的TNS配置:


TEST11GR =


 (DESCRIPTION =


   (ADDRESS_LIST =


     (ADDRESS = (PROTOCOL = TCP)(HOST = 172.0.2.62)(PORT = 1521))


   )


   (CONNECT_DATA =


     (SID = test11gr1)


     (SERVER = DEDICATED)


   )


 )


下面可以在主库修改初始化参数文件:


SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(TEST11G,TEST11GR)';


系统已更改。


SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1=


 2     'LOCATION=/data/oradata/test11g/archivelog


 3     VALID_FOR=(ALL_LOGFILES,ALL_ROLES)


 4     DB_UNIQUE_NAME=TEST11G';


系统已更改。


SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=


 2     'SERVICE=TEST11GR LGWR ASYNC


 3     VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)


 4     DB_UNIQUE_NAME=TEST11GR';


系统已更改。


SQL> ALTER SYSTEM SET FAL_SERVER=TEST11GR;


系统已更改。


SQL> ALTER SYSTEM SET FAL_CLIENT=TEST11G;


系统已更改。


SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;


系统已更改。


下面利用当前的初始化参数,创建PFILE,修改后用于STANBY数据库的启动,同时生成STANDBY CONTROLFILE,与修改后的PFILE文件一起放到目标服务器上:


SQL> CREATE PFILE='/export/home/oracle/inittest11gr.ora' FROM SPFILE;


文件已创建。


SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/export/home/oracle/control01.ctl';


数据库已更改。


更改初始化参数,并添加RAC环境专用的初始化参数:


*.audit_file_dest='/data/oracle/admin/test11g/adump'


*.audit_trail='db'


*.compatible='11.1.0.0.0'


*.control_files='+DATA/TEST11G/control01.ctl'


*.db_block_size=32768


*.db_domain='netdb'


*.db_name='TEST11G'


*.diagnostic_dest='/data/oracle'


*.dispatchers='(PROTOCOL=TCP) (SERVICE=test11gXDB)'


*.fal_client='TEST11GR'


*.fal_server='TEST11G'


*.log_archive_config='DG_CONFIG=(TEST11G,TEST11GR)'


*.log_archive_dest_1='LOCATION=+DATA/TEST11G/archivelog


       VALID_FOR=(ALL_LOGFILES,ALL_ROLES)


       DB_UNIQUE_NAME=TEST11GR'


*.log_archive_dest_2='SERVICE=TEST11GLGWR ASYNC


       VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)


       DB_UNIQUE_NAME=TEST11G'


*.log_archive_format='%t_%s_%r.dbf'


*.memory_target=7398752256


*.pga_aggregate_target=2097152000


*.remote_login_passwordfile='EXCLUSIVE'


*.standby_file_management='AUTO'


*.cluster_database=true


*.cluster_database_instances=2


*.db_unique_name='TEST11GR'


*.log_file_name_convert=('/data/oracle/oradata/test11g', '+DATA/TEST11G')


*.db_file_name_convert=('/data/oracle/oradata/test11g', '+DATA/TEST11G')


test11gr1.undo_tablespace='UNDOTBS1'


test11gr2.undo_tablespace='UNDOTBS2'


test11gr1.instance_number=1


test11gr2.instance_number=2


test11gr1.thread=1


test11gr2.thread=2


test11gr1.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.62)(PORT=1521))'


test11gr2.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=172.0.2.63)(PORT=1521))'


确保两个节点上的对应目录都已经建立。ASM上对应的存储目录也已经建立。


bash-3.00$ mkdir -p /data/oracle/admin/test11g/adump


bash-3.00$ mkdir /data/oracle/flash_recovery_area


准备工作基本上完成,下面准备在STANDBY的节点1上打开STANDBY数据库。



oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html