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;
领取专属 10元无门槛券
私享最新 技术干货