oracle rac +standby

Oracle dataguard

1           Dataguard架构

Dataguard架构按照功能分为3部分:

日志发送

日志接收

日志应用

1.1      日志发送

日志发送由primary database的LGWR和ARCH进程完成,两者对数据保护能力和系统可用性有很大的区别

1.1.1  使用ARCH进程

(1)       primary database不断产生redo log,这些日志被LGWR进程写到联机日志;

(2)       当一组联机日志写满时,就会发生日志切换,并触发本地归档;

(3)       完成本地归档之后,联机日志就可以被覆盖复用

(4)       归档日志发送到standby,在standby上应用

ARCH进程最大的问题就是:primary database只有在发生归档时才会发送日志到standby database,如果primary database发送宕机,联机日志中的redo内容就会丢失,因此,ARCH进程无法避免数据丢失的问题。

缺省情况下,primary用的就是ARCH进程。

1.1.2  使用LGWR进程的SYNC方式

Primary database产生的redo日志要同时写到日志文件和网络,必须都成功,primary database上的事务才能提交

使用LGWR进程必须明确指定,例如:

LOG_ARCHIVE_DEST_2=’SERVICE=STANDBY LGWR SYNC NET_TIMEOUT=30’

NET_TIMEOUT代表多次时间网络发送没有响应,LGWR进程会抛出错误。

1.1.3  使用LGWR进程的ASYNC方式

Primary database产生redo日志后,LGWR把日志同时提交给日志文件和本地LNS进程,但是LGWR进程只需成功写入日志文件就可以,不必等待LNSn进程的网络进程传送成功

例如:

LOG_ARCHIVE_DEST_2=’SERVICE=STANDBY LGWR ASYNC’

1.2      日志接受

Standby的归档日志目录:

归档日志目录优先使用参数:STANDBY_ARCHIVE_DEST

如果某个LOG_ARCHIVE_DEST_N参数明确定义了VALID_FOR=(standby_logfile,*)选项,则使用这个参数指定的目录。

如果STANDBY_ARCHIVE_DEST和LOG_ARCHIVE_DEST_N都没有配置,则使用STANDBY_ARCHIVE_DEST的默认值:$ORACLE_HOME/dbs/arch

1.3      日志应用

根据redo apply发生的时间又可以分成两种,一种是实时应用,这种方式必须使用standby redo log。另一种是归档时应用。

(1)如果是physical standby,可以使用下面的命令启用real-time

Alter database recover managed standby database using current logfile;

(2)如果是logic standby 可以使用下面命令启用real-time

Alter database start logical standby apply immediate

(3)查看是否使用real-time apply

Select recovery_mode from v$archive_dest_status;

1.4      数据保护模式

(1)最大可用

(2)最大保护

(3)最大性能

(4)查看保护模式

SQL> select protection_mode,protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

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

MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

1.5      自动裂隙检测和解决

当primary database的某些日志没有成功发到standby database,这就发生了归档裂隙,缺失的这些日志就是裂隙。Dataguard能够自动检测解决,不需要dba的介入,这就需要配置两个参数:FAL_CLIENT、FAL_SERVER(FAL是fetch archive log的缩写)

除了自动日志缺失解决,也可以dba手工解决:

拷贝缺失的归档日志,进行注册:

alter database register logfile ‘logfilename’;

2           rac和standby配置实例

2.1      rac primary和single standby

2.1.1  实施环境:

主库:oracle 10g rac+asm

备库:oracle 10g单实例+asm


主库节点1


主库节点2


备库


主机名


rac1


主机名


rac2


主机名


std


Ip


192.168.204.8


Ip


192.168.204.9


Ip


192.168.204.20


数据库名


rac


数据库名


rac


数据库名


std


数据库实例


rac1


数据库实例


rac2


数据库实例


std

该过程主要将修改主库和备库的初始化启动文件等配置信息,通过RMAN工具从主库备份数据库,再通过RMAN工具从备库恢复数据,最后等待归档日志的正常传输,实现数据库的同步。

要点:

如果Standby是rac,则接受日志和恢复日志可以不是一个实例,single instance 的日志只发送到rac的一个实例。

2.1.2  修改主库,将主库改为归档模式及force logging状态

1、  关闭所有节点的实例服务

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

2.1.3  在其中一个节点

SQL> sqlplus / as sysdba

SQL> startup mount

SQL> alter database archivelog;

SQL> alter database open;

SQL> select log_mode from v$database;

LOG_MODE

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

ARCHIVELOG

2.1.4  将rac数据库修改为force logging

SQL> alter database force logging;

Database altered.

SQL> select inst_id,force_logging from gv$database;

INST_ID FOR

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

1 YES

2 YES

2.1.5  配置文件及备份文件

1、  在 RAC1 上创建备份目录/u01/oracle/rman_bak

2、  在std上创建相同的备份目录,以便rman能够顺利恢复

3、  下面通过 sqlplus 创建 pfile  initstandby.ora

SQL> show parameter spfile

NAME                                 TYPE        VALUE

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

spfile                               string      +DATA/rac/spfilerac.ora

两个节点用一个spfile

SQL> show parameter db_unique_name

NAME                                 TYPE        VALUE

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

db_unique_name                       string      rac

SQL> CREATE PFILE=‘/u01/oracle/rman_bak/initstandby.ora‘ FROM SPFILE;

File created.

2.1.6  在主库和备库上修改oracle网络服务

1、修改RAC1和RAC2的oracle的tnsnames.ora

[[email protected] admin]$ vi /u01/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora

增加:

standby =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.204.20)(PORT = 3173))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = standby)

)

)

2.1.7  修改Standby的tnsnames.ora和listner.ora配置

从primary拷贝过来,增加:

standby =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.204.20)(PORT = 3173))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = standby)

)

)

4、  修改Standby的oracle的.bash_profile文件

export ORACLE_SID=standby

export ORACLE_BASE=/u01/oracle

export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export PATH=$ORACLE_HOME/bin:$PATH

umask 022

2.1.8  新建恢复需要的目录

mkdir -p /u01/oracle/admin/standby/adump

mkdir -p /u01/oracle/admin/standby/bdump

mkdir -p /u01/oracle/admin/standby/cdump

mkdir -p /u01/oracle/admin/standby/dpdump

mkdir -p /u01/oracle/admin/standby/hdump

mkdir -p /u01/oracle/admin/standby/udump

mkdir -p /u01/oracle/admin/standby/pfile

2.1.9  创建监听

tnsping

2.1.10             配置参数文件和密码文件

cd /u01/oracle/rman_bak/

将standby上从RAC1上拷贝过来的文件initstandby.ora拷贝至$ORACLE_HOME/dbs下。

通过指令创建orapwstandby.ora,该文件包含的是sys的用户密码,注意密码一定要保证与主库一致。

[[email protected] rman_bak]$ cd /u01/oracle/product/10.2.0/db_1/dbs/

[[email protected] dbs]$ orapwd file=orapwstandby password=sys

主库:

SQL> show parameter db_unique_name

NAME                                 TYPE        VALUE

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

db_unique_name                       string      rac

SQL> select file_name from dba_data_files;

FILE_NAME

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

+DATA/rac/datafile/users.259.868180115

+DATA/rac/datafile/sysaux.257.868180115

+DATA/rac/datafile/undotbs1.258.868180115

+DATA/rac/datafile/system.256.868180113

+DATA/rac/datafile/undotbs2.264.868180247

2.1.10.1      修改主库参数文件

Rac原有参数不变,增加以下参数

SQL> ALTER SYSTEM SET service_names=rac scope=both;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1=‘LOCATION=+RECV/rac/archivelog valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac‘ scope=both;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG=‘DG_CONFIG=(rac,standby)‘ scope=both;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_3=‘service=standby valid_for=(online_logfiles,primary_role) db_unique_name=standby‘ scope=both;

SQL> ALTER SYSTEM SET db_file_name_convert=‘+DATA/rac/datafile/‘,‘+DATA/standby/datafile/‘,‘+DATA/rac/tempfile/‘,‘+DATA/standby/tempfile/‘ scope=spfile;

SQL> ALTER SYSTEM SET log_file_name_convert=‘+RECV/rac/onlinelog‘,‘+RECV/standby/onlinelog‘ scope=both;

SQL> ALTER SYSTEM SET standby_file_management=auto scope=both;

SQL> ALTER SYSTEM SET fal_server=‘standby‘ scope=both;

SQL> ALTER SYSTEM SET rac1.fal_client=‘rac1‘ scope=spfile scope=both;

SQL> ALTER SYSTEM SET rac2.fal_client=‘rac2‘ scope=spfile scope=both;

加上 scope=both立即生效。

SQL> create spfile=‘+DATA/rac/spfilerac.ora‘ from pfile=‘/u01/oracle/rman_bak/initrac.ora‘;

File created.

2.1.10.2      修改备库参数文件:

可以删除的参数:

*.cluster_database_instances=2

*.cluster_database=true

*.db_create_file_dest=‘+DATA‘

rac2.instance_number=2

rac1.instance_number=1

*.remote_listener=‘LISTENERS_RAC‘

修改initstandby.ora文件

修改新增参数:

*.control_files=‘/u01/oracle/rman_bak/standby.ctl‘

*.db_unique_name=‘standby‘

*.log_archive_config=‘dg_config=(rac,standby)‘

*.db_file_name_convert=‘+DATA/rac/datafile‘,‘+DATA/standby/datafile‘,‘+DATA/rac/tempfile‘,‘+DATA/standby/tempfile‘

*.log_file_name_convert=‘+RECV/rac/onlinelog‘,‘+RECV/standby/onlinelog‘

*.log_archive_dest_1=‘LOCATION=+DATA/standby/archivelog valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby‘

*.LOG_ARCHIVE_DEST_2=‘SERVICE=rac1 LGWR ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=rac‘

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

*.FAL_SERVER=‘rac‘

*.FAL_CLIENT=‘standby‘

*.STANDBY_FILE_MANAGEMENT=‘AUTO‘

thread=1

undo_tablespace=‘UNDOTBS1‘

 

 

*.user_dump_dest=‘/u01/oracle/admin/standby/udump‘

*.audit_file_dest=‘/u01/oracle/admin/standby/adump‘

*.background_dump_dest=‘/u01/oracle/admin/standby/bdump‘

*.core_dump_dest=‘/u01/oracle/admin/standby/cdump‘

 

 

*.db_unique_name=‘standby‘

*.service_names=‘standby‘

注:+DATA/standby/archivelog这个目录需要在备库手动创建,开始未创建,结果一直报错归档目录不合法。

2.1.11             进行rman备份

备份数据文件及控制文件

RMAN>  backup FORMAT  ‘/u01/oracle/rman_bak/db_%U‘ database plus archivelog;

-----------------delete all input;不要这个

RMAN>  BACKUP FORMAT  ‘/u01/oracle/rman_bak/control_%U‘  CURRENT CONTROLFILE FOR STANDBY;

注:

在controlfile中记录着每一个archivelog的相关信息,OS下把这些物理文件delete掉后,在controlfile中仍然记录着这些archivelog的信息,

当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就是oracle并不知道这些文件已经不存在了!

RMAN> crosscheck archivelog all;

RMAN> delete expired archivelog all;

进行几次归档

SQL>Alter system archive log current;

主库创建备库的控制文件

SQL> alter database create standby controlfile as ‘/u01/oracle/rman_bak/standby.ctl‘;

Database altered.

将RAC1上的/u01/oracle/rman_bak/下的所有文件,包含RMAN备份文件,tnsnames.ora, listener.ora和initstandby.ora拷贝至Standby的同样的目录上。

[[email protected] rman_bak]$ scp [email protected]:/u01/oracle/rman_bak/* ./

创建spfile

[[email protected] dbs]$ export ORACLE_SID=standby

[[email protected] dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jan 6 17:30:51 2015

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to an idle instance.

SQL> create spfile from pfile=‘/u01/oracle/product/10.2.0/db_1/dbs/initstandby.ora‘;

File created.

SQL> startup nomount

2.1.12             利用rman创建standby数据库

备库启动到nomount状态

SQL> startup pfile=‘/u01/oracle/product/10.2.0/db_1/dbs/initstandby.ora‘ nomount;

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  2083368 bytes

Variable Size              88081880 bytes

Database Buffers          188743680 bytes

Redo Buffers                6303744 bytes

SQL> create spfile from pfile=‘/u01/oracle/product/10.2.0/db_1/dbs/initstandby.ora‘;

File created.

主库恢复备库

[[email protected] ~]$ rman target / auxiliary sys/[email protected]

Recovery Manager: Release 10.2.0.4.0 - Production on Wed Jan 7 10:52:22 2015

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

connected to target database: RAC (DBID=2456162188)

connected to auxiliary database: RAC (not mounted)

RMAN> duplicate target database for standby;

Starting Duplicate Db at 07-JAN-15

using target database control file instead of recovery catalog

allocated channel: ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: sid=155 devtype=DISK

contents of Memory Script:

{

restore clone standby controlfile;

sql clone ‘alter database mount standby database‘;

}

executing Memory Script

Starting restore at 07-JAN-15

using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: restoring control file

channel ORA_AUX_DISK_1: copied control file copy

input filename=/u01/oracle/rman_bak/standby.ctl

output filename=/u01/oracle/rman_bak/standby.ctl

Finished restore at 07-JAN-15

sql statement: alter database mount standby database

released channel: ORA_AUX_DISK_1

WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to diskgroup only.

contents of Memory Script:

{

set newname for tempfile  1 to

"+data";

switch clone tempfile all;

set newname for datafile  1 to

"+data";

set newname for datafile  2 to

"+data";

set newname for datafile  3 to

"+data";

set newname for datafile  4 to

"+data";

set newname for datafile  5 to

"+data";

restore

check readonly

clone database

;

}

executing Memory Script

executing command: SET NEWNAME

renamed temporary file 1 to +data in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 07-JAN-15

allocated channel: ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: sid=155 devtype=DISK

channel ORA_AUX_DISK_1: starting datafile backupset restore

channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set

restoring datafile 00001 to +DATA

restoring datafile 00002 to +DATA

restoring datafile 00003 to +DATA

restoring datafile 00004 to +DATA

restoring datafile 00005 to +DATA

channel ORA_AUX_DISK_1: reading from backup piece /u01/oracle/rman_bak/db_0hps54f4_1_1

channel ORA_AUX_DISK_1: restored backup piece 1

piece handle=/u01/oracle/rman_bak/db_0hps54f4_1_1 tag=TAG20150107T191548

channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45

Finished restore at 07-JAN-15

contents of Memory Script:

{

switch clone datafile all;

}

executing Memory Script

datafile 1 switched to datafile copy

input datafile copy recid=8 stamp=868395271 filename=+DATA/standby/datafile/system.260.868395229

datafile 2 switched to datafile copy

input datafile copy recid=9 stamp=868395275 filename=+DATA/standby/datafile/undotbs1.279.868395233

datafile 3 switched to datafile copy

input datafile copy recid=10 stamp=868395275 filename=+DATA/standby/datafile/sysaux.280.868395233

datafile 4 switched to datafile copy

input datafile copy recid=11 stamp=868395275 filename=+DATA/standby/datafile/users.277.868395235

datafile 5 switched to datafile copy

input datafile copy recid=12 stamp=868395275 filename=+DATA/standby/datafile/undotbs2.278.868395235

Finished Duplicate Db at 07-JAN-15

[[email protected] dbs]$ export ORACLE_SID=standby

[[email protected] dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jan 6 20:48:47 2015

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

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

SQL> select status from v$instance;

STATUS

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

MOUNTED

SQL> select member from v$logfile;

MEMBER

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

+DATA/rac/onlinelog/group_2.262.868180179

+DATA/rac/onlinelog/group_1.261.868180177

+DATA/rac/onlinelog/group_3.265.868180327

+DATA/rac/onlinelog/group_4.266.868180329

SQL> select name from v$datafile;

NAME

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

+DATA/standby/datafile/system.266.868308455

+DATA/standby/datafile/undotbs1.268.868308459

+DATA/standby/datafile/sysaux.267.868308459

+DATA/standby/datafile/users.270.868308459

+DATA/standby/datafile/undotbs2.269.868308459

SQL> SELECT NAME FROM V$TEMPFILE;

NAME

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

+DATA

2.1.13             创建standby redo log日志

创建原则:日志文件大小相等、日志组数量要多1

主库查询联机日志

[[email protected] admin]$ export ORACLE_SID=rac1

[[email protected] admin]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jan 6 20:54:05 2015

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

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

and Real Application Testing options

SQL> SELECT THREAD#,GROUP#,BYTES/1024/1024 FROM V$LOG;

THREAD#     GROUP# BYTES/1024/1024

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

1          1              50

1          2              50

2          3              50

2          4              50

RAC有两个redo thread ,每个thread有两个日志组,每个日志文件大小50MB,所以要针对每个thread需要创建3组standby redo log,大小为50MB。

Standby 库执行:

alter database add standby logfile thread 1 group 5 (‘+DATA/standby/onlinelog/st_redo_5.rdo‘) size 50m;

alter database add standby logfile thread 1 group 6 (‘+DATA/standby/onlinelog/st_redo_6.rdo‘) size 50m;

alter database add standby logfile thread 1 group 7 (‘+DATA/standby/onlinelog/st_redo_7.rdo‘) size 50m;

alter database add standby logfile thread 2 group 8 (‘+DATA/standby/onlinelog/st_redo_8.rdo‘) size 50m;

alter database add standby logfile thread 2 group 9 (‘+DATA/standby/onlinelog/st_redo_9.rdo‘) size 50m;

alter database add standby logfile thread 2 group 10 (‘+DATA/standby/onlinelog/st_redo_10.rdo‘) size 50m;

SQL> select member from v$logfile;

MEMBER

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

+DATA/rac/onlinelog/group_2.262.868180179

+DATA/rac/onlinelog/group_1.261.868180177

+DATA/rac/onlinelog/group_3.265.868180327

+DATA/rac/onlinelog/group_4.266.868180329

+DATA/standby/onlinelog/st_redo_5.rdo

+DATA/standby/onlinelog/st_redo_6.rdo

+DATA/standby/onlinelog/st_redo_7.rdo

+DATA/standby/onlinelog/st_redo_9.rdo

+DATA/standby/onlinelog/st_redo_10.rdo

+DATA/standby/onlinelog/st_redo_8.rdo

10 rows selected.

2.1.14             开始同步

在备库上启动redo apply

SQL> recover managed standby database disconnect from session;

Media recovery complete.

2.1.15             确认同步

SQL> select status from v$instance;

STATUS

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

MOUNTED

SQL> select a.SWITCHOVER_STATUS from v$database a;

SWITCHOVER_STATUS

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

SESSIONS ACTIVE

日志应用

SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

备库执行:

select name from v$archived_log;

主库查看:

SQL> col dest_name format a20

SQL> select dest_name,status,error from v$archive_dest;

在rac某个实例上执行

SQL> create tablespace zhaoja2 datafile size 10m;

Tablespace created.

Rac每个实例上执行

SQL> alter system switch logfile;

System altered.

在standby上确认文件产生

SQL> select name from v$datafile;

2.1.16             Switchover

RAC环境,切换时primary和standby都只能有一个instance活动,其他的instance都必须关闭

(1)       在rac2上执行:

SQL> shutdown immediate;

(2)       在rac1上执行:

SQL> alter database commit to switchover to physical standby with session shutdown;

Database altered.

SQL> shutdown immediate;

ORA-01507: database not mounted

ORACLE instance shut down.

(3)       在standby上执行:

SQL> alter database commit to switchover to primary with session shutdown;

Database altered.

SQL> shutdown immediate

ORA-01109: database not open

Database dismounted.

ORACLE instance shut down.

SQL> startup

(4)       在rac1上创建standby redolog file:

SQL> startup mount;

alter database add standby logfile thread 1 group 5 size 50m;

alter database add standby logfile thread 1 group 6 size 50m;

alter database add standby logfile thread 1 group 7 size 50m;

alter database add standby logfile thread 2 group 8 size 50m;

alter database add standby logfile thread 2 group 9 size 50m;

alter database add standby logfile thread 2 group 10 size 50m;

(5)       开始同步,在rac1执行

SQL> recover managed standby database disconnect from session;

Media recovery complete

(6)       确认同步

在standby上执行:

SQL> create tablespace zhaoja4 datafile size 10m;

create tablespace zhaoja3 datafile size 10m

*

ERROR at line 1:

ORA-02236: invalid file name

SQL> create tablespace zhaoja3 datafile ‘+DATA/standby/datafile/zhaoja3.dbf‘ size 10m;

Tablespace created.

SQL> alter system switch logfile;

System altered.

在rac1上查询:

SQL> select name from v$datafile;

NAME

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

+DATA/rac/datafile/system.256.868180113

+DATA/rac/datafile/undotbs1.258.868180115

+DATA/rac/datafile/sysaux.257.868180115

+DATA/rac/datafile/users.259.868180115

+DATA/rac/datafile/undotbs2.264.868180247

+DATA/rac/datafile/zhaoja.276.868545559

+DATA/rac/datafile/zhaoja2.275.868614513

7 rows selected.

2.1.17             其他命令

关闭同步

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

切换日志

SQL> alter system switch logfile;

System altered.

2.2      rac primary和rac standby

最好关闭其中一个,在一个上面操作

2.2.1  配置host

2.2.1.1          Primary rac两个几点的hosts内容如下:

127.0.0.1               localhost

192.168.204.8          rac1

192.168.204.3          rac1-vip

10.10.0.2              rac1-priv

192.168.204.9          rac2

192.168.204.4          rac2-vip

10.10.0.3              rac2-priv

增加:

192.168.204.101         std1

192.168.204.102         std2

192.168.204.103         std1-vip

192.168.204.104         std2-vip

2.2.1.2          Standby rac的两个几点如下:

127.0.0.1               localhost

192.168.204.101         std1

192.168.204.103         std1-vip

10.10.0.11              std1-priv

192.168.204.102         std2

192.168.204.104         std2-vip

10.10.0.12              std2-priv

增加:

192.168.204.8          rac1

192.168.204.9          rac2

192.168.204.3          rac1-vip

192.168.204.4          rac2-vip

2.2.2  修改参数文件

2.2.2.1          Primary参数文件

SQL> show parameter db_unique_name

NAME                                 TYPE        VALUE

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

db_unique_name                       string      rac

SQL> ALTER SYSTEM SET service_names=rac scope=both;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG=‘DG_CONFIG=(rac,std)‘ scope=both;

SQL> ALTER SYSTEM SET db_file_name_convert=‘+DATA/rac/datafile/‘,‘+DATA/std/datafile/‘,‘+DATA/rac/tempfile/‘,‘+DATA/std/tempfile/‘ scope=spfile;

SQL> ALTER SYSTEM SET log_file_name_convert=‘+RECV/rac/onlinelog‘,‘+RECV/std/onlinelog‘ scope=both;

ERROR at line 1:

ORA-02095: specified initialization parameter cannot be modified

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1=‘LOCATION=+RECV/rac/archivelog valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=rac‘ scope=both;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=‘service=std valid_for=(online_logfiles,primary_role) db_unique_name=std‘ scope=both;

SQL> ALTER SYSTEM SET standby_file_management=auto scope=both;

SQL> ALTER SYSTEM SET fal_client=‘rac‘ scope=both;

SQL> ALTER SYSTEM SET fal_server=‘std‘ scope=both;

2.2.2.2          创建目录

mkdir -p /u01/oracle/admin/std/adump

mkdir -p /u01/oracle/admin/std/bdump

mkdir -p /u01/oracle/admin/std/cdump

mkdir -p /u01/oracle/admin/std/dpdump

mkdir -p /u01/oracle/admin/std/hdump

mkdir -p /u01/oracle/admin/std/udump

2.2.2.3          Standby参数文件

2.2.2.4          Primary上创建参数文件,copy到备库

SQL> CREATE PFILE=‘/u01/oracle/rman_bak/initstd.ora‘ FROM SPFILE;

[[email protected] rman_bak]$ scp [email protected]:/u01/oracle/rman_bak/initstd.ora ./

2.2.2.5          修改

*.control_files=‘+data/std/controlfile/Current.260.868180173‘

*.log_archive_dest_1=‘LOCATION=+RECV/std/archivelog valid_for=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=std‘

*.log_archive_dest_2=‘service=std valid_for=(online_logfiles,primary_role) db_unique_name=rac‘

*.db_name=‘rac‘

*.db_unique_name=‘std‘

*.service_names=‘std‘

std2.instance_number=2

std1.instance_number=1

*.audit_file_dest=‘/u01/oracle/admin/std/adump‘

*.background_dump_dest=‘/u01/oracle/admin/std/bdump‘

*.core_dump_dest=‘/u01/oracle/admin/std/cdump‘

*.user_dump_dest=‘/u01/oracle/admin/std/udump‘

去掉

rac1.local_listener=‘LISTENER_RAC1‘

rac2.local_listener=‘LISTENER_RAC2‘

*.local_listener=‘(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.204.8)(PORT = 3173))‘

Asm上没有的目录需要手工创建下。

2.2.2.6          在ASM中创建standby的spfile

[[email protected] soft]$ export ORACLE_SID=+ASM1

SQL> alter diskgroup data add directory ‘+data/std‘;

或者通过 asmcmd -p 进入目录后用mkdir创建

[[email protected] soft]$ export ORACLE_SID=std1

[[email protected] soft]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Wed Jan 14 17:52:14 2015

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to an idle instance.

SQL> create spfile=‘+DATA/std/spfilestd.ora‘ from pfile=‘/u01/oracle/rman_bak/initstd.ora‘;

2.2.2.7          为两个实例准备pfile

[[email protected] ~]$ cd /u01/oracle/product/10.2.0/db_1/dbs

[[email protected] dbs]$ echo "spfile=‘+DATA/std/spfilestd.ora‘">initstd1.ora

[[email protected] dbs]$ echo "spfile=‘+DATA/std/spfilestd.ora‘">initstd2.ora

2.2.3  为两个实例准备密码文件

[[email protected] dbs]$ orapwd file=orapwstd1 password=sys entries=5

[[email protected] dbs]$ orapwd file=orapwstd2 password=sys entries=5

2.2.4  备份主库

RMAN>  backup FORMAT  ‘/u01/oracle/rman_bak/db_%U‘ database;

RMAN>  backup FORMAT  ‘/u01/oracle/rman_bak/con_%U‘ current controlfile for standby;

[[email protected] rman_bak]$ scp [email protected]:/u01/oracle/rman_bak/* ./

2.2.5  创建standby

在PRIMARY的RAC1节点

[[email protected] admin]$ rman target / auxiliary sys/[email protected]

RMAN> duplicate target database for standby;

此时备库状态:

节点std1

SQL> select status from v$instance;

STATUS

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

MOUNTED

注:Standby一个节点为nomount状态,这里我只启动了一个,等恢复完之后,再启动另外一个为mount状态。

2.2.6  创建standby redo log日志

创建原则:日志文件大小相等、日志组数量要多1

主库查询联机日志

[[email protected] admin]$ export ORACLE_SID=rac1

[[email protected] admin]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jan 6 20:54:05 2015

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

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

and Real Application Testing options

SQL> SELECT THREAD#,GROUP#,BYTES/1024/1024 FROM V$LOG;

THREAD#     GROUP# BYTES/1024/1024

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

1          1              50

1          2              50

2          3              50

2          4              50

RAC有两个redo thread ,每个thread有两个日志组,每个日志文件大小50MB,所以要针对每个thread需要创建3组standby redo log,大小为50MB。

Standby 库执行:

alter database add standby logfile thread 1 group 5 (‘+DATA/std/onlinelog/st_redo_5.rdo‘) size 50m;

alter database add standby logfile thread 1 group 6 (‘+DATA/std/onlinelog/st_redo_6.rdo‘) size 50m;

alter database add standby logfile thread 1 group 7 (‘+DATA/std/onlinelog/st_redo_7.rdo‘) size 50m;

alter database add standby logfile thread 2 group 8 (‘+DATA/std/onlinelog/st_redo_8.rdo‘) size 50m;

alter database add standby logfile thread 2 group 9 (‘+DATA/std/onlinelog/st_redo_9.rdo‘) size 50m;

alter database add standby logfile thread 2 group 10 (‘+DATA/std/onlinelog/st_redo_10.rdo‘) size 50m;

SQL> select member from v$logfile;

MEMBER

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

+DATA/rac/onlinelog/group_2.262.868180179

+DATA/rac/onlinelog/group_1.261.868180177

+DATA/rac/onlinelog/group_3.265.868180327

+DATA/rac/onlinelog/group_4.266.868180329

+DATA/standby/onlinelog/st_redo_5.rdo

+DATA/standby/onlinelog/st_redo_6.rdo

+DATA/standby/onlinelog/st_redo_7.rdo

+DATA/standby/onlinelog/st_redo_9.rdo

+DATA/standby/onlinelog/st_redo_10.rdo

+DATA/standby/onlinelog/st_redo_8.rdo

10 rows selected.

2.2.7  把standby rac注册到crs中

因为standby rac不是通过dbca等工具创建,而是手工创建,所以不会自动注册到crs中,需要手工注册,下面操作可以在任何一个节点操作:

2.2.7.1          添加数据库和实例

[[email protected] rman_bak]$ srvctl add database -d std -o /u01/oracle/product/10.2.0/db_1/

[[email protected] rman_bak]$ srvctl add instance -d std -i std1 -n std1

[[email protected] rman_bak]$ srvctl add instance -d std -i std2 -n std2

Usage: srvctl add instance -d <name> -i <inst_name> -n <node_name>

2.2.7.2          指定数据库实例依赖ASM实例

[[email protected] rman_bak]$ srvctl modify instance -d std -i std1 -s +ASM1

[[email protected] rman_bak]$ srvctl modify instance -d std -i std2 -s +ASM2

如果ASM也需要手工注册???????????????????

[[email protected] rman_bak]$ srvctl add asm -n std1 -i +ASM1 -o /u01/oracle/product/10.2.0/db_1/ -p /u01/oracle/product/10.2.0/db_1/dbs/spfile+ASM1.ora

PRKS-1000 : ASM instance "+ASM1" already exists on node "std1"

系统启动时,自动启动ASM

[[email protected] rman_bak]$ srvctl enable asm -n std1 -i +ASM1

[[email protected] rman_bak]$ srvctl enable asm -n std2 -i +ASM2

2.2.8  在任意一个节点开始恢复,节点状态为mount

SQL> alter database recover managed standby database disconnect from session;

Database altered.

2.2.9  测试

在primary创建一个表空间

SQL> create tablespace zhaoja17 datafile size 10m;

Tablespace created.

SQL> select name from v$datafile;

NAME

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

+DATA/rac/datafile/system.256.868180113

+DATA/rac/datafile/undotbs1.258.868180115

+DATA/rac/datafile/sysaux.257.868180115

+DATA/rac/datafile/users.259.868180115

+DATA/rac/datafile/undotbs2.264.868180247

+DATA/rac/datafile/zhaoja.276.868545559

+DATA/rac/datafile/zhaoja2.275.868614513

+DATA/rac/datafile/zhaoja3.273.868639251

+DATA/rac/datafile/zhaoja4.277.868785219

+DATA/rac/datafile/zhaoja15.278.869083171

10 rows selected.

执行日志切换

SQL> alter system switch logfile;

System altered.

在standby rac上查看

SQL> select name from v$datafile;

SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;

日志应用

SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

2.2.10             Switchover

3           问题:

3.1      WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to diskgroup only.

http://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmtspit.htm#CIHHGCGF

If the DB_FILE_NAME_CONVERT and LOG_FILE_NAME_CONVERT parameters change a substring other than the disk group name, the conversion is ignored and the resulting disk group name is used, for example:

DB_FILE_NAME_CONVERT=‘+DATAFILE/prod‘,‘+DATAFILE/tspitr‘

The preceding command results in an invalid ASM OMF file name and the change is ignored. Instead, the files are created in disk group name +DATAFILE and the following message is issued:

WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only

3.2      RMAN> duplicate target database for standby;

报错:

restoring datafile 00001 to +DATA

restoring datafile 00002 to +DATA

restoring datafile 00003 to +DATA

restoring datafile 00004 to +DATA

restoring datafile 00005 to +DATA

channel ORA_AUX_DISK_1: reading from backup piece /u01/oracle/rman_bak/db_0hps54f4_1_1

ORA-19870: error reading backup piece /u01/oracle/rman_bak/db_0hps54f4_1_1

ORA-19504: failed to create file "+DATA"

ORA-17502: ksfdcre:4 Failed to create file +DATA

ORA-15001: diskgroup "DATA" does not exist or is not mounted

ORA-15077: could not locate ASM instance serving a required diskgroup

failover to previous backup

错误原因:

进入asm磁盘组,删除已有的文件

[[email protected] dbs]$ export ORACLE_SID=+ASM

[[email protected] dbs]$ asmcmd -p

ASMCMD [+] > ls

DATA/

RECV/

ASMCMD [+] > cd data

ASMCMD [+data] > ls

ASMCMD [+data/standby/datafile] > rm -rf *

3.3      日志未传送

(1)

SQL> select dest_name,status,error from v$archive_dest;

LOG_ARCHIVE_DEST_3   ERROR

ORA-00254: error in archive control string ‘‘

查看错误日志

[[email protected] dbs]$ tail -20 /u01/oracle/admin/rac/bdump/alert_rac1.log

Errors in file /u01/oracle/admin/rac/bdump/rac1_arc1_26523.trc:

ORA-00254: error in archive control string ‘‘

Thu Jan  8 09:05:01 2015

FAL[server, ARC1]: FAL archive failed, see trace file.

Thu Jan  8 09:05:01 2015

Errors in file /u01/oracle/admin/rac/bdump/rac1_arc1_26523.trc:

ORA-16055: FAL request rejected

ARCH: FAL archive failed. Archiver continuing

Thu Jan  8 09:05:01 2015

ORACLE Instance rac1 - Archival Error. Archiver continuing.

Thu Jan  8 09:05:03 2015

Errors in file /u01/oracle/admin/rac/bdump/rac1_arc1_26523.trc:

ORA-00254: error in archive control string ‘‘

FAL[server, ARC1]: FAL archive failed, see trace file.

Thu Jan  8 09:05:03 2015

Errors in file /u01/oracle/admin/rac/bdump/rac1_arc1_26523.trc:

ORA-16055: FAL request rejected

ARCH: FAL archive failed. Archiver continuing

Thu Jan  8 09:05:03 2015

ORACLE Instance rac1 - Archival Error. Archiver continuing.

查看trace文件

[[email protected] dbs]$ tail -20 /u01/oracle/admin/rac/bdump/rac1_arc1_26523.trc

ORA-16055: FAL request rejected

ARCH: Connecting to console port...

ARCH: Connecting to console port...

FAL[server]: Selected inactive destination; resetting temporarily

Redo shipping client performing standby login

*** 2015-01-08 09:05:03.142 66535 kcrr.c

Logged on to standby successfully

Client logon and security negotiation successful!

Error 254 creating standby archive log file at host ‘standby‘

*** 2015-01-08 09:05:03.172 62692 kcrr.c

ARC1: Attempting destination LOG_ARCHIVE_DEST_3 network reconnect (254)

*** 2015-01-08 09:05:03.172 62692 kcrr.c

ARC1: Destination LOG_ARCHIVE_DEST_3 network reconnect abandoned

ORA-00254: error in archive control string ‘‘

*** 2015-01-08 09:05:03.172 60970 kcrr.c

kcrrfail: dest:3 err:254 force:0 blast:1

kcrrwkx: unknown error:254

ORA-16055: FAL request rejected

ARCH: Connecting to console port...

ARCH: Connecting to console port...

查看错误代码

[[email protected] rman_bak]$ oerr ora 254

00254, 00000, "error in archive control string ‘%s‘"

// *Cause: The specified archive log location is invalid in the archive

//         command or the LOG_ARCHIVE_DEST initialization parameter.

// *Action: Check the archive string used to make sure it refers to a valid

//       online device.

解决办法:

LOG_ARCHIVE_DEST配置的不对,standby的参数文件:service_names未配置

(2)

PING[ARC0]: Heartbeat failed to connect to standby ‘std‘. Error is 16058

[[email protected] admin]$ oerr ora 16058

16058, 00000, "standby database instance is not mounted"

// *Cause:  The RFS process on the standby database received an internal error.

// *Action: Check the standby alert log and RFS trace files for more

//          information.

查询备库alert日志,发现备库的归档日志目录由于未手工创建,报错,创建目录,正常。

3.4   其他莫名其妙的错误:

如果出现了莫名其妙的错误,绝大多数是某个参数配置错误(参数不合法),验证参数合法性即可。

3.4      日志传送了,但是未应用

SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;

PROCESS   STATUS          THREAD#  SEQUENCE#     BLOCK#     BLOCKS

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

ARCH      CLOSING               1         42          1         51

ARCH      CLOSING               2         36          1         24

RFS       IDLE                  0          0          0          0

RFS       IDLE                  0          0          0          0

MRP0      WAIT_FOR_GAP          1         38          0          0

这是在等38吗?查看主库38的归档已经被我删了,重新再恢复个standby试试,重新备份恢复standby正常。

Dataguard模式

SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL

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

PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

3.5      删除监听

[[email protected] bin]$ ./crs_stop ora.std1.LISTENER_STD1.lsnr

Attempting to stop `ora.std1.LISTENER_STD1.lsnr` on member `std1`

Stop of `ora.std1.LISTENER_STD1.lsnr` on member `std1` succeeded.

[[email protected] bin]$ ./crs_unregister ora.std1.LISTENER_STD1.lsnr

[[email protected] bin]$ ./crs_unregister ora.std2.LISTENER_STD2.lsnr

3.6      ERROR:ORA-12528: TNS:listener: all appropriate instances are blocking new connections

总结ORA-12528问题是因为监听中的服务使用了动态服务,系统启动后,数据库没有正常的MOUNT,因此在动态模式下,就会出现这个问题,用静态的就不会有这个问题,因此上面的方法就是:

把监听设置为静态

在tnsnames.ora中追加(UR=A)

从启动服务

用静态注册的风险是,如果在instance运行中,lisener重新启动,就找不到instance了。换言之,静态注册需要先启动lisener,再启动instance。而且静态模式下,lisener status显示的是unknown
而且,用动态的话,instance nomount状态下,一般是dba需要进行操作(比如恢复),这个时候一般直接登陆到host进行,不使用tns远程连接

3.7     
database name ‘RAC‘ in control
file is not

db_name参数设置问题

时间: 2024-10-08 15:54:09

oracle rac +standby的相关文章

Oracle 11.2.0.4 RAC Standby实施手册

Oracle RAC Standby实施手册   目录 1 实施环境规划 3 1.1 IP地址规划 3 1.2 归档配置相关参数 3 1.3 主库软件环境信息 4 1.4 备库软件环境信息 4 2 Active DataGuard实施条件 6 3 Active DataGuard实施准备 8 3.1 配置DG专用监听 8 3.1.1 创建LISTENER_DG 8 3.1.2 将监听加入到crs资源 10 3.2 配置TNS别名 10 3.3 同步口令文件 11 3.4 测试TNS配置有效性 1

Oracle RAC环境实时数据迁移

系统要求及安装前的说明 Oracle GoldenGate可以在Oracle不同版本间移动数据,也可以在Oracle和其它类型数据库之间移动数据.Oracle GoldenGate支持数据的过滤.映射和转换.Oracle还能在相似的Oracle数据库之间复制DDL操作.注意下面一句:当DDL支持被激活的时候,Oracle GoldenGate不支持数据的过滤.映射和转换. 支持的Oracle数据库版本,从9.2开始支持DML和DDL.支持几乎所有的主流操作系统,具体的可以从MOS(My Orac

部署Physical Dataguard 与 双节点Oracle RAC环境

关于oracle rac 部署请访问这里 http://worms.blog.51cto.com/969144/1416975 系统信息: Primary端 RAC  Primary RACDG1(主机) RACDG2(主机) 备注 Public IP 172.20.10. 11 172.20.10. 12 Virtual IP 10.0.0.11 10.0.0.12 Instance racdg1 racdg2 DB name RACDG DATA file +DATA2/racdg/data

oracle 双机热备,oracle dataguard 和oracle rac的区别和联系(转)

Data Guard 是Oracle的远程复制技术,它有物理和逻辑之分,但是总的来说,它需要在异地有一套独立的系统,这是两套硬件配置可以不同的系统,但是这两套系统的软件结构保持一致,包括软件的版本,目录存储结构,以及数据的同步(其实也不是实时同步的),这两套系统之间只要网络是通的就可以了,是一种异地容灾的解决方案.而对于RAC,则是本地的高可用集群,每个节点用来分担不用或相同的应用,以解决运算效率低下,单节点故障这样的问题,它是几台硬件相同或不相同的服务器,加一个SAN(共享的存储区域)来构成的

深入理解Oracle RAC 12c

深入理解Oracle RAC 12c(顶尖专家权威指南唯一最新版数据库著作 Oracle第一社区技术大牛翻译 Amazon五星推荐) [美]Syed Jaffar Hussain(赛义德 贾法尔 侯赛因),Tariq Farooq(塔里克 法鲁克),Riyaj Shamsudeen(瑞亚吉沙姆斯丁),Kai Yu(于凯) 著   赵燚 梁涛 程飞 李真旭 译 ISBN 978-7-121-24066-9 2014年10月出版 定价:99.00元 488页 16开 编辑推荐 <深入理解 Oracl

Oracle Rac 11.2.0.3迁移OCR和VOTEDISK

环境:AIX7.1+Oracle Rac 11.2.0.3 迁移描述:今天在装Oracle Rac的时候,错误的将500G的数据盘用作OCRDG了,遂后续比较麻烦,只能讲ocr和votedisk迁移到新建的OCRDG上,并把DATADG删除并格式化该盘.(OCRDG为normal 冗余) 操作如下: [email protected]:/home/grid>/oraapp/grid/gridhome/bin/ocrcheck Status of Oracle Cluster Registry i

下载Grid方法(Oracle RAC)

如何下载RAC所需的grid软件 注册账户后登陆OTN网站 到下载选项处找到"服务器和存储系统"项 下拉菜单找到,Grid Infrastructure 进入后,记得点击"接受许可"才可以从OTN下载软件 点击允许后,如下图所示: 下拉菜单,找到你所需要的软件包,如下图所示: ***********************************************声明***********************************************

Oracle RAC(Real Application Clusters)

Oracle RAC 运行于集群之上,为 Oracle 数据库提供了最高级别的可用性.可伸缩性和低成本计算能力.如果集群内的一个节点发生故障,Oracle 将可以继续在其余的节点上运行.Oracle 的主要创新是一项称为高速缓存合并的技术.高速缓存合并使得集群中的节点可以通过高速集群互联高效地同步其内存高速缓存,从而最大限度地低降低磁盘 I/O.高速缓存最重要的优势在于它能够使集群中所有节点的磁盘共享对所有数据的访问,数据无需在节点间进行分区.Oracle 是唯一提供具备这一能力的开放系统数据库

oracle RAC 数据库连接配置

数据库的连接的URL连接配置为    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521))(LOAD_BALANCE=yes)(FAILOVER=on))(CONNECT_DATA=(SERVICE_NAME=gs))) String URL= "jdbc:oracle:thi