SQL> select name , open_mode, log_mode,force_logging from gv$database; NAME OPEN_MODE LOG_MODE FOR--------- -------------------- ------------ ---ORCL READ WRITE ARCHIVELOG NOORCL READ WRITE ARCHIVELOG NO SQL> alter database force logging; Database altered. SQL> select name , open_mode, log_mode,force_logging from gv$database; NAME OPEN_MODE LOG_MODE FOR--------- -------------------- ------------ ---ORCL READ WRITE ARCHIVELOG YESORCL READ WRITE ARCHIVELOG YES
2. 设置参数
1. 设置所有的启用的数据库名ALTER SYSTEM SET LOG_ARCHIVE_CONFIG="DG_CONFIG=(ORCL,ORCLDG)" SID="*"; 2. 设置归档日志的路径(本地和网络)ALTER SYSTEM SET LOG_ARCHIVE_DEST_1="LOCATION=+FRA VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME="ORCL" SID="*";ALTER SYSTEM SET LOG_ARCHIVE_DEST_2="SERVICE=ORCLDG LGWR ASYNC REOPEN NET_TIMEOUT=300 VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE) DB_UNIQUE_NAME="ORCLDG" SID="*"; alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE; 3. 设置备库文件自动管理,可以在主库新建数据文件的时候自动新建备库ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID="*"; 4. 设置FAL_SERVER为备库名ALTER SYSTEM SET FAL_SERVER="ORCLDG" SID="*"; 5. 设置文件路径的转换,当RMAN还原的时候,主备库路径不一致的时候能够进行绝对路径的转换(实质是绝对路径的字符集简单替换) alter system set DB_FILE_NAME_CONVERT="/oradata/orcldg/datafile/","+DATA/orcl/datafile/" scope=spfile;alter system set LOG_FILE_NAME_CONVERT="/oradata/orcldg/orl/","+DATA/orcl/onlineredo/" scope=spfile;备库目录在前,本库目录在后需要注意:这里的LOG_FILE_NAME_CONVERT,实际上就是在RMAN还原的时候,将原控制文件标注的online redo路径的指定字符转换到后面的字符注意不是standby redolog的路径,standby redolog的路径和这个没关系
注意:11g可以使用RMAN duplicate进行复制,但是本人多次都失败了...此处使用笨方法,RMAN备份还原1. 在主库上备份数据文件和控制文件run {allocate channel c1 type disk;allocate channel c2 type disk;allocate channel c3 type disk;backup incremental level 0 format "/home/oracle/rmanbackup/orcl_full_%U" database;backup format "/home/oracle/rmanbackup/orcl_full_stanctf_%U" current controlfile for standby;release channel c1;release channel c2;release channel c3;}
8. 恢复
1. 主库将备份传输到备库上scp orcl_full_* orcldg:/home/oracle/rmanbackup/ 2. RMAN恢复RMAN target/RMAN> restore standby controlfile from "/home/oracle/backup/orcl_full_stanctf_XXXXXX";RMAN> alter database mount;RMAN> catalog start with "/home/oracle/backup/orcl_full_";RMAN> run {allocate channel d1 type disk;allocate channel d2 type disk;allocate channel d3 type disk;restore database;release channel d1;release channel d2;release channel d3;} 解释:1. 恢复控制文件到spfile指定的位置;2. alter database mount;3. 创建RMAN恢复目录册 catalog,这样RMAN知道了所有备份的位置,下面才能直接restore database;
9. 创建standby redolog
1. 主端创建standby redolog --为了主备切换
standby redolog文件只是在备库上有用,是用来同步主库的online redo的,主库的时候是不起作用的但是为了主备切换的流畅,我们一样需要在主库上进行设置 1. 查看日志分组信息和大小信息SQL> col status format a10;SQL> select thread#, GROUP#,SEQUENCE#,BYTES/1024/1024,STATUS,FIRST_TIME from v$log;
SQL> col status format a10;
SQL> select thread#, GROUP#,SEQUENCE#,BYTES/1024/1024,STATUS,FIRST_TIME from v$log;
THREAD# GROUP# SEQUENCE# BYTES/1024/1024 STATUS FIRST_TIM
GROUP 7("/oradata/orcldg/srl/srl07.log") SIZE 50M,
GROUP 8("/oradata/orcldg/srl/srl08.log") SIZE 50M,
GROUP 9("/oradata/orcldg/srl/srl09.log") SIZE 50M,
GROUP 10("/oradata/orcldg/srl/srl10.log") SIZE 50M;
ALTER DATABASE ADD standby LOGFILE THREAD 2
GROUP 11("/oradata/orcldg/srl/srl11.log") SIZE 50M,
GROUP 12("/oradata/orcldg/srl/srl12.log") SIZE 50M,
GROUP 13("/oradata/orcldg/srl/srl13.log") SIZE 50M,
GROUP 14("/oradata/orcldg/srl/srl14.log") SIZE 50M;
好了,standby redolog配置完成了
10. 跑归档使主备之间同步
备端恢复数据文件完成后,开启介质恢复进程,将主库的归档日志恢复到备库。备端启动恢复进程mrp0SQL> alter database recover managed standby database using current logfile disconnect from session;备端查询是否有mrp0进程SELECT PROCESS, STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS, DELAY_MINS FROM V$MANAGED_STANDBY;
SQL> SELECT PROCESS, STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS, DELAY_MINS FROM V$MANAGED_STANDBY;
PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS DELAY_MINS