Deploy 11.2.0.3 RAC+DG on Windows 2008 R2 Step by Step

2022-10-17,,,,

环境规划:

节点1: tc1 192.168.56.101 内存:2G

节点2: tc2 192.168.56.102 内存:2G

物理备库:tcdg192.168.56.108内存:1.5G

操作系统:Windows 2008 R2 Enterprise

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

 RAC部分

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

一、准备工作

1.改动提升权限提示方式为“不提示,直接提升”(默觉得“非Windows二进制文件的允许提示”)

cmd> secpol.msc->本地策略->安全选项->用户账户控制->管理员批准模式中管理员的提升权限提示的行为

2.禁用防火墙

cmd> firewall.cpl->打开或关闭防火墙->关闭Window防火墙

3.改动注冊表关闭DHCP媒体感知(改动后重新启动生效)

cmd> regedit->\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters以下加入一项,名字是DisableDHCPMediaSense,类型为DWORD,值为1

4.检查是否生效

cmd> netsh interface ipv4 show global

DHCP 媒体感知 :enabled

5.关闭可伸缩网络包(SNP)特性(改动后马上生效)

cmd> netsh int tcp set global rss=disabled

cmd> netsh int tcp set global chimney=disabled

c:\grid>netsh int tcp show global

查询活动状态...

TCP 全局參数

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

接收方缩放状态                    : disabled

烟囱卸载状态                      : disabled

NetDMA 状态                       : enabled

直接缓存訪问(DCA)                 : disabled

接收窗体自己主动调谐级别              : normal

附加拥塞控制提供程序              : ctcp

ECN 功能                          : disabled

RFC 1323 时间戳                   : disabled

6.调整网络绑定顺序

cmd> ncpa.cpl->高级->高级设置->调整public在前,private在后,而且确保IPV4协议在IPV6协议之前

7.停止Distributed Transaction Coordinator,并设置成手动启动

cmd> services.mcs->点属性改动

8.同步各节点时间(可选)

通常节点之间的时间是由CTSSD(Cluster Time Synchronization Services Daemon)或 Windows Time Service来保证的,假设开启了Windows Time Service(默认关闭),那么必须保证不会被反向改动,须要做下面调整

cmd> regedit->\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config

把MaxNegPhaseCorrection的值改为0

cmd> w32tm /config /update  --使改动生效

9.环境变量设置(可选)

装完系统默认应该已经有TMP和TEMP这两个环境变量了,路径都为%USERPROFILE%\AppData\Local\Temp

因为在安装OUI的时候,会用到这2个环境变量。所以假设没有的话须要加入上。而且确保路径是一致的

10.改动C:\windows\system32\etc\hosts

#public ip

192.168.56.101 tc1

192.168.56.102 tc2

#virtual ip

192.168.56.103 tc1-vip

192.168.56.104 tc2-vip

#private ip

10.0.0.1 tc1-priv

10.0.0.2 tc2-priv

192.168.56.105 tc-cluster-scan
--格式为"cluster名-scan"

11.full clone节点1至节点2

启动并改动节点2的网卡ip地址和主机名后再次重新启动

12.測试连通性

节点1运行

cmd> ping tc2

cmd> ping tc2-vip

cmd> ping tc2-priv

cmd> net use \\tc2\c$

节点2运行(略)

13.測试远程注冊表

节点1运行

cmd> regedit->文件->连接网络注冊表->输入tc2->检查名称-确定

节点2运行(略)

二、配置共享磁盘

1.共享磁盘划分规划

DISK1 TC_OCR_VOTE1
1G

DISK2 TC_OCR_VOTE2
1G

DISK3 TC_OCR_VOTE3
1G

DISK1 TC_DATA12G

DISK5 TC_DATA22G

DISK6 TC_FRA1
2G

DISK7 TC_FRA2
2G

从11g開始。Oracle推荐把OCR和VOTEDISK放到ASM中进行管理。所以这里共划分了7块磁盘,3块用于磁盘组OCRVOTE,採用NORMAL冗余。2块用于DATA,2块用于FRA。都是外部冗余。注意。这里分配的用于创建ASM磁盘组的磁盘必须是不带盘符的裸磁盘,在Windows 2003中。能够用diskmgmt.msc来取代diskpart来创建磁盘分区,可是在Windowns 2008中仅仅能用diskpart来分区

2.设置自己主动挂载(全部节点)

cmd> diskpart

diskpart> automount enable

3.清除磁盘(节点1)

cmd> list disk

cmd> select disk 1

cmd> clean all

...

cmd> select disk 7

cmd> clean all

4.创建扩展分区和逻辑磁盘(节点1)

cmd> select disk 1

cmd> create part ext

cmd> create part log

...

cmd> select disk 7

cmd> create part ext

cmd> create part log

5.删除逻辑磁盘盘符(节点2)

本地节点上用diskpart创建完扩展分区和逻辑盘后不会显示逻辑盘符,但其它节点上可能会有,须要所有去除。注意,刚在节点2需重新启动才干发现节点1上对磁盘的分区

cmd> select disk 3 --注意相应的逻辑驱动器卷标。并非从1開始的

cmd> remov

...

cmd> select disk 9

cmd> remov

6.用asmtool或asmtoolg来划分asm磁盘组分区

进入grid安装介质中,如:C:\grid\asmtools。执行amstoolg

选中要加入到同一个磁盘组的盘。输入磁盘组名称。点击下一步

三、安装Grid Infrastructure软件

1.预检安装条件是否满足

C:\grid> runcluvfy stage -pre crsinst -n tc1,tc2 -verbose

C:\grid> runcluvfy stage -post hwos -n tc1,tc2 -verbose

会提示集群服务配置失败,由于此时并没有配置过vip,忽略。

另一个警告是无法将用户 "Administrator" 作为域用户进行验证,这个能够忽略。最后一个警告是提示防火墙没有关闭。但检查了一下,确实是关闭的,依据后面OUI里面的提示。通过改动注冊表能够关闭防火墙。

可是后来发现是由于域配置文件里的防火墙没有关造成的

2.安装(略)

               
     

四、安装Database软件

1.预检安装条件是否满足

C:\grid> runcluvfy stage -pre dbinst -n tc1,tc2 -verbose

2.安装(略)

安装数据库软件卡在100%,卡了大约1个小时,多数是由于系统资源不够。測试环境内存太小。分配了2G也勉强能用,以为卡死掉了,只是耐心等待后最终全然装好。好费劲啊

结束之后要在远程节点运行ORACLE_HOME/bin/selecthome.bat,以激活下面5个产品:

Oracle Data Provider for .NET

Oracle Provider for OLE DB

Oracle Objects for OLE

Oracle Counters for Windows Performance Monitor

Oracle Administration Assistant

五、创建磁盘组(ASMCA)

1.创建+DATA和+FRA磁盘组

C:\Users\Administrator>set oracle_home=c:\app\11.2.0\grid

C:\Users\Administrator>set oracle_sid=+asm1

C:\Users\Administrator>asmcmd

ASMCMD> ls

DATA/

FRA/

OCRVOTE/

2.创建OCR镜像备份

尽管之前已经单独为OCR和VOTEDISK创建了一个磁盘组。但Oracle建议至少在其它磁盘组中存放OCR的镜像,注意,每一个磁盘组仅仅能存放一个OCR镜像

C:\Users\Administrator>asmcmd lsof

DB_Name  Instance_Name  Path

+ASM     +asm1          +ocrvote.255.4294967295

因为此时并未创建数据库实例。所以眼下仅仅有在+OCRDATE磁盘组中有唯一的一个文件。就是OCR文件

C:\Users\Administrator>asmcmd

ASMCMD> cd ocrvote/tc-cluster/ocrfile

ASMCMD> ls

REGISTRY.255.854982335

ASMCMD> pwd

+ocrvote/tc-cluster/ocrfile

注意。OCR实际的文件名称是REGISTRY.255.854982335,而并非+ocrvote.255.4294967295。这仅仅是一个路径

OCR文件的备份方式

--自己主动备份

C:\Users\Administrator>ocrconfig -showbackup

PROT-24: Oracle 集群注冊表的自己主动备份不可用

PROT-25: Oracle 集群注冊表的手动备份不可用

默认Oracle会提供5份自己主动备份,按月、星期、天、以及保留最后3次修改。也能够手动运行备份,因为是新部署的环境,所以自己主动备份还未生成,也没有运行过手动备份

--手工备份

C:\Users\Administrator>ocrconfig -manualbackup

tc2     2014/08/08 11:05:30     C:\app\11.2.0\grid\cdata\tc-cluster\backup_20140808_110530.ocr

默认存放在“%ORACLE_CRS_HOME%\cdata\集群名\”以下,文件名称格式为“backup_xxxxxxxx_xxxxxx.orc”

这个默认位置能够通过-backuploc參数来改

C:\Users\Administrator>ocrconfig -backuploc c:\app

C:\Users\Administrator>ocrconfig -manualbackup

tc2     2014/08/08 11:20:38    
c:\app\backup_20140808_112038.ocr

tc2     2014/08/08 11:05:30     C:\app\11.2.0\grid\cdata\tc-cluster\backup_20140808_110530.ocr

注意,以上命令我是在tc1节点上运行的,可是默认却放到了tc2节点的本地路径,我又尝试在节点2上再次运行手工备份。依旧是在tc2节点本地指定的路径生成OCR备份,难道是Oracle专门这样设计的吗?

--导出/导入到本地磁盘的方式

ocrconfig -export C:\ocr_bak.ocr

ocrconfig -import C:\ocr_bak.ocr

注意:利用自己主动或手动备份进行恢复是用restore而不是import

--在磁盘组中加入OCR冗余

C:\Users\Administrator>ocrconfig -add +DATA

C:\Users\Administrator>ocrconfig -add +FRA

C:\Users\Administrator>ocrcheck

Oracle 集群注冊表的状态例如以下:

         版本号                  :          3

         总空间 (KB)     :     262120--总共才250M左右

         已用空间 (KB)      :      

         可用空间 (KB):     259312

         ID                       :  513928542

         设备/文件名称         :   +OCRVOTE

                                    设备/文件完整性检查成功

         设备/文件名称         :      +DATA

                                    设备/文件完整性检查成功

         设备/文件名称         :       +FRA

                                    设备/文件完整性检查成功

                                    设备/文件尚未配置

                                    设备/文件尚未配置

         集群注冊表完整性检查成功

         逻辑损坏检查成功

这里在+DATA和+FRA磁盘组都配置了OCR的备份,能够看到。Oracle提供最多5个位置用来备份OCR

能够看到。Oracle提供了多种备份ORC的方法,在10g中,用得比較多的就是存放在多个RAW设备上,然后用export/import到RAW磁盘的方式进行备份恢复,到了11g,Oracle把OCR放入了磁盘组。默认就是放VOTEDISK的那个磁盘组。而且建议在其它磁盘组中创建冗余

3.查看表决磁盘

C:\Users\Administrator>crsctl query css votedisk

##  STATE    File Universal Id                File Name Disk group

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

 1. ONLINE   7a6a6919ffe84fcfbf1e242c18f0b93e (\\.\ORCLDISKOCRVOTE2) [OCRVOTE]

 2. ONLINE   5857035b4da74fb3bf2f9c7d79a8aa2e (\\.\ORCLDISKOCRVOTE1) [OCRVOTE]

 3. ONLINE   7dd5966551d84fcbbffd88b32c038537 (\\.\ORCLDISKOCRVOTE0) [OCRVOTE]

找到了 3 个表决磁盘。

六、创建数据库实例(DBCA)

1.预检之前安装的RAC数据库软件是否正常

c:\grid> runcluvfy stage -pre dbcfg -n all -d C:\app\11.2.0\grid -verbose

2.创建数据库实例

c:\grid> dbca

***********

  DG部分

***********

*****主库配置*****

1.开启归档和force logging

SQL> select database_role,log_mode,force_logging from v$database;

DATABASE_ROLE    LOG_MODE     FOR

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

PRIMARY          ARCHIVELOG  
NO

SQL> alter database force logging;

2.改动主库DG配置须要的參数

SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(tc,tcdg)';

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=tc';

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=tcdgLGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=tcdg';

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

SQL> ALTER SYSTEM SET FAL_SERVER=tcdg;

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT='AUTO';

默认情况下,假设不指定scope,默认是both,这里我们须要让设置的參数在内存和spfile同一时候生效,所以能够不加scope=both。

此外,数据库默认的db_unique_name=db_name,因此也不作改动

SQL> show parameter db_unique_name

NAME                                 TYPE        VALUE

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

db_unique_name                       string  
   tc

下面两个參数改动后,需重新启动生效,必须加上scope=spfile

SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT='C:\app\oracle\oradata\tc','+data/tc/datafile' scope=spfile;

SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='C:\app\oracle\oradata\tc','+data/tc/onlinelog' scope=spfile;

生产环境停库须要先停应用,再停监听,运行检查点,把在线日志归档

C:\Users\Administrator>srvctl stop listener -n tc1

C:\Users\Administrator>srvctl stop lisetner -n tc2

SQL> alter system checkpoint;

SQL> alter system archive log current;

C:\Users\Administrator>srvctl stop database -d tc

再启动数据库(注意,启动数据库时,会自己主动开启监听)

C:\Users\Administrator>srvctl start database -d tc

SQL> show parameter file_name_convert

NAME                                 TYPE        VALUE

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

db_file_name_convert                 string      C:\app\oracle\oradata\tc, +data/tc/datafile

log_file_name_convert                string      C:\app\oracle\oradata\tc, +data/tc/onlinelog

能够看到,2个转换文件名称的參数已经生效了

3.创建tnsnames.ora和listener.ora

C:\Users\Administrator>netca。加入备库的NET SERVICE NAME:tcdg

也能够在原有的tnsnames.ora中进行改动。那么就不用netca了

改动完的内容例如以下:

# tnsnames.ora Network Configuration File: C:\app\oracle\product\11.2.0\dbhome_1\network\admin\tnsnames.ora

# Generated by Oracle configuration tools.

TC =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = tc-cluster-scan)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = tc)

    )

  )

TCDG =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.108)(PORT = 1521))  --这里HOST究竟用主机名还是IP能够依据需求

    )

    (CONNECT_DATA =

      (SERVICE_NAME = tc)--注意这里是tc而不是tcdg,由于实例名和主库保持一致

    )

  )

注意,因为GI的监听是在%ORACLE_CRS_HOME%/network/admin中的,即C:\app\11.2.0\grid\NETWORK\ADMIN,而不是单实例的%ORACLE_HOME%/network/admin。即C:\app\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN

默认RAC数据库是用grid下的netca来创建监听的,能够通过下面命令查看

C:\Users\Administrator>call C:\app\11.2.0\grid\BIN\netca

Oracle Net Services 配置:

Oracle Net Configuration Assistant 是从网格基础结构主文件夹启动的。网络配置将是集

群范围的。

在打开的配置界面中。能够看到已经有一个LISTENER的监听了,打开C:\app\11.2.0\grid\NETWORK\ADMIN下的listener.ora,发现内容例如以下。和我们熟悉的listener.ora并不同:

LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))# line added by Agent

LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))# line added by Agent

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON
# line added by Agent

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent

已经有2个监听了,而我们须要的是能用于单实例的监听,又不和原有动态监听冲突,所以考虑给主库创建一个静态监听。用net manager应用程序来创建,完毕后会在%ORACLE_HOME%/network/admin文件夹下生成一个listener.ora的文件,内容例如以下:

# listener.ora Network Configuration File: C:\app\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = tc)

      (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1)

      (SID_NAME = tc1)--注意是节点1的实例,所以是tc1,不能写成tc

    )

  )

LISTENER =

  (DESCRIPTION =

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

  )

ADR_BASE_LISTENER = C:\app\oracle\product\11.2.0\dbhome_1\log

假设配置正确。那么会显演示样例如以下的监听状态:

C:\Users\Administrator>lsnrctl status

...

服务摘要..

服务 "+ASM" 包括 1 个实例。

  实例 "+asm1", 状态 READY, 包括此服务的 1 个处理程序...

服务 "tc" 包括 2 个实例。

  实例 "tc1", 状态 UNKNOWN, 包括此服务的 1 个处理程序...

  实例 "tc1", 状态 READY, 包括此服务的 1 个处理程序...

服务 "tcXDB" 包括 1 个实例。

  实例 "tc1", 状态 READY, 包括此服务的 1 个处理程序...

命令运行成功

1个动态监听,1个静态监听。都为实例tc1创建了服务tc

4.创建password文件(可省略)

C:\Users\Administrator>orapwd file=pwdtc1.ora password=oracle entries=5 

5.创建备库初始化參数文件

SQL> create pfile='c:\inittc1.ora' from spfile;

6.复制tnsnames.ora,listener.ora。password文件。初始化參数文件到备库对应位置

*****备库配置*****

1.依据pfile创建对应的文件夹

mkdir C:\app\oracle\admin\tc\adump

mkdir C:\app\oracle\admin\tc\dpdump

mkdir C:\app\oracle\admin\tc\hdump

mkdir C:\app\oracle\admin\tc\pfile

mkdir C:\app\oracle\oradata\tc

mkdir C:\app\oracle\flash_recovery_area

能够仅仅创建红色部分

2.把从主库复制过来的文件做对应改动,在这些文件里,除了tnsnames.ora能够原封不动,其它都须要进行对应改动,包含改动文件名称,改动完的pfile内容例如以下:

*.__db_cache_size=0

*.__java_pool_size=0

*.__large_pool_size=0

*.__oracle_base='C:\app\oracle'#ORACLE_BASE set from environment

*.__pga_aggregate_target=0

*.__sga_target=0

*.__shared_io_pool_size=0

*.__shared_pool_size=0

*.__streams_pool_size=0

*.audit_file_dest='C:\app\oracle\admin\tc\adump'

*.audit_trail='db'

*.cluster_database=false --这个參数必须设置为false,说明是单实例数据库。否则启动会报错

*.compatible='11.2.0.0.0'

*.control_files='C:\app\oracle\oradata\tc\control01.ctl','C:\app\oracle\oradata\tc\control02.ctl'

*.db_block_size=8192

*.db_create_file_dest='C:\app\oracle\oradata'

*.db_domain=''

*.db_name='tc'

*.db_recovery_file_dest='C:\app\oracle\flash_recovery_area'

*.db_recovery_file_dest_size=3908042752

*.diagnostic_dest='C:\app\oracle'

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

*.fal_server='TC'

*.instance_number=1

*.log_archive_config='DG_CONFIG=(tc,tcdg)'

*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=tcdg'

*.log_archive_dest_2='SERVICE=tc LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=tc'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.log_archive_format='ARC%S_%R.%T'

*.memory_target=857735168

*.nls_language='SIMPLIFIED CHINESE'

*.nls_territory='CHINA'

*.open_cursors=300

*.processes=150

#*.remote_listener='tc-cluster-scan:1521'
--原来的远程监听,这行要凝视掉,单实例上没有这个參数

*.remote_login_passwordfile='exclusive'

*.standby_file_management='AUTO'

*.undo_tablespace='UNDOTBS1'

*.db_file_name_convert='+data/tc/datafile','C:\app\oracle\oradata\tc\'

*.log_file_name_convert='+data/tc/onlinelog','C:\app\oracle\oradata\tc\'

*.db_unique_name=tcdg --复制过来的pfile假设不设置这个參数,默认的值是tc。所以必需要改动掉

注意,红色部分是须要改动的内容,因为主库是RAC数据库,非常多用于RAC的參数已经去掉,没有所有列出

3.创建服务

oradim -new -sid tc -startmode manual -spfile

4.启动监听

C:\Users\Administrator>lsnrctl start

5.用pfile启动

假设启动时遇到ORA-12560: TNS: 协议适配器错误,那么请检查下面2点:

1.是否启动了OracleServervicetcdg服务

因为之前创建实例时用了-startmode manual,那么主机重新启动后需手动启动这个服务,Oracle建议这些服务都是手动的

C:\Users\Administrator>net start oracleservicetcdg

OracleServicetcdg 服务正在启动 ..

OracleServicetcdg 服务已经启动成功。

2.是否设置了正确的ORACLE_SID

C:\Users\Administrator>set oracle_sid=tc

C:\Users\Administrator>sqlplus / as sysdba

SQL> startup nomount

ORACLE 例程已经启动。

Total System Global Area  855982080 bytes--由memory_target參数确定

Fixed Size                  2260000 bytes

Variable Size             507511776 bytes

Database Buffers          343932928 bytes

Redo Buffers                2277376 bytes

SQL> 

注意,这里系统又一次分配了各内存组件的内存,事实上刚才改动pfile的时候,把这些參数的值所有设置为0了:

*.__db_cache_size=0

*.__java_pool_size=0

*.__large_pool_size=0

*.__pga_aggregate_target=0

*.__sga_target=0

*.__shared_io_pool_size=0

*.__shared_pool_size=0

*.__streams_pool_size=0

这样就表示由数据库自己主动管理这些内存组件,包含SGA和PGA。详细是由下面这个參数来分配的:

*.memory_target=857735168

注意,生产环境务必要改大这个參数值。起码是真实物理内存的40%-60%

主库或备库运行:

C:\Users\Administrator>rman target sys/oracle@tc auxiliary sys/oracle@tcdg

恢复管理器: Release 11.2.0.3.0 - Production on 星期六 8月 9 12:26:33 2014

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

已连接到目标数据库: TC (DBID=3163057399)

已连接到辅助数据库: TC (未装载)

假设在备库上运行出现下面错误:

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-00554: 内部恢复管理器程序包初始化失败

RMAN-04005: 目标数据库中存在错误:

ORA-12545: 因目标主机或对象不存在, 连接失败

那么须要在备库主机的hosts中增加一行:

192.168.56.105 tc-cluster-scan--注意。这里加入的是scan-ip,而不是详细的节点1或节点2的主机名

RMAN> duplicate target database for standby from active database;

出现例如以下错误:

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: Duplicate Db 命令 (在 08/09/2014 17:19:04 上) 失败

RMAN-05501: 终止复制目标数据库

RMAN-05517: 暂时文件 +DATA/tc/tempfile/temp.263.855057647 与目标数据库使用的文件

冲突

那么就须要用SET NEWNAME FOR TEMPFILE 1 TO 'PATH'来指定一下文件名称,例如以下(注意换了一种写法):

RMAN> run{

allocate channel c1 device type disk;

allocate auxiliary channel c2 device type disk;

set newname for tempfile 1 to 'c:\app\oracle\oradata\tc\temp01.dbf';

duplicate target database for standby from active database;

release channel c1;

release channel c2;

}

事实上还能够加上很多其它的參数来进行duplicate:

RMAN> run{

allocate channel c1 device type disk;

allocate auxiliary channel c2 device type disk;

set newname for tempfile 1 to 'c:\app\oracle\oradata\tc\temp01.dbf';

duplicate target database for standby from active database 

spfile --能够使用spfile參数来加入备库所需參数 

set control_files='c:\app\oracle\oradata\tc\control01.ctl','\app\oracle\oradata\tc\control02.ct' 

set log_archive_config='DG_CONFIG=(tc,tcdg)' 

set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=tcdg' 

set log_archive_dest_2='SERVICE=tc LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=tc' 

set log_archive_dest_state_1='ENABLE' 

set log_archive_dest_state_2='ENABLE' 

set remote_login_passwordfile='exclusive' 

set standby_file_management='AUTO'; 

set db_file_name_convert='+data/tc/datafile','C:\app\oracle\oradata\tc' 

set log_file_name_convert='+data/tc/onlinelog','C:\app\oracle\oradata\tc' 

set db_name=tc 

set db_unique_name=tcdg;

release channel c1;

release auxiliary channel c2;

}

注意。假设使用了spfile參数。那么就不再使用备库上的pfile,会直接在备库上生成一个改动好參数的spifle并使用,所以建议把备库上须要的DG參数所有加上

--备库查看文件:

SQL> set lin 80 pages 80

SQL> col name for a50

SQL> select file#,name from v$datafile;

     FILE# NAME

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

         1 C:\APP\ORACLE\ORADATA\TC\SYSTEM.256.855057451

         2 C:\APP\ORACLE\ORADATA\TC\SYSAUX.257.855057453

         3 C:\APP\ORACLE\ORADATA\TC\UNDOTBS1.258.855057453

         4 C:\APP\ORACLE\ORADATA\TC\USERS.259.855057453

         5 C:\APP\ORACLE\ORADATA\TC\EXAMPLE.264.855057687

         6 C:\APP\ORACLE\ORADATA\TC\UNDOTBS2.265.855058289

SQL> select file#,name from v$tempfile;

     FILE# NAME

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

         1 C:\APP\ORACLE\ORADATA\TC\TEMP01.DBF

SQL> select group#,member from v$logfile;

    GROUP#

----------

MEMBER

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

         2

C:\APP\ORACLE\ORADATA\TC\GROUP_2.262.855057605

         2

C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_2_9YCZCO9R_.LOG

         1

C:\APP\ORACLE\ORADATA\TC\GROUP_1.261.855057597

         1

C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_1_9YCZBZ3X_.LOG

         3

C:\APP\ORACLE\ORADATA\TC\GROUP_3.266.855058587

         3

C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_3_9YCZDHFO_.LOG

         4

C:\APP\ORACLE\ORADATA\TC\GROUP_4.267.855058593

         4

C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_4_9YCZF9L2_.LOG

         1

C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_1_9YCZC41Y_.LOG

         2

C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_2_9YCZCXOH_.LOG

         3

C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_3_9YCZDOGN_.LOG

         4

C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_4_9YCZFJTV_.LOG

已选择12行。

SQL> select group#,thread#,members from v$log;

    GROUP#    THREAD#    MEMBERS

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

         1          1          3

         2          1          3

         3          2          3

         4          2          3

备库共同拥有4组online redo logfile。每组3个日志文件。Oracle建议适当添加日志组。每组最多2个成员。而如今每组3个成员显然太多了,对性能会有影响,删除一组FRA以下的

SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_1_9YCZC41Y_.LOG';

数据库已更改。

SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\

ONLINELOG\O1_MF_2_9YCZCXOH_.LOG';

alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLIN

ELOG\O1_MF_2_9YCZCXOH_.LOG'

*

第 1 行出现错误:

ORA-01609: 日志 2 是线程 1 的当前日志 - 无法删除成员

ORA-00312: 联机日志 2 线程 1: 'C:\APP\ORACLE\ORADATA\TC\GROUP_2.262.855057605'

ORA-00312: 联机日志 2 线程 1:

'C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_2_9YCZCO9R_.LOG'

ORA-00312: 联机日志 2 线程 1:

'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_2_9YCZCXOH_.LOG'

SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_3_9YCZDOGN_.LOG';

数据库已更改。

SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_4_9YCZFJTV_.LOG';

数据库已更改。

SQL> select group#,members,status from v$log;

    GROUP#    MEMBERS STATUS

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

         1          2 CLEARING

         2          3 CURRENT

         3          2 UNUSED

         4          2 UNUSED

第2组的日志因为正在使用。所以无法删除,先无论。等有机会切换日志后再进行删除

--再来看一下主库的online redo logfile的情况:

SQL> col member for a45

SQL> select group#,member from v$logfile;

    GROUP# MEMBER

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

         2 +DATA/tc/onlinelog/group_2.262.855057605

         2 +FRA/tc/onlinelog/group_2.258.855057607

         1 +DATA/tc/onlinelog/group_1.261.855057597

         1 +FRA/tc/onlinelog/group_1.257.855057601

         3 +DATA/tc/onlinelog/group_3.266.855058587

         3 +FRA/tc/onlinelog/group_3.259.855058591

         4 +DATA/tc/onlinelog/group_4.267.855058593

         4 +FRA/tc/onlinelog/group_4.260.855058595

也是一共4组,但每组是2个成员,能够看到,用duplicate过来的备库。每组多创建了个1个成员

--在备库加入standby redo logfile

SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_05.log'size 50m;

SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_06.log'size 50m;

SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_07.log'size 50m;

SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_08.log'size 50m;

SQL> alter database add standby logfile 'C:\app\oracle\oradata\tc\std_09.log'size 50m;

注意。假设不指定组号,默认会在online redo logfile组的基础上递增,如,原来有4组online redo logfile,那么能够看到加入后的备库日志:

SQL> select group#,thread# from v$standby_log;

    GROUP#    THREAD#

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

         5          0
--备库日志文件从5開始编号

         6          0

         7          0

         8          0

         9          0

刚才默认创建了5组standby redo logfile。thread#为0是由于还没有被应用。应用以后应该是1

--主库查看归档路径状态

SQL> col destination for a30

SQL> col error for a20

SQL> select dest_id,destination,status,error fromv$archive_dest_state where dest_id<3;

   DEST_ID DESTINATION                    STATUS    ERROR

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

         1 USE_DB_RECOVERY_FILE_DEST      VALID

         2 tcdg                           VALID

--备库查看归档路径状态

SQL> col destination for a30

SQL> col error for a20

SQL> select dest_id,destination,status,error fromv$archive_dest_state where dest_id<3

;

   DEST_ID DESTINATION                    STATUS    ERROR

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

         1 USE_DB_RECOVERY_FILE_DEST      VALID

         2 tc                             VALID

--開始应用日志

SQL> alter database recover managed standby databaseusing current logfile disconnect from session;

--主库切换1次日志

SQL> alter system switch logfile;

系统已更改。

--备库查看日志应用情况

SQL> select sequence#,applied fromv$archived_log;

 SEQUENCE# APPLIED

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

        30 YES

        29 YES

        31 YES

        32 YES

        33 YES

        34 IN-MEMORY
--说明正在应用

已选择6行。

SQL> select group#,status from v$log;

    GROUP# STATUS

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

         1 CURRENT

         2 CLEARING
--CLEARING状态了。而非CURRENT了

         3 UNUSED

         4 UNUSED

--删除刚才没有成功的那个group2的日志组成员

SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_2_9YCZCXOH_.LOG';

alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\

*

第 1 行出现错误:

ORA-01156: 进行中的恢复或闪回可能须要訪问文件

--须要先停止REDO APPLY后再删除

SQL> recover managed standby database
cancel;

完毕介质恢复。

SQL> alter database drop logfile member 'C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\

ONLINELOG\O1_MF_2_9YCZCXOH_.LOG';

数据库已更改。

SQL> select group#,members from v$log;

    GROUP#    MEMBERS

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

         1          2

         2          2

         3          2

         4          2

--删完日志文件后,要记得把standby_file_management參数的值改回为AUTO

SQL> show parameter standby_file_management;

NAME                                 TYPE        VALUE

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

standby_file_management              string      MANUAL

SQL> alter system set standby_file_management=auto;

系统已更改。

SQL> show parameter standby_file_management

NAME                                 TYPE        VALUE

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

standby_file_management              string      AUTO

--又一次启用REDO APPLY

SQL> recover managed standby database
using current logfile disconnect from session;

完毕介质恢复。

至此,RAC-DG顺利搭建完毕。

总结:

因为本机的内存并不大,仅仅有8G。在两个节点共分配2G,DG节点分配1.5G以后。常常会出现卡顿现象,并且是在已经关闭节点2,仅仅在节点1上操作的情况下,节点1会常常因为内存不足而崩溃重新启动,预计对于Window 2008而言,2G物理内存实在是太少了,只是这个情况在生产环境应该要好一点。起码都是几十G到几百G的物理内存环境。

今天用的是duplicate方式来创建的物理备库。事实上这是11g新特性,在10g中,我们仅仅能以rman全库备份的方式进行异机恢复,duplicate的优点是能够直接在备库创建online redo logfile,而且能用spifle指定备库所需參数,无需创建全库备份,主库全部文件能够自己主动化地由rman恢复到备库,包含password文件,暂时文件等,还能够用dorecover还原online
redo logfile中的内容,使恢复出来的备库获得最新的数据文件,能够加快DG同步的时间

Tips:

1.使用远程桌面连接方式安装,能够不装VBox的辅助工具。也无需加入共享目录。就能方便的在主机和虚拟机之间方便地复制安装介质或命令。

2.在11g中数据库警告日志文件的位置与10g不同,要注意。不要混淆了,分析日志同步故障要先看警告日志

通用路径:%ORACLE_HOME%\diag\rdbms\DB_UNIQUE_NAME\SID_NAME\trace\alertSID.log

节点1:C:\app\Administrator\diag\rdbms\tc\tc1\trace\alert_tc1.log

备库:C:\app\oracle\diag\rdbms\tcdg\tc\trace\alert_tc.log

Deploy 11.2.0.3 RAC+DG on Windows 2008 R2 Step by Step的相关教程结束。

《Deploy 11.2.0.3 RAC+DG on Windows 2008 R2 Step by Step.doc》

下载本文的Word格式文档,以方便收藏与打印。