DATA GUARD 的搭建手册

DATA GUARD 的搭建手册

一. 不论是逻辑standby 还是物理standby都要依赖primary数据库。

1,打开force logging 模式 只在primary当中去做。

alter database force logging;-----开启force logging模式后,数据库将会记录除了临时表空间的或者临时回滚段外所有的操做,而忽略了累死弄logging之类的指定参数,使其强制写入redo日志中,force logging 是为了做固定参数保存在数据文件当中,

2.创建密码文件(如果primary当中没有的话)

此处需要注意,同一个dataguard中,每一个数据库都要有自己独立的密码文件,并且必须保证一个dataguard中所有的sys用户有有相同的密码以保证redo数据的顺利传输,redo传输服务通过认证的网络会话去传输redo数据,而会话使用包含在密码文件中的sys用户密码去认证。

如果没有

$orapwd file=$ORACLE_HOME/dbs/orapworcl2password=oracle

并且需要开启密码认证的参数 remote_login_passwordfile 将这个值改为 exclusive;

show parameter remote_login_passwordfile;

alter system set remote_login_passwordfile=exclusive scope=spfile;

3,配置standby Redo log

对于最大保护和最高可用的模式,standby数据库必须配置standby redo log , 并且 oracle推荐所有数据库都使用LGWR ASYNC模式去传输,

这里注意standby redo log 和 online redo log 的区别:

standby redo log是存储primary数据库的redo数据。

online redo log是存储本机当中的记录操作。

在创建standby redo log的时候,oracle提供了一下几点建议。

确保standby redo log的文件大小和primary数据库 online redo log 文件大小相同,目的是为了接收和应用十分方便。

创建适当的日志组,一般来说,standby redo 日志文件组要比primary 数据库的online redo 日志文件组至少多一个,推荐standby redo 日志组数量基于primary 数据库的线程数(此处我还 暂时不理解),此处有一个公式(每线程的日志组数+1)*最大线程数

例如:primary有两个线程,每个线程分配两组日志,则standby日志组建议为6组,使用这个公式可以降低primary数据库实例LGWR进程锁住的可能性。

逻辑standby数据库可能需要视工作量增加更多的standby redo log 文件或者增加归档进程,因为逻辑standby 需要同时写 online redo log文件。

alter database add standby logfile group 4 ('/home/oracle/oradata/standbyredo04.log') size 40M;

这个操作需要在primary和standby俩数据库同时创建,目的是为了在故障切换的时候能够自动切换。

select group#,thread#,sequence#,aechived,status from v$standby_log; 查看数据库的日志组状态。

4.设置初始化参数

对于primary数据库,需要定义几个primary角色的初始化控制redo传输服务

5, 查看数据库是否为归档模式

SQL>archive log list;

startup mount;

alter database archivelog;

alter database open;

二. 创建物理standby

PRIMARY操作

创建备份(手工复制数据文件或者通过RMAN) 此处是在primary上操作。

创建控制文件 ----primary操作 alter database create standby controlfile as '/home/oracle/ora_ctl.ctl';

此处需要注意的是控制文件一般情况下是有多份,要么手工的将上面的控制文件复制多份,要么用命令创建多分,创建完控制文件之后,一定要保证primary数据库不再有结构性的变化,不然primary和standby同步会出问题。

创建初始化文件 -------primary

创建客户端出事话参数文件 create pfile=/home/oracle/pfile.ora from spfile;

修改初始化文件参数

DB_UNIQUE_NAME=pmdb

LOG_ARCHIVE_CONFIG='DG_CONFIG=(pmdb,pmdbdg)'

LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pmdb'

LOG_ARCHIVE_DEST_2='SERVICE=pmdbdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pmdbdg'

FAL_SERVER=pmdbdg

FAL_CLIENT=pmdb

DB_FILE_NAME_CONVERT='/u01/oracle/oradata/pmdbdg/','/u01/oracle/oradata/pmdb/'

LOG_FILE_NAME_CONVERT= '/u01/oracle/oradata/pmdbdg/','/u01/oracle/oradata/pmdb/'

STANDBY_FILE_MANAGEMENT=AUTO

将该文件传到standby服务器,包括数据文件,控制文件,参数文件。

scp /home/oracle/product/orcl/dbs/initorcl.ora target:/home/oracle/product/orcl/dbs/initorcl.ora

scp /home/oracle/oradata/orcl/* target:/home/oracle/oradata/orcl/*

scp /home/oracle/orcl_ctl.ctl target:/home/oracle/oradata/orcl/control01.ctl

此处注意一定要有将pfile 改成spfile

SQL>shutdown immediate

SQL>create spfile from pfile;

配置listener和 net server name

vi tnsnames.ora

PMDB =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = pmdb)

)

)

$ lsnrctl stop

$ lsnrctl start

$ tnsping pmdbdg

$ tnsping pmdb

配置standby数据库

创建密码文件,保持和primary密码文件相同。

配置监听并且启动

修改primary和standby的tnsnames.ora,各自增加对应的Net service Name。

创建服务器端的初始化文vi件

创建密码文件,注意sys用户的密码和primary保持一致$orapwd file=$ORACLE_HOME/dbs/orapworcl2password=oracle

配置数据库监听程序

vi tnsnames.ora

PMDB =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = pmdb)

)

)

修改初始化参数文件增下面参数

DB_UNIQUE_NAME=pmdbdg

LOG_ARCHIVE_CONFIG='DG_CONFIG=(pmdb,pmdbdg)'

LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/arch/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=pmdbdg'

LOG_ARCHIVE_DEST_2='SERVICE=pmdb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pmdb'

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

REMOTE_LOGIN_PASSWORDFILE=EXCUSIVE

FAL_SERVER=pmdb

FAL_CLIENT=pmdbdg

DB_FILE_NAME_CONVERT='/u01/oracle/oradata/pmdb/','/u01/oracle/oradata/pmdbdg/'

LOG_FILE_NAME_CONVERT= '/u01/oracle/oradata/pmdb/','/u01/oracle/oradata/pmdbdg/'

STANDBY_FILE_MANAGEMENT=AUTO

SQL>create spfile from pfile;

启动standby

这里注意,standby 极少的情况下可以以read-write模式打开,某些情况下可以,所以在默认情况下,加载到mount状态下即可

SQL>startup mount;

启动redo应用

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

启动实时应用

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

关闭实时应用

SQL> alter databse recover managed standby database cancel;

disconnect from session 子句并不是必须有的,该字句用于指定启动完应用后自动退出到命令符操作前,如果不指定的话当前session就会一直停留处理redo应用,如果想做其他操作,就只能新建一个连接。

查看是否搭建成功

首先登陆primary 将开启数据库

select max(sequence#) from v$archived_log;

查看当前的scn的sequence号

之后登陆standby数据库,因为其数据库默认状态为mount状态并且模式为redo 接收

select max(sequence#) from v$archived_log;

查看对应的sequence号,如果同步成功那么在primary 切归档的时候,standby也会同步这个sequence号。

可以创建一个表在primary当中,alter system archivelog current 之后登陆standby。

因为standby的开启模式是alter database recover managed standby database disconnnect from session;的形式,这个是开启redo应用的形式,

如果想查询数据库当中的表,需要把standby设置成为read-only模式。需要关闭应用,alter database recover managed standby database cancel;

之后alter database open read only;

ok!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

爸爸熟悉这逼玩意总耗时他奶奶的一周多,妈了个XXXXXXXX。

注意啊:

11G可以实现adg。就是说备库是open状态,这个时候,standby 的开启步骤如下:

startup ;

alter database recover managed standby database using current logfile disconnect from session;

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180720G154BV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券