ITPub博客

首页 > 数据库 > Oracle > 11g RAC下的dg安装

11g RAC下的dg安装

原创 Oracle 作者:czxin788 时间:2014-12-07 20:53:04 0 删除 编辑

在RAC环境下安装dataguard

--本文根据播布客黄伟视频整理而成

在要安dg的服务器上面需要配置环境变量和系统参数,建立grid和oracle用户。然后在dg服务器上面也安装grid集群软件和oracle软件,但是不用建立库了。

另外。dg服务器可以准备三块盘,一块1G可以用来安装grid软件,一块装数据文件、控制文件等,另外一块做闪回区

 

小提示:在操作的时候,在各个节点用tail –f alert日志,这样即使有错误,也很快定位处理并解决。

 

建立用户

#!/bin/bash

#Purpose:Create 6 groups named 'oinstall','dba','asmadmin','asmdba','asmoper','oper', plus 2 users named 'oracle','grid'.

#Also setting the Environment

#variable for oracle user.

#variable for grid user.

#Usage:Log on as the superuser('root'),and then execute the command:#./1preusers.sh

#Author:Asher Huang

 

echo "Now create 6 groups named 'oinstall','dba','asmadmin','asmdba','asmoper','oper'"

echo "Plus 2 users named 'oracle','grid',Also setting the Environment"

 

 

groupadd -g 1000 oinstall

groupadd -g 1200 asmadmin

groupadd -g 1201 asmdba

groupadd -g 1202 asmoper

useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper -d /home/grid -s /bin/bash -c "grid Infrastructure Owner" grid

echo "grid" | passwd --stdin grid

 

echo 'export PS1="`/bin/hostname -s`-> "'>> /home/grid/.bash_profile

echo "export TMP=/tmp">> /home/grid/.bash_profile 

echo 'export TMPDIR=$TMP'>>/home/grid/.bash_profile

echo "export ORACLE_SID=+ASM">> /home/grid/.bash_profile

echo "export ORACLE_BASE=/u01/app/grid">> /home/grid/.bash_profile

echo "export ORACLE_HOME=/u01/app/11.2.0/grid">> /home/grid/.bash_profile

echo "export ORACLE_TERM=xterm">> /home/grid/.bash_profile

echo "export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'" >> /home/grid/.bash_profile

echo 'export TNS_ADMIN=$ORACLE_HOME/network/admin'  >> /home/grid/.bash_profile

echo 'export PATH=/usr/sbin:$PATH'>> /home/grid/.bash_profile

echo 'export PATH=$ORACLE_HOME/bin:$PATH'>> /home/grid/.bash_profile

echo 'export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib'>> /home/grid/.bash_profile

echo 'export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib'>> /home/grid/.bash_profile

echo "export EDITOR=vi" >> /home/grid/.bash_profile

echo "export LANG=en_US" >> /home/grid/.bash_profile

echo "export NLS_LANG=american_america.AL32UTF8" >> /home/grid/.bash_profile

echo "umask 022">> /home/grid/.bash_profile

 

groupadd -g 1300 dba

groupadd -g 1301 oper

useradd -u 1101 -g oinstall -G dba,oper,asmdba -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle

echo "oracle" | passwd --stdin oracle

 

echo 'export PS1="`/bin/hostname -s`-> "'>> /home/oracle/.bash_profile

echo "export TMP=/tmp">> /home/oracle/.bash_profile 

echo 'export TMPDIR=$TMP'>>/home/oracle/.bash_profile

echo "export ORACLE_HOSTNAME=dg.localdomain">> /home/oracle/.bash_profile

echo "export ORACLE_SID=phydb">> /home/oracle/.bash_profile

echo "export ORACLE_BASE=/u01/app/oracle">> /home/oracle/.bash_profile

echo 'export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1'>> /home/oracle/.bash_profile

echo "export ORACLE_UNQNAME=devdb">> /home/oracle/.bash_profile

echo 'export TNS_ADMIN=$ORACLE_HOME/network/admin'  >> /home/oracle/.bash_profile

echo "export ORACLE_TERM=xterm">> /home/oracle/.bash_profile

echo 'export PATH=/usr/sbin:$PATH'>> /home/oracle/.bash_profile

echo 'export PATH=$ORACLE_HOME/bin:$PATH'>> /home/oracle/.bash_profile

echo 'export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib'>> /home/oracle/.bash_profile

echo 'export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib'>> /home/oracle/.bash_profile

echo "export EDITOR=vi" >> /home/oracle/.bash_profile

echo "export LANG=en_US" >> /home/oracle/.bash_profile

echo "export NLS_LANG=american_america.AL32UTF8" >> /home/oracle/.bash_profile

echo "export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'" >> /home/oracle/.bash_profile

echo "umask 022">> /home/oracle/.bash_profile

 

echo "The Groups and users has been created"

echo "The Environment for grid,oracle also has been set successfully"

 

 

 

 

建立目录

 

#!/bin/bash

#Purpose:Create the necessary directory for oracle,grid users and change the authention to oracle,grid users.

#Usage:Log on as the superuser('root'),and then execute the command:#./2predir.sh

#Author:Asher Huang

 

echo "Now create the necessary directory for oracle,grid users and change the authention to oracle,grid users..."

mkdir -p /u01/app/grid

mkdir -p /u01/app/11.2.0/grid

mkdir -p /u01/app/oracle

chown -R oracle:oinstall /u01

chown -R grid:oinstall /u01/app/grid

chown -R grid:oinstall /u01/app/11.2.0

chmod -R 775 /u01

echo "The necessary directory for oracle,grid users and change the authention to oracle,grid users has been finished"

 

设置相应的权限

 

#!/bin/bash

#Purpose:Change the /etc/security/limits.conf.

#Usage:Log on as the superuser('root'),and then execute the command:#./3prelimits.sh

#Author:Asher Huang

 

echo "Now modify the /etc/security/limits.conf,but backup it named /etc/security/limits.conf.bak before"

cp /etc/security/limits.conf /etc/security/limits.conf.bak

echo "oracle soft nproc 2047" >>/etc/security/limits.conf

echo "oracle hard nproc 16384" >>/etc/security/limits.conf

echo "oracle soft nofile 1024" >>/etc/security/limits.conf

echo "oracle hard nofile 65536" >>/etc/security/limits.conf

echo "grid soft nproc 2047" >>/etc/security/limits.conf

echo "grid hard nproc 16384" >>/etc/security/limits.conf

echo "grid soft nofile 1024" >>/etc/security/limits.conf

echo "grid hard nofile 65536" >>/etc/security/limits.conf

echo "Modifing the /etc/security/limits.conf has been succeed."

 

 

 

登录权限的设置

#!/bin/bash

#Purpose:Modify the /etc/pam.d/login.

#Usage:Log on as the superuser('root'),and then execute the command:#./4prelimits.sh

#Author:Asher Huang

 

echo "Now modify the /etc/pam.d/login,but with a backup named /etc/pam.d/login.bak"

cp /etc/pam.d/login /etc/pam.d/login.bak

 

echo "session required /lib/security/pam_limits.so" >>/etc/pam.d/login

echo "session required pam_limits.so" >>/etc/pam.d/login

 

echo "Modifing the /etc/pam.d/login has been succeed."

 

Profile的设置

 

#!/bin/bash

#Purpose:Modify the /etc/profile.

#Usage:Log on as the superuser('root'),and then execute the command:#./5preprofile.sh

#Author:Asher Huang

 

echo "Now modify the  /etc/profile,but with a backup named  /etc/profile.bak"

cp /etc/profile /etc/profile.bak

echo 'if [ $USER = "oracle" ]||[ $USER = "grid" ]; then' >>  /etc/profile

echo 'if [ $SHELL = "/bin/ksh" ]; then' >> /etc/profile

echo 'ulimit -p 16384' >> /etc/profile

echo 'ulimit -n 65536' >> /etc/profile

echo 'else' >> /etc/profile

echo 'ulimit -u 16384 -n 65536' >> /etc/profile

echo 'fi' >> /etc/profile

echo 'fi' >> /etc/profile

echo "Modifing the /etc/profile has been succeed."

 

 

内核参数的设置

#!/bin/bash

#Purpose:Modify the /etc/sysctl.conf.

#Usage:Log on as the superuser('root'),and then execute the command:#./6presysctl.sh

#Author:Asher Huang

 

echo "Now modify the /etc/sysctl.conf,but with a backup named /etc/sysctl.bak"

cp /etc/sysctl.conf /etc/sysctl.conf.bak

 

echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf

echo "fs.file-max = 6815744" >> /etc/sysctl.conf

echo "kernel.shmall = 2097152" >> /etc/sysctl.conf

echo "kernel.shmmax = 1054472192" >> /etc/sysctl.conf

echo "kernel.shmmni = 4096" >> /etc/sysctl.conf

echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf

echo "net.ipv4.ip_local_port_range = 9000 65500" >> /etc/sysctl.conf

echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf

echo "net.core.rmem_max = 4194304" >> /etc/sysctl.conf

echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf

echo "net.core.wmem_max = 1048586" >> /etc/sysctl.conf

echo "net.ipv4.tcp_wmem = 262144 262144 262144" >> /etc/sysctl.conf

echo "net.ipv4.tcp_rmem = 4194304 4194304 4194304" >> /etc/sysctl.conf

 

echo "Modifing the /etc/sysctl.conf has been succeed."

echo "Now make the changes take effect....."

sysctl -p

 

 

格式化化磁盘

 root用户在dg上格式化/dev/sdb(1G,存放grid集群软件)、/dev/sdc(5G,存放数据文件)、/dev/sdd (10G,存放主库传过来的归档)这3块盘

 

[root@node1 ~]# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable.



Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)



Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-500, default 1): 

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-500, default 500): 

Using default value 500



Command (m for help): w

The partition table has been altered!



Calling ioctl() to re-read partition table.

Syncing disks.

 

 

说明:fdisk /dev/sdb表示要对/dev/sdb磁盘进行格式化,其中,输入的命令分别表示:

n表示新建1个分区;

p表示分区类型选择为primary partition 主分区;

1表示分区编号从1开始;

起始、终止柱面选择默认值,即1和500;

w表示将新建的分区信息写入硬盘分区表。

 

配置asm磁盘组

安装3个ASM RPM软件包时要先安装oracleasm-support-2.1.3-1.el5软件包,其次安装oracleasm-2.6.18-194.el5-2.0.5-1.el5软件包,最后安装oracleasmlib-2.0.4-1.el5软件包。

注意这三个包从官网上下载,并且下载和自己的uname –a的内核的参数一样的包

安装完毕后,执行 rpm -qa|grep asm确认是否安装成功。

 

① 查看ASM服务状态:

[root@node1 ~]# /usr/sbin/oracleasm status

Checking if ASM is loaded: no

Checking if /dev/oracleasm is mounted: no

[root@node1 ~]# 

看到,默认情况下ASM服务并未开启。具体命令和相关参数可以直接执行下述命令来获取:

[root@node1 ~]# /usr/sbin/oracleasm -h

Usage: oracleasm [--exec-path=]  [  ]

       oracleasm --exec-path

       oracleasm -h

       oracleasm -V



The basic oracleasm commands are:

    configure        Configure the Oracle Linux ASMLib driver

    init             Load and initialize the ASMLib driver

    exit             Stop the ASMLib driver

    scandisks        Scan the system for Oracle ASMLib disks

    status           Display the status of the Oracle ASMLib driver

    listdisks        List known Oracle ASMLib disks

    querydisk        Determine if a disk belongs to Oracle ASMlib

    createdisk       Allocate a device for Oracle ASMLib use

    deletedisk       Return a device to the operating system

    renamedisk       Change the label of an Oracle ASMlib disk

    update-driver    Download the latest ASMLib driver

[root@node1 ~]#

② 配置ASM服务:

[root@node1 ~]# /usr/sbin/oracleasm configure -i

Configuring the Oracle ASM library driver.



This will configure the on-boot properties of the Oracle ASM library

driver.  The following questions will determine whether the driver is

loaded on boot and what permissions it will have.  The current values

will be shown in brackets ('[]').  Hitting  without typing an

answer will keep that current value.  Ctrl-C will abort.



Default user to own the driver interface []: grid

Default group to own the driver interface []: asmadmin

Start Oracle ASM library driver on boot (y/n) [n]: y

Scan for Oracle ASM disks on boot (y/n) [y]: y

Writing Oracle ASM library driver configuration: done

[root@node1 ~]# /usr/sbin/oracleasm status

Checking if ASM is loaded: no

Checking if /dev/oracleasm is mounted: no

[root@node1 ~]# /usr/sbin/oracleasm init

Loading module "oracleasm": oracleasm

Mounting ASMlib driver filesystem: /dev/oracleasm

[root@node1 ~]# /usr/sbin/oracleasm configure

ORACLEASM_ENABLED=true

ORACLEASM_UID=grid

ORACLEASM_GID=asmadmin

ORACLEASM_SCANBOOT=true

ORACLEASM_SCANORDER=""

ORACLEASM_SCANEXCLUDE=""

[root@node1 ~]# 

说明:/usr/sbin/oracleasm configure -i命令进行配置时,用户配置为grid,组为asmadmin,启动ASM library driver驱动服务,并且将其配置为随着操作系统的启动而自动启动。

配置完成后,记得执行 /usr/sbin/oracleasm init命令来加载oracleasm内核模块。

2.14.4 配置ASM磁盘

我们安装ASM RPM软件包,配置ASM 驱动服务的最终目的是要创建ASM磁盘,为将来安装grid软件、创建Oracle数据库提供存储。

说明:只需在一个节点上创建ASM磁盘即可!创建完之后,在其它节点上执行/usr/sbin/oracleasm scandisks之后,就可看到ASM磁盘。

接下来,开始创建ASM磁盘:

①   执行/usr/sbin/oracleasm createdisk来创建ASM磁盘,这个过程其实是很快的,因为只是打个标签而已。

[root@node1 ~]# /usr/sbin/oracleasm listdisks

[root@node1 ~]# /usr/sbin/oracleasm createdisk -h

Usage: oracleasm-createdisk [-l ] [-v] 

[root@node1 ~]# /usr/sbin/oracleasm createdisk VOL1 /dev/sdb1

Writing disk header: done

Instantiating disk: done

 

root@node1 ~]# /usr/sbin/oracleasm listdisks

VOL1

 

 

注:sdc和sde先不做成 asm,后面再做。

 

以grid的用户登录。

 

 

 

 

在dg磁盘上也配置磁盘组,上面的vol2还没创建磁盘

 

下面的选择yes,可以忽略不用管它

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

在dg机上不需要建库,只需要安装oracle软件就可以了。

 

 

如果你的备库是rac,那么选择上面的第二项。

 

 


 

 

 

oracle 11G越来越人性化了,如果检查出有错误,会把修复脚本给你,如上图中给的修复脚本。

 

 

 


 

 

 

安装完后,也可以在我们的dg服务器上的查看状态:

 

】

 

 

 

 

 

 

 

ps –elf |grep ora_是查看数据库后台进程

 

 

 

 

下面再配置data 和flash磁盘组

su - grid

asmca

 

 

上面创建了一个data磁盘组

 

 

Exit

 

 

 

再对新的磁盘d分区,用来创建flash磁盘组

 

 

 

 

 

 

 

 

点击Create,再创建flash磁盘组

 

 

 

 

 

 

至此,我们在dg主机上面安装了grid和oracle软件。

 

 

 

在我们的rac1(node1)上新添加块磁盘,格式化成ext3的文件系统,然后挂载到rman_backup目录下:

 

 

 

 

设置成开机挂载

cat /etc/fstab

/dev/sdb1  /rman_backup  ext3  defaults  0 0

 

在dg上面也如上。把一块新盘用fdisk分区,然后用mkfs格式化,挂在 到一个目录下面 rman_backup

在dg服务器上面:

fdisk /dev/sde

n  p 1 回车 回车 w

 

[root@dg ~]# mkfs.ext3 /dev/sde1

[root@dg ~]# mkdir /rman_backup

[root@dg ~]# chown -R oracle.oinstall /rman_backup/

[root@dg ~]# cat /etc/fstab

/dev/sde1     /rman_backup ext3 defaults  0 0

###############################################################

 

 

 

 

注:绿色为rac1,黄色shell为rac2

在rac1主库

 

上述只在一台机器上面执行就行,配置成强制日志模式

 

 

 

 

 

 

上面看到标注的db offline了

 

小知识:RAC的所有实例都关了,那么数据库也就关闭了

 

 下面只在一个节点的rac1实例执行就行

 

 

 

 

 

 

 

 

Ps –elf |gre ora_查看oracle后台进程

 

 

 

下面看到我们并没有配置归档路径

 

如果没有配置上述归档路径,那么我们的归档时放在闪回区的,如下:

Show parameter db_recovery

 

在rac2上确认我们的归档是存放在哪里的:

上述查看结果为没有归档的产生。

上述查看结果为没有归档的产生。

 

在rac1

上述线程1即rac1的当前日志序列号是84

上述是在rac1切日志,然后在rac2上看归档放在哪了,结果为放在了rac2如下的位置:

 

 

上述的thread_1_seq_83的意思是第一个线程的日志序列号是83的日志归档。

 

同理,我们在rac2上面切换一下日志,然后到rac1看归档情况:

(绿色代表rac1,黄色代表RAC2)

 

 

上述可以看到线程2的当前日志序列号是62

 

在rac2看产生的归档:

 

 

备份数据库的工作在rac1上面做,因为我们在rac1上面安装了一块磁盘用来放备份文件的的,正好能用上,即mount –t ext3 /dev/sdb1 /rman_backup这个目录的空间;

 

 

 

在rac1上

 

 

 

 

 

 

 

run{

allocate channel c1 type disk;

allocate channel c2 type disk;

allocate channel c3 type disk;

allocate channel c4 type disk;

backup database format '/rman_backup/full_%U.bak';

backup archivelog all format '/rman_backup/arc_%U.bak';

release channel c1;

release channel c2;

release channel c3;

release channel c4;

}

 

上述,要注意数据库文件和日志归档文件都要备份到同一个目录 /rman_backup,如果不是同一个目录会报错。

上述如果不指定format,备份文件就会存在log_archive_dest指定的位置。如果没有设置log_archive_dest参数,那么就会存放在闪回区里面。闪回区的位置通过show parameter db_recovery来查看。

###################################################

下面备份有错误,不要模仿

上述如果不写format ‘/rman_backup’,就会备份到闪回区里面去。

上面的plus archivelog 其实没指定备份位置,就会备份到闪回区里面。

结果:如果用上图中的方法来备份会备份失败,黄伟解说是由于数据库备份到了/rman_backup,而archivelog备份到了闪回区,两个位置不一致导致的备份失败

。解决办法:数据库文件和日志归档备份到一个目录下。

 

####################################################################

 

接下来

 

在rac1上创建备库dg的控制文件

 

接下来

在rac1上:

 

 

接下来

在rac1

 

下面看到创建了口令文件

 

在rac2上:

 

测试rac两个节点sys是否通的

在rac2

 

同样:

在rac1上

 

 

 

首先:

 

把如下/rman_backup里面的备份拷贝到dg服务器上面的/man_bakcup目录下:

 

################################################################

 

接下来

在dg上,主要下面的oracle_sid=phydb

 

可以用orapw创建dg的口令文件

当然最好是从主库拷贝口令文件到dg数据库上,这样不容易出错,如下:

 

接下来

在dg服务器上面:

cp /rman_backup/initphydb.ora   $ORACLE_HOME/dbs

然后修改nitphydb.ora,修改后的结果如下:

上面的db_create_file_dest=’DATA’表示我们采用的是OMF管理的。

 

 

 

 

需要添加的参数:

*.fal_client='phydb'

*.fal_server='devdb1','devdb2'

*.log_archive_config='dg_config=(devdb,phydb)'

*.db_file_name_convert='+DATA/devdb/','/+DATA/phydb/'

 

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=phpdb'

*.log_archive_dest_2='service=devdb1 valid_for=(online_logfiles,primary_role) db_unique_name=devdb'

*.log_archive_format='ARC_%t_%S_%r.arc'

*.log_file_name_convert='+DATA/devdb/','+DATA/phydb/'

*.standby_file_management='AUTO'

*.undo_management='auto'

*.service_names='phydb'

 

dg参数文件最终结果为:

 

phydb.__db_cache_size=188743680

phydb.__db_cache_size=176160768

phydb.thread=2

phydb.instance_number=1dd

phydb.instance_number=2

*.log_archive_dest_1=''

phydb.__db_cache_size=188743680

phydb.__db_cache_size=176160768

phydb.__java_pool_size=4194304

phydb.__java_pool_size=4194304

phydb.__large_pool_size=4194304

phydb.__large_pool_size=4194304

phydb.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

phydb.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

phydb.__pga_aggregate_target=339738624

dd

phydb.__pga_aggregate_target=339738624

phydb.__sga_target=503316480

phydb.__sga_target=503316480

phydb.__shared_io_pool_size=0

phydb.__shared_io_pool_size=0

phydb.__shared_pool_size=306184192

phydb.__shared_pool_size=293601280

phydb.__streams_pool_size=0

phydb.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/phydb/adump'

*.audit_trail='db'

*.cluster_database=false

*.compatible='11.2.0.0.0'

#dg备库如果直接用*.control_files='+DATA/phydb/controlfile这个目录会报错,因为备库采用的是omf管理,备库会自动到+data磁盘组下面创建一个实例名或者db_unique_name名字的文件夹,然后再在其下创建controlfile文件夹,这时候就和我们规定的控制文件名controlfile冲突了,所以改成如下:

*.control_files='+DATA/phydb/controlfile/cont.ctl'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='devdb'

*.db_recovery_file_dest='+FLASH'

*.db_recovery_file_dest_size=5368709120

*.diagnostic_dest='/u01/app/oracle'

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

*.memory_target=842006528

*.open_cursors=300

*.processes=150

*.remote_listener='scan-cluster.localdomain:1521'   --删除这行

*.remote_login_passwordfile='exclusive'

*.thread=1

*.undo_tablespace='UNDOTBS1'

#下面是添加的行

*.fal_client='phydb'

*.fal_server='devdb1','devdb2'

*.log_archive_config='dg_config=(devdb,phydb)'

*.db_file_name_convert='+DATA/devdb/','+DATA/phydb/'

*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=phydb'

*.log_archive_dest_2='service=devdb1 valid_for=(online_logfiles,primary_role) db_unique_name=devdb'

*.log_archive_format='ARC_%t_%S_%r.arc'

*.log_file_name_convert='+DATA/devdb/','+DATA/phydb/'

*.standby_file_management='auto’

*.undo_management='auto'

*.service_names='phydb'

*.db_unique_name='phydb'

 

注意:+DATA/phydb/前面没有/啊, 我做实验笔误restore database报错害的好苦

 

 

附上主库的原参数文件:

[root@dg rman_backup]# vi initphydb.ora

devdb2.__db_cache_size=188743680

devdb1.__db_cache_size=176160768

devdb1.__java_pool_size=4194304

devdb2.__java_pool_size=4194304

devdb1.__large_pool_size=4194304

devdb2.__large_pool_size=4194304

devdb1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

devdb2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

devdb2.__pga_aggregate_target=339738624

devdb1.__pga_aggregate_target=339738624

devdb2.__sga_target=503316480

devdb1.__sga_target=503316480

devdb1.__shared_io_pool_size=0

devdb2.__shared_io_pool_size=0

devdb1.__shared_pool_size=306184192

devdb2.__shared_pool_size=293601280

devdb1.__streams_pool_size=0

devdb2.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/devdb/adump'

*.audit_trail='db'

*.cluster_database=true

*.compatible='11.2.0.0.0'

*.control_files='+DATA/devdb/controlfile/current.260.863805275','+FLASH/devdb/controlfile/current.256.863805277'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='devdb'

*.db_recovery_file_dest='+FLASH'

*.db_recovery_file_dest_size=5368709120

*.diagnostic_dest='/u01/app/oracle'

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

devdb1.instance_number=1

devdb2.instance_number=2

*.log_archive_dest_1=''

*.memory_target=842006528

*.open_cursors=300

*.processes=150

*.remote_listener='scan-cluster.localdomain:1521'

*.remote_login_passwordfile='exclusive'

devdb2.thread=2

devdb1.thread=1

devdb2.undo_tablespace='UNDOTBS2'

devdb1.undo_tablespace='UNDOTBS1'

 

在dg服务器上面创建目录:

su – oracle

mkdir  –p  /u01/app/oracle/admin/phydb

mkdir /u01/app/oracle/admin/phydb/adump

mkdir /u01/app/oracle/admin/phydb/bdump

 

再在dg服务器上面创建磁盘组的目录:

 

注:上述的asmcmd –p 的意思是把我当前的目录给列出来。

 

 

cd data

提示:上面创建了参数文件中指定的如下目录

 

接下来:

 

 

 

 

 

完整例子:

DEVDB =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.72.16.232)(PORT = 1521))  --在rac连个实例上这里面可以写scanip的域名地址,但是在dg上就要写scanip的地址,要不然dg解析不了域名(因为没有配)。--这里是rac的scanip

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = devdb)

    )

  )

 

 

devdb2 =

  (DESCRIPTION =

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

    (CONNECT_DATA =           --这里是rac2的vip

      (SERVER = DEDICATED)

      (SERVICE_NAME = devdb)

      (INSTANCE_NAME = devdb2)

    )

  )

 

devdb1 =

  (DESCRIPTION =

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

    (CONNECT_DATA =    --这里是rac1的vip

      (SERVER = DEDICATED)

      (SERVICE_NAME = devdb)

      (INSTANCE_NAME = devdb1)

    )

  )

 

phydb =

  (DESCRIPTION =

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

    (CONNECT_DATA =        --这里是dg的ip地址

      (SERVER = DEDICATED)

      (SERVICE_NAME = phydb)

    )

  )

                         

上述的tnsname.ora的文件内容要在两个rac节点和dg的内容一模一样。

 

经过我的实验,上面的devdb1和devdb2可以不配

 

注:

node1-> cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

#127.0.0.1               localhost

127.0.0.1 localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

#node1

10.72.16.228            node1.localdomain               node1

10.72.16.230            node1-vip.localdomain           node1-vip

192.168.3.228           node1-priv.localdomain          node1-priv

# node2

10.72.16.229           node2.localdomain               node2

10.72.16.231            node2-vip.localdomain           node2-vip

192.168.3.229           node2-priv.localdomain          node2-priv

# scan-ip

10.72.16.232            scan-cluster.localdomain        scan-cluster

node1->

 

 

测试tnsname.ora是否能连接

 

把第一行的scanip改成ip的形式

 

上述看到起的空实例也能连接数据库,说明只要有数据库软件,就能远程连接数据库。

 

上述每个节点都用上述三种方式测试其连通性:

 

注意:如果在dg服务器上面报如下错误:

service_names                        string      devdb

SQL> conn sys/oracle@devdb as sysdba

ERROR:

ORA-12545: Connect failed because target host or object does not exist

Warning: You are no longer connected to ORACLE.

 

解决办法:

登录rac1或者rac2:

alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.72.16.232)(PORT=1521))))';    --使这里的HOST改成scanip。

 

然后再在dg上面测试连接成功:

SQL> conn sys/oracle@devdb as sysdba

Connected.

 

 

 

至此:tnsnames.ora文件配置完成了。

 

##############################################################

 

小知识:local_listner的作用:

 RAC Local_listener、一条Oracle的阑尾

    先看一段对话:

   

    小菜鸟问:

    我在参数文件中设置了local_listener='listener1',然后启动数据库有报错.

    SQL> startup

    ORA-00119: invalid specification for system parameter LOCAL_LISTENER

    ORA-00132: syntax error or unresolved network name 'listener1'

    语法不对吗?

   

    老鸟回:

    要在服务器上的tnsnames.ora里做设置,来映射listener1

    类似这样:

    listener1 =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 虚拟ip)(PORT = 1521))

    或者你直接这么设置:

    local_listener=' (ADDRESS = (PROTOCOL = TCP)(HOST = 虚拟ip)(PORT = 1521))'

    小菜鸟眼神流露着迷茫、弱弱的问:

    这样做后listener1就是系统默认的监听呢?还是告诉pmon把注册信息注册到listener1上呢?

    老鸟回:

    pmon注册

    小菜鸟有点明白了、又问:

    谢谢!加了后确实可以启动数据库了,但是不明白这内部是怎么运做的,请指教.为什么加了之后就可以启动?

    老鸟回:

    因为它会去服务端的tnsnames.ora里找啊,找不到当然解析不了啊、然后报错:

    ORA-00132: syntax error or unresolved network name 'listener1'

    在RAC环境下、客户端连接时、有时会收到 ORA-12545: 因目标主机或对象不存在, 连接失败

    这个错误的处理方法也是一样的

    。。。

    故事到这里就谢幕了、

    Local_listener有两个作用:

    ● PMON动态注册非标端口

    动态注册默认Oracle只能注册1521端口,如果你的端口是1522或者其他,Oracle是没办法知道的

    那么只要告诉ORACLE Local_listener就可以

    ● RAC 负载均衡

    RAC负载均衡有2种,一种是CLIENT,一种是SERVER

    所谓CLIENT是指直接在tnsnames.ora中配置LOAD_BALANCE=yes参数

    这种类型主要是按照连接数,或者说概率来连接Oracle

    如果不配置可能也不会出错、

    还有一种情况是通过SERVER、那么 Local_listener是有作用的

    因为Oracle 会探测服务器负载,谁负载低就去哪里

    所以当一个进程进入了其中一个节点,这个时候实际还没连接

    服务器会探测哪个节点负载低,如果是本地节点直接通过 Local_listener 连接

    如果是别的机器,因为Oracle不知道其他节点怎么走,所以 Remote_listener就有作用了

    配置local_listener的相关步骤:

    ① 在listener.ora中设置监听端口

    [plain]

    Think =

    (description =

    (address = (protocol = tcp)(host = loveoracle)(port = 1522))

    )

    lsnrctl start Think 启动listener

    ② 在tnsname.ora中设置net service name

    [plain]

    Think =

    (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = loveoracle)(PORT = 1522))

    )

    (CONNECT_DATA =

    (service_name = orcl)

    )

    )

    ③ 然后才可以设置local_listener

    alter system set local_listener=Think;

    ④ 向数据库注册listener

    alter system register;

    其实、 Local_listener 是为了解决一个BUG而设置的→→主要就是VIP

    这是Oracle的阑尾,早晚要割掉!

    我的环境、很多时候是没有设置

    Local_listener 即使要写,也是写的VIP的地址, 10g,11g均是如此

 

 

 

 

#########################################

 

 

 

接下来:

在dg上:


 

 

 

 

 

在dg上su -  oracle

 

 

 

这时候在dg服务器上,list backup可以看到备份的文件,因为这个命令读的内容是从控制文件读取的,控制文件里面记录了备份集的位置信息,如果想改变备份集的信息,可以用catalog start with ‘’;通过list backup命令也就看到了控制文件里面记录的备份集目录在哪里。

 

下面在dg磁盘组中检测一下,看到产生了cont.ctl控制文件

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

注:笔者在备库还原控制文件遇到了错误,如下:

RMAN> restore standby controlfile from '/rman_backup/stanby_0epojv93_1_1.ctl';

 

Starting restore at 2014/11/29 18:31:59

using channel ORA_DISK_1

 

channel ORA_DISK_1: restoring control file

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

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

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

RMAN-03002: failure of restore command at 11/29/2014 18:32:00

ORA-19870: error while restoring backup piece /rman_backup/stanby_0epojv93_1_1.ctl

ORA-19504: failed to create file "+DATA/phydb/controlfile/cont.ctl"

ORA-15012: ASM file 'phydb/controlfile/cont.ctl' does not exist

ORA-17502: ksfdcre:5 Failed to create file +DATA/phydb/controlfile/cont.ctl

ORA-15081: failed to submit an I/O operation to a disk

 

解决办法:

         ORA-15012: ASM file 'phydb/controlfile/cont.ctl' does not exist

ORA-17502: ksfdcre:5 Failed to create file +DATA/phydb/controlfile/cont.ctl

                   导致这个错误的原因是RESTORE操作不会自动创建非数据库所属的目录。由于standby数据库和primary数据库的db_unique_name并不相同,因此实际RESTORE之后,数据文件会放在standby数据库db_unique_name对应的db_unique_name名称phydb目录下,创建controlile目录,以及根据控制文件内容创建phydb目录下的DATAFILE、ONLINELOG目录,RESTORE操作会自动创建。由于笔者未在dg数据库中指定db_unique_name=’phydb’,导致报错,加一下这个参数就行了。

 

ORA-15081: failed to submit an I/O operation to a disk

解决办法:

1. oracle用户要属于asmdba组,不然无法发现磁盘组

2. $ORACLE_HOME/bin/oracle 文件的所有者和权限不对

执行:

$GRID_HOME/bin/setasmgidwrap O=$ORACLE_HOME/bin/oracle  (注意要先把库down下来)

正确的oracle 文件权限为示例如下:

cd $ORACLE_HOME/bin/oracle

[oracle@vm05 bin]$ ls -l oracle

-rwsr-s--x 1 oracle asmadmin 210824714 Aug 15 16:09 oracle

 

suid:只能设置在二进制文件上,意思是其他用户在执行有suid权限的文件时,会把身份变成文件所有者的身份,身份的切换只在调用命令的过程中有效,调用完了,身份又回来了

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

在dg数据库上:

RMAN> alter database mount;

database mounted

 

下面的通道顺序无所谓:

 

在备库上创建standby logfile日志文件的目的是:将来备库可以用standby logfile接收主库传过来的日志并在备库做恢复。这个备库standbylogfile的大小一定是和主库日志一样大的。另外,备库standby logfile日志组个数:

官方说法:

备库standby logfile日志组的个数=(每个实例下online logfile日志组的个数+1)*线程数

比如双节点rac,那么就有两个线程,如果每个线程的日志组个数是2,那么就是3*2,也就是说你的dg备库要创建6个standby日志文件,并且要和你的线程对应。

 

在dg服务器上:

 

上面看到了控制文件和数据文件的位置是参数文件指定的位置:

*.db_file_name_convert='+DATA/devdb/','+DATA/phydb/'

 

 

查看dg的相关信息:如角色

 

 

Select * from v$logfile信息来源于控制文件的,所以这时候我们在dg服务器上通过v$logfile.thread可以看到线程有1和2,通过上述原因,相信大家明白为什么我们的单实例dg数据库会有两个线程了吧。

注:一般一个实例一个线程

 

上面看到每个实例有2个日志组。

 

在dg上查看standby log信息:

 

根据以上信息,我们应该在dg上面创建(2+1)*2=6个standby日志组

所以,下面开始在dg服务器上第一个线程创建3standby log:

 

注意:上面的50m是和主库的日志大小(通过查询主库的v$log.bytes)一样的。

 

然后在dg上面创建第二个线程的3个standby log日志:

 

 

在dg上:

Select * from v$logfile;

 

 

上面看到,每组redo日志都存放到了两个地方:data和flash磁盘组,表示的是日志每一组都有冗余。

 

接下来,把主库日志传递到备库并且在备库应用这些日志

下面先做如下网络连通性的测试:

在rac1、rac2和dg上全都测试:

上面能看到现在连接物理备库phydb也通了。

 

接下来,把主库日志传递到备库并且在备库应用这些日志

 

黄色代表rac2,绿色代表rac1

上面我们看到rac2没有配置归档位置,那么归档日志就存放在闪回区

 

上述在rac2中我们看到归档位置在闪回区里面。

 

下面我们在rac1主库上面配置可以将主库日志传送到物理备库的参数:

上述sid’*’表示是两个rac节点的spfile同时改。db_unique_name=’phydb’表示的是:主库rac往物理备库phydb传日志。

 

 

在rac2上也能看到此参数了

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

小插曲:

如果上面我们看到rac1上面并没有使用spfile,那么alter system set log_archiv_dest_2的值就不会写入spfile。

那么结果就是在rac1上执行的

alter system set log_archive_dest_2='service=phydb lgwr sync valid_for=(online_logfiles,primary_role) db_unique_name=phydb' sid='*';

在rac2上并看不到log_archive_dest_2的值,如下:

在rac2上面:

上面我们看到我们的rac2并没有使用设置log_archive_dest参数,原因是由于rac1使用的是pfile,上述设置的参数没有生效。改成spfile再重新设置后就生效了。如下:

所以我们的rac1和rac2要使用spfile,不要使用pfile。

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

然后我们到我的dg数据库上查看发现主库的归档还没有传递到备库上呢,因为我们还有个参数dg_config没有配置:

 

下面来配置这个参数:

在rac1上面:

 

上面格式为:dg_config=(主库名,备库名)

 

配置完成后要到两个rac节点查看是否生效:show parameter log_archive_config

 

 

下面我们再到物理备库dg上面查看归档日志传过来了吗:

 

我们看到在物理备库dg上面,主库rac1(线程1)上面的日志87、88、89传递过来了。但是没有rac2(线程2)的归档日志。

 

下面我们再看看我们主库的日志情况:

在rac2上(rac1上也行)

通过上面我们看到主库的rac1上的日志87、88、89传递到了备库了,但是rac2上日志序列号为67就没有传过去。

为了让rac2上日志序列号为67传过去,我们在rac2做一次日志切换:

 

 

 

我们再到dg服务器上面查看,发现rac2的68日志就传递过来了:

小插曲:

如果你发现你的rac2的归档日志没有传送到dg服务器上面,那么请查看你的告警日志,是不是有这样的信息:

node2-> tail -f alert_devdb2.log   发现该日志一直在动态报该错误

上面ora 16191的错误表示出现在你的口令文件上,或者remote_login_passwordfile参数给的不对。

解决办法:

黄伟说:把rac2 sys用户口令改一下(alter sys identified by oracle),然后把rac2的spfile重新拷贝到物理备库上面,过一段时间再看物理备库,就发现rac2的日志就传递到了dg物理备库上了。

我的解决办法:我把rac2的口令文件分别拷贝给了rac1和dg后,回到dg上面查看,list archivelog all发现rac2的归档也传递到了dg服务器上面。所以,做dg的口令文件最好拷贝,不要用命令改成一样的。

步骤如下:

在rac2上:

node2->  cd /u01/app/oracle/product/11.2.0/db_1/dbs

node2-> scp  orapwdevdb2  dg: /u01/app/oracle/product/11.2.0/db_1/dbs

node2-> scp  orapwdevdb2  rac1: /u01/app/oracle/product/11.2.0/db_1/dbs

    

在dg上:

dg->  cd /u01/app/oracle/product/11.2.0/db_1/dbs

dg-> mv orapwphydb orapwphydb.bak

dg-> cp orapwdevdb2 orapwphydb

 

在rac1上:

node1->  cd /u01/app/oracle/product/11.2.0/db_1/dbs

 

node1-> cp orapwdevdb2 orapwdevdb1  

###################################################################

接下来,在dg查看日志应用情况:

发现日志没有应用

 

下面告诉物理备库应用归档日志,在dg上面执行下面语句

 

稍微等一会,就会发现物理备库应用归档日志了

 

 

Datagurad会自动把主库断档的日志一并的传递到备库

 

查看物理备库状态:

 

在dg上面:将dg数据库由Mount状态转成open,并且应用日志。这种情况一般用于dg数据块作为报表查询。

然后在备库打开的情况下应用归档日志:

 

 

 

在11g后,备库可以以read only的状态打开数据库,并且同时应用日志。这是11g的新特性。这样备库就可以作为报表查询系统了。

 

 

现在我们已经把dataguard的基本框架搭建起了。

 

下面的内容是测试我们的dataguard的功能。

 

 

 

 

在物理备库上:

 

上面就是11g新特性叫做active  dg,即一边read only,一边应用日志。

 

我们主要测试dg的文件同步和数据同步。

文件同步指的是主库建立或者删除表空间,物理备库也跟着创建或者删除表空间。

数据同步:就是在主库对一张表做dml或者ddl,备库也跟着做

 

下面我们先测试文件同步:

在rac1上:

上面这个db_create_file表示使用的是omf,创建的文件都放到data磁盘组。

 

在dg上可以看到主库建立的表空间同步到物理备库上了。

 

 

下面测试数据同步:

在主库rac1上

 

然后到备库看到这个表出来了。

然后分别在rac1和rac2上对这表进行insert数据,要commit,然后到物理备库查看到数据已经同步过来了。

 

然后我们在测试删除数据:

 

注:物理备库以只读方式打开后,物理备库只能进行select,不能进行dml语句。

 

 

 

 

 

 

####################################

 

下面测试主备库进行切换

 

上图中,如果备库只做备份功能,而不做主备切换,那么在主库上面配置fal_client和fal_server是没有意义的。

反之,想进行主备切换,主库必须配置fal_client和fal_server这两个参数,要不如果主库不配置fal_client和fal_server这两个参数或者没有在原来的主库创建standby log,那么将来主库切成了备库时是可以切换成功的,但是如果你还想再切换去,这时候就切不回去了。

具体配置方法如下:

在rac主库上:

 

在主库rac1上,做如下:

 

 

 

 

Fal_client:表示将来谁去取日志

Fal_server:表示去哪去取日志。

 

在rac2做如下:

 

 

 

 

 

主库创建standby logfile的方法,和在物理备库创建standby logfile的方法是一样的,见下面:

 

 

在rac1上查看:

 

 

下面在主库上创建standby log:

上面日志组的编号不要重复,要按顺序。Rac1和rac2 Standby log日志的大小要和将来主库(即现在的备库)日志大小一致

 

~~~~~~~~~~~~

小知识:备库standby logfile日志组的个数=(每个实例下online logfile日志组的个数+1)*线程数

~~~~~~~~~~~~

主库创建完后,看一下standbylog

 

 

 

 

上面这三个参数在主库上面改,写入到spfile,然后重启数据库使之

生效。

把主库的standby_file_management改成auto功能就是即将来主库创建数据文件,备库也自动创建,如果不设置这个参数,将来备库不会自动创建。

 

在主库

 

 

别忘了设置alter system set standby_file_management='AUTO' sid='*' scope=spfile;

 

 

 

好了,下面我们总结一下上面所做的主备切换前的准备工作:

 

 

下面开始正式实施主备切换

 

上面是总结一下主备切换的具体步骤。如果切换错误,会把你的整个环境破坏,所以关键点要小心。

注意,如果你的备库也是是rac,那么在主备切换之前,要把物理备库的其他节点实例停掉,只留一个物理备库的实例。

 

在rac主库先停止rac2,只留rac1,然后先把主rac1切成备库。然后再把物理备库切到主库的角色。

 

好了,下面开始我们的主备切换了,激动人心的时刻到了。

 

 

在rac1主库上查看一下状态:

 

在备库上查看一下状态:

上面我们看到备库是not allowed,不让转换,这个没有关系,一会我们给加上相关的参数就好了。

 

停掉主库rac2的实例:

 

 

下面把rac1切成备库:

上面的with session shutdown的意思是把主库切成备库后再把自己给shutdown了。

 

这时的备库也是physical database的状态

 

现在是两个库都是物理备库的状态,群龙无首。

 

下面在dg库上把它切成主库:

 

接下来:

 

把rac的两个库都停下来

 

 

 

接下来,把rac数据库启动到mount状态:

 

 

下面开始恢复我的物理备库(原rac),让我们新的物理备库(原rac)应用日志

在rac1或rac2上:

 

把我们的原dg open:

 

 

下面在rac备库上取消日志应用:(取消日志应用备库才能open)

 

查看我们rac备库的状态:

然后我们把rac备库open起来:

Alter databae open;

然后看到我们的rac1状态是read only,rac2是mount

 

 

我们把rac2open

 

现在我们的rac备库只是打开了,没有应用日志,所以两个库还不能同步。

 

现在我们再查看到原来的dg库现在成了主库:

在原dg上查看:

 

 

 

测试两个库的数据同步:

在新的主库上(原dg):

 

然后到我们的rac备库上,查看不到刚建立的表;

 

在rac库上(现在的rac是备库)打开日志应用后就会查看到了我们在主库(原来的dg)上建立的表


 

现在在查看rac:

上面看到变成了read only with apply 。

 

 

现在主备切换完成了

###################################

主备还原切换

最后一部分内容就是我们再把主备库再恢复到原来的主备关系:即还原成以前的rac是主库,dg是备库。

 

 

现在查看单实例dg是主库时的状态:

 

在rac备库:

 

连接到rac2上

 

rac只能留一个实例是open的,其他实例需要都关掉。这里面留rac1是open的

 

在rac1上确认rac2状态已经关闭(只有rac1一条记录):

 

在dg 上查看并切换(现在是主库状态):

 

在rac1上:

现在可以看到都两个库都变成physical standby,进入了群龙无首的状态。

 

在rac1上(先停止日志应用,然后再切换成主库;当然也可以不停止日志应用而是直接切换成主库,不过这时会很慢):

 

 

上面看到rac已经又变回主库了

 

在rac1上:

 

 

在rac2上

 

 

现在看到rac两个实例都变成read write了,并且rac成了主库。注意上面看到switchover_Status 状态是resoveable gap,这个日志归档断档数据库会自己解决,我们不用理会。

 

 

在我们的dg上:

在dg上我们看到他已经变成了物理备库,起switchove status状态是recovery needed,需要恢复。

 

既然需要恢复,那么我们就在dg上恢复,如下:

如果在dg上执行上述日志应用报错的话,就把dg数据库重启一下再执行上述命令就好了。

 

在dg上查看,已经变成了read only with apply模式了

 

最后测试主备库数据是否同步:

在rac上创建张表,然后到备库dg上看是传过来了。

 

 

 

完


 

 

 





附件列表

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28916011/viewspace-1359947/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 11g rac的维护
请登录后发表评论 登录
全部评论

注册时间:2014-06-03

  • 博文量
    233
  • 访问量
    858440