Primary设置:
C:\Windows\system32>e:
E:\>cd E:\oracle\product\10.2.0\db_1
E:\oracle\product\10.2.0\db_1>set ORACLE_SID=ORCL
1.设置主数据库为force logging模式
SQL>sqlplus "/as sysdba"
SQL>select force_logging from v$database;
SQL>alter database force logging;
强制记录日志,即对数据库中的所有操作都产生日志信息,并将该信息写入到联机重做日志文件。
2.设置主数据库为归档模式
SQL> archive log list;
SQL> shutdown immediate ;
SQL> startup mount ;
SQL> alter database archivelog;
SQL> archive log list;
3.添加"备用联机日志文件"
先查看日志文件位置:
SQL>select * from v$logfile; ( select group#,type,member from v$logfile;)
再添加:
SQL> alter database add standby logfile group 4 ('E:\oracle\product\10.2.0\db_1\oradata\orcl\orcl\redo04.log') size 200m;
SQL> alter database add standby logfile group 5 ('E:\oracle\product\10.2.0\db_1\oradata\orcl\orcl\redo05.log') size 200m;
SQL> alter database add standby logfile group 6 ('E:\oracle\product\10.2.0\db_1\oradata\orcl\orcl\redo06.log') size 200m;
SQL> alter database add standby logfile group 7 ('E:\oracle\product\10.2.0\db_1\oradata\orcl\orcl\redo07.log') size 200m;
4.创建主库的初始化参数给备库用
SQL>Create pfile from spfile;
//spfile是2进制文件,无法直接编辑。所以通过创建初始化文件pfile
产生的文件名为initorcl.ora存放目录默认放在E:\oracle\product\10.2.0\db_1\database下
5.在主库创建备库的控制文件
SQL>Alter database create standby controlfile as 'E:\oracle\product\10.2.0\db_1\control01.ctl';
6.
在主库创建监听和配置tnsnams.ora
7.
在initorcl.ora添加内容
8. 参数文件拷贝(用Rman拷贝,不用停机)
$ rman target /
RMAN> backup full format 'E:\oracle\product\10.2.0\db_1\oradata\backup\FULL_%d_%T_%s.bak' database include current controlfile for standby;
RMAN> sql 'alter system archive log current';
RMAN> Backup ArchiveLog all format='E:\oracle\product\10.2.0\db_1\oradata\backup\arch_%d_%T_%s.bak';
9.启动主数据库
SQL>shutdown immediate;
SQL>startup
----------------------------------------------------------------------
Standby操作:
///可以进行设置新的SQL标识符SQL>set sqlprompt 'scofy>' ///1.C;>oradim -new -sid scofy
//创建一个名为scofy的oraclesrvice ///数据库为归档模式
C:>set ORACLE_SID=scofy
SQL>sqlplus "/as sysdba"
SQL>startup nomount pfile='E:\oracle\product\10.2.0\db_1\database\initscofy.ora';
SQL>create spfile from pfile;
SQL>select open_mode from v$database;
1.在此standby端进行Rman还原数据库:
$rman target orcl/oracle@orcl auxiliary /
//sys/admin@primary auxiliary /
//这里必须是连接到primary,不要擅作主张改成standby,如果primary无法连接,尝试在前面加上primary所在的IP地址
RMAN> duplicate target database for standby dorecover nofilenamecheck; ///整个复制过程,会自动进行,先复制控制文件,然后再复制数据文件,再复制日志。 ///alter database mount standby database ;这个语句会自动执行 //必须指定NOFILENAMECHECK参数,避免覆盖primary数据库的当前的数据文件。 DORECOVER并不是必选的,如果不指定,则duplicate仅修复数据文件到目标服务器,不过并不会Recover数据文件,最后将standby数据库打开到MOUNT状态, 此时新创建的物理standby有可能与primary相差较远(因为备份后所有的redologs均未在standby数据库上应用过),指定DORECOVER参数后, DUPLICATE在修复数据文件到目标路径下后,就会自动对这些文件执行RECOVER。
2.添加"备用机日志文件"<如果是采用RMAN的方式进行数据库的复制的话,则添加备份联机日志文件要放在RMAN恢复数据库之后>
SQL>startup mount
先查看日志文件位置:
SQL>select * from v$logfile;
在添加:
SQL> alter database add standby logfile group 4 ('E:\oracle\product\10.2.0\db_1\oradata\scofy\redo04.log') size 200m;
SQL> alter database add standby logfile group 5 ('E:\oracle\product\10.2.0\db_1\oradata\scofy\redo05.log') size 200m;
SQL> alter database add standby logfile group 6 ('E:\oracle\product\10.2.0\db_1\oradata\scofy\redo06.log') size 200m;
SQL> alter database add standby logfile group 7 ('E:\oracle\product\10.2.0\db_1\oradata\scofy\redo07.log') size 200m;
3.在备库创建监听和配置tnsnams.ora
///若tnanams.ora发生修改,必须重启监听服务才有效
C:>lsnrctl stop
C:>lsnrctl start
4.测试主备之间网络连通
standby:
5..配置备库初始化参数
6.启动备用数据库
----------------------------------------------------------------------------
四、测试
注意Data Guard 启动顺序: 启动顺序:先standby ,后primary;
在备库启动监听: $lsnrctl start
主库进行日志切换:
SQL>Alter system switch logfile;
select max(sequence#) from v$archived_log;
select max(sequence#) from v$log_history;
select group#,sequence#,archived,status from v$log;
select name,sequence#,applied from v$archived_log;
select sequence#,applied from v$archived_log;
若不同步,
1.看log日志,archive是否有丢失
2.可以在备库坐如下操作:
SQL>alter database recover managed standby database cancel;///暂停redo应用,在查询数据之前执行
SQL>alter database recover managed standby database disconnect from session; ///启动redo应用
------------------------------------------------------------------------
主备库切换
1. switchover
一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏, 原来DATA GUARD环境中的所有物理和逻辑STANDBY都可以继续工作。 在进行DATA GUARD的物理STANDBY切换前需要注意:
2 确认主库和从库间网络连接通畅;
2 确认没有活动的会话连接在数据库中;
2 PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;
2 确保STANDBY数据库处于ARCHIVELOG模式;
2 如果设置了REDO应用的延迟,那么将这个设置去掉;
2 确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。
主库上的操作:
1.查看switchover状态
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
附:A: switchover_status出现session active/not allowed
2.切换成备库
SQL>Alter database commit to switchover to physical standby with session shutdown;
如果通过查询switchover_status的状态不是to standby的话,就用上面的命令,如果是的话上面的命令去掉最后的with session sthudown>
3.启动到mount和应用日志状态
SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount standby database;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
4.查看数据库模式
SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status;
SQL>select status,database_mode from v$archive_dest_status;
SQL>select
SWITCHOVER_STATUS FROM V$DATABASE;
备库上的操作:
1.查看switchover状态
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
2.切换成主库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
/如果上面查出的结果不是to primary,则用此语句切换:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY with session shutdown ;
Database altered.
SQL> shutdown immediate;
SQL> startup;
SQL> alter system switch logfile;
3.查看数据库模式
SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status;
SQL>select status,database_mode from v$archive_dest_status;
----------------------------------------------------
failover
1.查看是否有日志GAP,没有应用的日志:
如果有,则拷贝过来并且注册
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE '路径'; ///加入到数据字典中
重复查看直到没有应用的日志
2.然后停止应用归档:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
Database altered.
3.下面将STANDBY数据库切换为PRIMARY数据库:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE; ///force会停止当前活动的RFS进程,以便立刻执行failover, ///RFS是日志推送,根据配置不同,推送的进程可能是ARCH或者LGWR
Database altered.
SQL> SELECT DATABASE_ROLE FROM V$DATABASE;
DATABASE_ROLE
----------------
PRIMARY
至此,FAILOVER切换完成。这个时候应该马上对新的PRIMARY数据库进行备份。