SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;
--如无,开启
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
2,简略描述下相关logical standby db creation processes
--就是切下日志,让上面supplemental logging生效,日志不能共存于:no and yes
ALTER SYSTEM ARCHIVE LOG CURRENT;
--在主库添加一个专用于logical standby db的表空间,为什么呢?一般用于管理它们的信息全存储在system表空间,呵,为了减负;所以。
CREATE TABLESPACE logmnrts DATAFILE '/disk1/oracle/dbs/logmnrts.dbf'
2> SIZE 25M AUTOEXTEND ON MAXSIZE UNLIMITED;
SQL> EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts');
---shutdown immediate 主库,cp or scp 所有v$datafile内容
---把主库startup mount,生产出一个用于logical standby db的控制文件
SQL> ALTER DATABASE BACKUP CONTROLFILE TO
2> '/disk1/oracle/oradata/payroll/standby/payroll3.ctl';
---为了防止在构建logical dg,有不法分子对主库进行ddl and dml
ALTER SYSTEM ENABLE RESTRICTED SESSION;
---open 主库,且生成用于logical db的dictionary
SQL> ALTER DATABASE OPEN;
SQL> EXECUTE DBMS_LOGSTDBY.BUILD;
--归档当前主库日志,且查询最新的归档日志,这个信息,要用于在权建的备库上注册及应用哟,很重要的
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
SQL> SELECT NAME FROM V$ARCHIVED_LOG
2> WHERE (SEQUENCE#=(SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG
3> WHERE DICTIONARY_BEGIN = 'YES' AND STANDBY_DEST= 'NO'));
--根据主库,生成备库的pfile
需要注意几个参数,其他无异
instance_name--不同于主库的sid
lock_name_space --同上
standby_archive_dest --这目录,就是主库rfs过来的归档存储地哟
---startup mount pfile --mount备库
--如备库数据文件及日志文件所在与主库有所不同,运行如下脚本
SQL> ALTER DATABASE RENAME FILE '/disk1/oracle/oradata/payroll/system01.dbf'
2> TO '/disk1/oracle/oradata/payroll/standby/system01.dbf';
SQL> ALTER DATABASE RENAME FILE '/disk1/oracle/oradata/payroll/undotbs01.dbf'
2> TO '/disk1/oracle/oradata/payroll/standby/undotbs01.dbf'
SQL> ALTER DATABASE RENAME FILE '/disk1/oracle/oradata/payroll/cwmlite01.dbf'
2> TO '/disk1/oracle/oradata/payroll/standby/cwmlite01.dbf'
.
SQL> ALTER DATABASE RENAME FILE '/disk1/oracle/oradata/payroll/redo01.log'
2> TO '/disk1/oracle/oradata/payroll/standby/redo01.log';
---为了防止有淘气小孩,破坏备库内容
SQL> ALTER DATABASE GUARD ALL;
SQL> ALTER DATABASE OPEN RESETLOGS;
--逻辑备库的db_name要用dbnewid修改下,在未重启备库前,重新生成密码文件及pfile中的db_name
shutdown immeidate
startup mount pfilr
nid TARGET=SYS/password@PAYROLL3 DBNAME=PAYROLL3 --
orapwd --生成备库新的密码文件
vi pfile --备库的哟,改db_name与nid的信息一致
--这下以上db_name修改好了,关闭备库,启动备库到mount
shutdown immediate
sqlplus '/as sysdba'
create spfile from pfile='备库pfile' ---发现原来实例在未到nomount也可以根据pfile生成spfile
--open resetlogs备库
alter database open resetlogs;
---为备库删除已存在或添加新的临时文件
select * from v$tempfile;
如有,删除
ALTER DATABASE TEMPFILE 'tempfilename' DROP;
添加临时文件
SQL> SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE
2> CONTENTS ='TEMPORARY';
TABLESPACE_NAME
--------------------------------
TEMP
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE
2> '/disk1/oracle/oradata/payroll/standby/temp01.dbf'
3> SIZE 40M REUSE;
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE
2> '/disk1/oracle/oradata/payroll/standby/arc0004.001';
--开启备库sql apply
ALTER DATABASE START LOGICAL STANDBY APPLY INITIAL;--注意用了initial,因为首次开启,以后就可以不用这个选项了
可以采用如下
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-626852/ ,如需转载,请注明出处,否则将追究法律责任。