linux下10goracle datagard(stand…
来源:互联网 发布:mysql异地容灾方案 编辑:程序博客网 时间:2024/05/17 07:11
DataGard(搭建版)
分类: DG/RAC 2011-08-27 00:06 244人阅读 评论(0) 收藏 举报
物理DataGard搭建、主备switchover、物理DataGard转逻辑DataGard
第一大步:基本信息配置:
配置主机名:
hostname dg01.cluster.com
vim /etc/hosts
10.1.1.36 dg01.cluster.com
10.1.1.37 dg02.cluster.com
vim /etc/sysconfig/network
主库操作:
SQL> alter database force logging;
DG两个库还会分为一些情况:
两个库的实例名是否一致?
两个库的db_name,instance_name,sid都可以一致
但是 db_unique_name 需要不一致
SQL> alter system set db_unique_name=priscope=spfile;
--因为这个是静态参数,所以只能改到spfile里,然后再重启数据库,那就违背了不关库的原则,那么你可以在这里不改,就用orcl,只改备库就好了;
--此实验为了方便,还是在这里改了一下,并重启生效
SQL> show parameter db_unique_name
NAME
------------------------------------ -----------------------------------------
db_unique_name
SQL> alter system setlog_archive_config='dg_config=(pri,std)';
SQL> ho mkdir /u01/oracle/arch
SQL> alter system setlog_archive_dest_1='location=/u01/oracle/arch/valid_for=(all_logfiles,all_roles) db_unique_name=pri';
SQL> alter system setlog_archive_dest_2='service=std lgwr asyncvalid_for=(online_logfiles,primary_role) db_unique_name=std';
SQL> show parameter log_archive_dest_state_1
SQL> show parameterlog_archive_dest_state_2
SQL> show parameter log_archive_format
NAME
------------------------------------ -----------------------------------------
log_archive_format
SQL> alter system set fal_server=std;
SQL> alter system setfal_client=pri;
=================================================
DB_FILE_NAME_CONVERT='boston','chicago'
LOG_FILE_NAME_CONVERT=
--上面两个参数是官档上定义不同路径转换时用的,(也就是两个库路径不同,需要这样定义来转换)
--我们这里为了方便,做的两个库,路径是相同的,所以就不需要上面的两个参数
==============================================
SQL> alter system setstandby_file_management=auto;
SQL> alter database add standby logfile group 5'/u01/oracle/oradata/orcl/stredo5.log' size 50m;
SQL> alter database add standby logfile group 6'/u01/oracle/oradata/orcl/stredo6.log' size 50m;
SQL> alter database add standby logfile group 7'/u01/oracle/oradata/orcl/stredo7.log' size 50m;
SQL> alter database add standby logfile group 8'/u01/oracle/oradata/orcl/stredo8.log' size 50m;
--至此,参数修改完毕,然后由修改后的spfile创建一个pfile文件,以便拷到备库修改使用
SQL> create pfile from spfile;
第二大步:
[oracle@dg01 ~]$ mkdir /u01/oracle/bak
RMAN> backup format '/u01/oracle/bak/full_%U'database plus archivelog;
RMAN> backup format '/u01/oracle/bak/con_%U'current controlfile for standby;
第三大步:
考虑拷贝什么到备库
nomount
mount
open
密码文件
所以要拷pfile (拷过去再修改),controlfile的备份(con_%U),全备(full_%U),密码文件
对备库的软件安装需求:
装oracle软件(路径保持一致),不需要装库
mkdir /u01/oracle/oradata/orcl
mkdir /u01/oracle/admin/orcl/{a,b,u,dp,c}dump -p
mkdir /u01/oracle/arch
mkdir /u01/oracle/bak
--创建这些目录,注意使用oracle用户去创建
[oracle@dg01 ~]$ scp /u01/oracle/10g/dbs/initorcl.oradg02.cluster.com:/u01/oracle/10g/dbs/
[oracle@dg01 ~]$ scp /u01/oracle/bak/*dg02.cluster.com:/u01/oracle/bak/
[oracle@dg02 ~]$ orapwd file=/u01/oracle/10g/dbs/orapworclpassword=oracle force=y
--注意,scp拷的时候请用oracle用户,否则用root用户拷过来,要修改权限
第四大步:
监听的配置
--主库上的监听配置
[oracle@dg01 ~]$ vim/u01/oracle/10g/network/admin/listener.ora
--注意要为dg01的主机名,或者ip,端口1521
[oracle@dg01 ~]$ vim/u01/oracle/10g/network/admin/tnsnames.ora
ORCL =
--这一段是本来就有的,下面两段是加的
pri =
std =
--备库上的监听配置
[oracle@dg02 ~]$ vim/u01/oracle/10g/network/admin/listener.ora
--要为备库的主机名或者IP,端口也为1521
[oracle@dg02 ~]$ vim/u01/oracle/10g/network/admin/tnsnames.ora
ORCL =
--这一段默认就有,下面两段是加的
pri =
std =
两边配置好监听后使用lsnrctl start命令启动监听
然后两边互相tnsping orcl
--上面都互相能tnsping通,最好在备库上远程连接一下主库,要求成功,才说明监听没问题
[oracle@dg02 ~]$ uniread sqlplus sys/oracle@pri as sysdba
第五大步:恢复备库,使之和主库同步
--先修改主库上拷过来的pfile,把std和pri互换,注意手动去做,不要去替换
[oracle@dg02 ~]$ vim /u01/oracle/10g/dbs/initorcl.ora
orcl.__db_cache_size=83886080
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=71303168
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/oracle/admin/orcl/adump'
*.background_dump_dest='/u01/oracle/admin/orcl/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u01/oracle/oradata/orcl/control01.ctl','/u01/oracle/oradata/orcl/control02.ctl','/u01/oracle/oradata/orcl/control03.ctl'
*.core_dump_dest='/u01/oracle/admin/orcl/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='/u01/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.db_unique_name='std'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='std'
*.fal_server='pri'
*.job_queue_processes=10
*.log_archive_config='dg_config=(std,pri)'
*.log_archive_dest_1='location=/u01/oracle/arch/valid_for=(all_logfiles,all_roles)db_unique_name=std'
*.log_archive_dest_2='service=pri lgwr asyncvalid_for=(online_logfiles,primary_role) db_unique_name=pri'--换,但是primary这是个单词不要换成stdmary
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=167772160
*.standby_file_management='AUTO'
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/oracle/admin/orcl/udump'
[oracle@standby oracle]$ mkdir -pflash_recovery_area/OAR10G/onlinelog/
[oracle@dg02 ~]$ uniread sqlplus / as sysdba
Connected to an idle instance.
SQL> create spfile from pfile;--备库是空闲实例状态时也可以创建spfile
SQL> startup nomount
--在备库上进行操作
[oracle@dg02 ~]$ uniread rman target sys/oracle@pri auxiliary/
connected to target database: ORCL (DBID=1271897179)
connected to auxiliary database (not mounted)
--可以从连接信息看到是同时连到主和备(注意此时主库为open状态,备库为nomount状态)
RMAN> duplicate target database for standbynofilenamecheck;
--把拷过来的备份(全备和控制文件备份)进行恢复,如果两个库路径一致,就可以加上nofilenamecheck
[oracle@dg02 ~]$ uniread sqlplus / as sysdba
--恢复完成后,备库自动会由nomount状态到mount状态;现在退出rman,连接sqlplus
SQL> recover managed standby database disconnectfrom session;
Media recovery complete.
--这句话是打开日志传递应用功能
--至此,dg搭建完成;现在可以进行验证
验证方法:
主库上alter system switch logfile;
然后去备库archive log list;查看当前的归档日志序列号是否跟着变动,并且和主库一致;如果是,表明成功
也可以创建一个小表空间,再切换日志,在备库的物理上能看到这个dbf也表明成功
==============================================================================
关闭DG
先关主,再关备
开启DG
先开备,再开主
关闭的方法:
主
SQL> shutdown immediate
备:
SQL> recover managed standby database cancel;--取消日志应用功能
SQL> shutdown immediate
然后关闭监听
启动的方法:
先启监听
备:
SQL> startup nomount
SQL> alter database mount standby database;
SQL> recover managed standby database disconnectfrom session;
主:
SQL> startup
===========================================
备库现在是mount状态,不能查询数据
物理DG
那么可以把它open read only;如果read only,备库就只能查询,这种读写分离比较变相;
因为备库open后,就不应用日志,那么你这种查询或者做备份都是只能查和备open以前的数据
物理DG
主
备库操作:
SQL> recover managed standby database cancel;
SQL> alter database open readonly;
--open readonly后,可以在主库建一个表,并切换日志;备库进行查询,发现查不到,说明只要open了就不可以应用日志
--那么想要备库能查询这个刚建的表,需要切回到mount状态去应用日志,再关闭应用日志,打开到open readonly状态
主库:
SQL> create table dcw(id number,namevarchar2(10));
Table created.
SQL> insert into dcw values(01,'dcw');
1 row created.
SQL> select * from dcw;
---------- ----------
SQL> alter system switch logfile;
System altered.
SQL> select * from dcw;
---------- ----------
备库:
SQL> select * from dcw;
select * from dcw
ERROR at line 1:
ORA-00942: table or view does notexist
SQL> alter databaseclose;
(SQL> select * from dcw;
no rows selected)
SQL> recover managed standby database disconnectfrom session;
SQL> recover managed standby database cancel;
SQL> alter database open read only;--再一次readonly后,就可以查询到这张表了
SQL> select * from dcw;
---------- ----------
--最好是不要把备库open read write;因为备库能写那么写的改变不能传回主库,就会造成两边不一致;
==================================================================================
主备切换:
切换顺序,把主切换成从;再把从切换成主
--原来的主库上切成备的操作:
SQL> select database_role,switchover_status fromv$database;
DATABASE_ROLE
---------------- --------------------
PRIMARY
SQL> alter database commit to switchover tophysical standby with session shutdown;
SQL> shutdown immediate
SQL> startup nomount
SQL> alter database mount standby database;
SQL> recover managed standby database disconnectfrom session;
SQL> select database_role,switchover_status fromv$database;
DATABASE_ROLE
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY
--原来的备库切成主库的操作:
SQL> select database_role,switchover_status fromv$database;
DATABASE_ROLE
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY
SQL> alter database commit to switchover toprimary with session shutdown;
=============================================================
--切的时候报了下面错误;发现是上面的实验把备库open read only了,所以提示需要介质恢复;那么(alterdatabase close),
再应用日志(recover managed standby database disconnect fromsession;),再来切换就可以了
SQL> alter database commit to switchover toprimary with session shutdown;
alter database commit to switchover to primary with sessionshutdown
*
ERROR at line 1:
ORA-16139: media recovery required
=============================================================
SQL> shutdown immediate
SQL> startup
SQL> select database_role,switchover_status fromv$database;
DATABASE_ROLE
---------------- --------------------
PRIMARY
--按照上面的步骤再切换回来,也是OK的
v$database Switchover_Status值的含义
NOT ALLOWED
当前的数据库不是带有备用数据库的主数据库
PREPARING DICTIONARY
该逻辑备用数据库正在向一个主数据库和其他备用数据库发送它的重做数据,以便为切换做准备
PREPARING SWITCHOVER
接受用于切换的重做数据时,逻辑备用配置会使用它
RECOVERY NEEDED
备用数据库还没有接收到切换请求
SESSIONS ACTIVE
在主数据库中存在活动的SQL会话;在继续执行之前必须断开这些会话
SWITCHOVER PENDING
适用于那些已收到主数据库切换请求但是还没有处理该请求的备用数据库
SWITCHOVER LATENT
切换没有完成并返回到主数据库
TO LOGICAL STANDBY
主数据库已经收到了来自逻辑备用数据库的完整的字典
TO PRIMARY
该备用数据库可以转换为主数据库
TO STANDBY
该主数据库可以转换为备用数据库
================================================================================
逻辑DG:
物理DG:通过redo apply来恢复进行同步
逻辑DG:通过sql apply来恢复进行同步(因为有些sql操作是有限制的,不能实现100%的容灾)
逻辑DG可以在open状态下完成数据同步(物理DGopen状态下不能应用日志)它的物理结构可以不一致(因为物理DG的恢复原理是需要物理上结构一致的,
位置要相同,而逻辑DG的sql应用,只关心逻辑上是否是同一个名称,物理结构可以不一致)
逻辑DG可以应用于读写分离的架构,或者是抽样查询等
逻辑DG的实现:通过物理DG转换成逻辑DG
1,备库关闭日志应用:
SQL> recover managed standby database cancel;
2,主库运行dbms_logstby.build
SQL> exec dbms_logstdby.build
SQL> alter system archive logcurrent;
3,再来备库操作:
SQL> alter database recover to logical standbyorcl;
SQL> shutdown immediate
SQL> startup mount
SQL> alter database open resetlogs;
SQL> alter database start logical standby apply[immediate];
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
LOGICAL STANDBY
DataGard维护版 2011-08-27 01:12:07
标签:DG 创建备库 DataGard
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处、作者信息和本声明。否则将追究法律责任。http://gldbhome.blog.51cto.com/1552935/649864
创建data guard , 利用rman duplicate 命令创建physicalstandby
创建备库前准备工作,备库参数文件,同时连接主数据库和备数据库,启动到nomount状态,
备库必须工作recover managed模式下才能应用主库的redo数据;
整体系统结构包含三部分:
1,oracle 服务器: 作为主节点,承担用户连接和数据库服务 ;
2,oracle备用服务器:承担针对主节点数据跟踪,时时备份责任,在系统遭难情况下直接转移到这台服务器,实现几分钟内的灾难恢复
3,专用网络:连接数据库服务器和备用数据库服务器之间的专用网络,避免公用网络出现故障时主库于备库之间无法通信
主库:实时工作的数据库
备库:接受主库日志及时应用日志(归档日志或联机日志,默认传递的是联机日志)的一种备份数据库;
它会把从主库传过来的日志进行日志恢复操作(前滚),这就是日志应用
维护时容易出问题的三个地方:1、主库是否传了日志 2、备库是否接受了日志 3、备库是否对传过来的日志做了recover
开始前的准备:
1、修改/etc/hosts文件,将两台oracle服务器的hostname和对应的IP地址一一对应。
环境变量配置:
两边oracle_sid=
---库名叫:db
数据库结构:
--###################################################################################################
--RMAN在线DG做法(数据库不关闭的情况下)
--###################################################################################################
--第一步;
oracle 连接主库,启动的mount状态
修改数据库强制记录日志:
SQL> startup
SQL> alter database forcelogging;
SQL> alter database archivelog;-----> 启用归档。
SQL> create pfile='$ORACLE_HOME/dbs/initpdb.ora'from spfile;
File created.
SQL> shutdown immediate---->日志,归档,pfile文件 都准本好后,关闭数据库。
--修改刚刚创建的pfile文件,在最后面加上下列内容:opt/oracle/product/10g/dbs/initpdb.ora
pdb.__db_cache_size=96468992
pdb.__java_pool_size=4194304
pdb.__large_pool_size=4194304
pdb.__shared_pool_size=58720256
pdb.__streams_pool_size=0
*.audit_file_dest='/opt/oracle/admin/db/adump'
*.background_dump_dest='/opt/oracle/admin/db/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/opt/oracle/oradata/db/control01.ctl','/opt/oracle/oradata/db/control02.ctl','/opt/oracle/oradata/db/control03.ctl'
*.core_dump_dest='/opt/oracle/admin/db/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='db'
*.db_recovery_file_dest='/opt/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=pdbXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=167772160
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/opt/oracle/admin/db/udump'
*.db_unique_name='pdb'
log_archive_config='dg_config=(pdb,sdb)'
fal_server=sdb
fal_client=pdb
log_archive_dest_1='location=/opt/oracle/archivelog/'
log_archive_dest_2='service=sdb lgwr syncaffirm
---->备库通过lgwr进程,用sync的方式进行日志传递给备库。
log_archive_dest_state_1=ENABLE
log_archive_dest_state_2=ENABLE
standby_file_management=AUTO
--###################################################################################################
--pfile 文件修改完毕后启动数据库,启动到nomount 状态,指定 initpdb.ora 文件来启动。
mkdir /opt/oracle/archivelog
SQL> startup nomountpfile='$ORACLE_HOME/dbs/initpdb.ora';
ORACLE instance started.
Total System Global Area
FixedSize
VariableSize
DatabaseBuffers
RedoBuffers
SQL> alter database mount;
SQL> alter database open;
--OK!在数据库open状态下,接下来用RMAN备份工具备份主库的控制文件和数据文件。
--第2步,rman 备份数据库,先建立一个 bak 目录,然后再备份:
RMAN> backup format '/opt/oracle/bak/bk_%U'current controlfile for standby ;
RMAN> backup format '/opt/oracle/bak/backup_%U'database plus archivelog;
--复制pfile文件,密码文件,RMAN备份文件到备库:(在复制之前,确保备库有/opt/oracle/bak该目录,没有先建立)
--[oracle@li dbs]$ scp initpdb.oraoracle@10.1.1.110:$ORACLE_HOME/dbs/initsdb.ora
--(重点注意的是密码文件CP过去后记得要改成orapw备库的SID,否则用主库远程登录备库的话会报权限不足的错误)
The authenticity of host '10.1.1.110 (10.1.1.110)' can't beestablished.
RSA key fingerprint is42:bd:f2:c6:1f:6f:f0:af:0e:14:7e:69:e8:1c:af:93.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.1.1.110' (RSA) to the list ofknown hosts.
oracle@10.1.1.110's password:
initpdb.ora
--[oracle@li dbs]$ scp orapwpdboracle@10.1.1.110:$ORACLE_HOME/dbs/orapwsdb
oracle@10.1.1.110's password:
orapwpdb
--[oracle@li dbs]$ scp
--###################################################################################################
--第二步:再修改备库
--编辑刚刚从主库上SCP过来的pfile文件:initpdb.ora 并且先要修改文件名为initsdb.ora.
vim
sdb.__db_cache_size=96468992----->注意:SCP过来的文件前五行都是pdb开头的,这是备库,前五行要修改为sdb,否则会不成功。
sdb.__java_pool_size=4194304
sdb.__large_pool_size=4194304
sdb.__shared_pool_size=58720256
sdb.__streams_pool_size=0
*.audit_file_dest='/opt/oracle/admin/db/adump'
*.background_dump_dest='/opt/oracle/admin/db/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/opt/oracle/oradata/db/control01.ctl','/opt/oracle/oradata/db/control02.ctl','/opt/oracle/oradata/db/control03.ctl'
*.core_dump_dest='/opt/oracle/admin/db/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='db'
*.db_recovery_file_dest='/opt/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=pdbXDB)'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=167772160
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/opt/oracle/admin/db/udump'
*.db_unique_name='sdb'
log_archive_config='dg_config=(sdb,pdb)'---->主备实例名。
fal_server=pdb
fal_client=sdb
log_archive_dest_1='location=/opt/oracle/archivelog/'
log_archive_dest_2='service=pdb lgwr syncaffirm
log_archive_dest_state_1=ENABLE
log_archive_dest_state_2=ENABLE
standby_file_management=AUTO
--###################################################################################################
--第三步:主库和备库上分别配监听服务:
----------------------------主库配置 tnsnames.ora文件的配置:--------------------
--------/opt/oracle/product/10g/network/admin/tnsnames.ora
PDB =
PDB =
SDB =
----------------------------------------------------------------------------------
---------------------备库的配置 tnsnames.ora 文件配置:-------------
--------/opt/oracle/product/10g/network/admin/tnsnames.ora
SDB =
PDB =
SDB =
启监听lsnrct start
再两边tnsping pdb
--###################################################################################################
sdb: (备库)
--在备机上创建目录/opt/oracle/oradata/db
--在备机上做rman恢复数据之前现建立目录:/opt/oracle/admin/db/{a,b,c,u,dp}dump
--上面的目录用oracle用户来建确保是目录属主是oracle:oinstall
[oracle@node110 ~]$ rman target sys/oracle@pdb auxiliary /--用这个命令就是主备一起连,这时的主一直都是开的状态
Recovery Manager: Release 10.2.0.4.0 - Production on Tue Nov 1712:10:03 2009
Copyright (c) 1982, 2007, Oracle.
connected to target database: DB (DBID=1466977278)
connected to auxiliary database: DB (notmounted)
RMAN> duplicate target database for standbynofilenamecheck; --用这个命令把拷过来的归档日志恢复成和主库同步的备库
--nofilenamecheck是主库和备库路径名一致的情况下不检测路径名,如果路径名不一致的话要用下面的参数来转换路径
db_file_convert='/opt/oracle/oradata/pdb/','/opt/oracle/oradata/sdb/'
log_file_convert='
--退出RMAN,登录sqlplus ,然后运行命令:
---SQL> alter database recover managed standbydatabase disconnect from session; --这句命令是在备库上启用日志传递功能
--查看备用数据库的日志应用情况:
SQL> selectsequence#,first_time,next_time,applied from v$archived_log order bysequence#;
---------- --------- --------- ---
---------- --------- --------- ---
14 rows selected.
-------------------------------------------------------------------------------------------------------------------------
--在主上切换日志,同时在备库上产看日志状态:
SQL> alter system switch logfile;
System altered.
SQL> selectsequence#,first_time,next_time,applied from v$archived_log order bys
---------- --------- --------- ---
---------- --------- --------- ---
15 rows selected.
-----------------------------------------------------------------------------------------------------------------------------------
在这里就会看到,主库上切换一次,在备库上查的时候就会多出一行记录。这说明DG已经可以数据同步了。
---SQL> recover database managed standby databasecancel; --这一句是关闭日志传递功能
--##################################################################################################
DG启动方式:
先启动备库,并启用日志恢复,然后启动主库
备:lsnrctl start
tnsping pri
tnsping orcl
sqlplus "/as sysdba"
startup mount
alter database recover database managed standby databasedisconnect from session;
主:
lsnrcrl start
tnsping orcl
tnsping pri
tnsping std
sqlplus "/as sysdba"
startup
验证:主库切日志,备库看是否变化
DG关闭方式:
先主库关闭:shutdown
然后备库:停止日志应用,recover database managed standby databasecancel;
然后备库是否要shutdown看自己
--##############################################################################################
--关闭数据库的DG做法(数据库关闭后把主库同步到备库)
--###############################################################################################
DG
1、物理硬件结构一致
2、操作系统尽量一致(10gR2版本后,X86的linux平台可以和windows平台做DG,但是有很多bug,不建议)
3、oracle产品版本尽量一致
4、强制日志记录 forcelogging
5、主库相关参数定义
SQL> show parameter log_archive_dest
NAME
------------------------------------ -----------------------------------------
log_archive_dest
log_archive_dest_1
log_archive_dest_10
log_archive_dest_2
log_archive_dest_3
log_archive_dest_4
log_archive_dest_5
log_archive_dest_6
log_archive_dest_7
log_archive_dest_8
log_archive_dest_9
还有采用哪一种进程传递 (lgwr,arcn)
6、在主库得到备库控制文件
7、定义切换参数,备库日志(不做切换的话就不用定义)
8、关闭,备份
9、配置网络监听,网络服务NET8
备库:
1、在备库中安装与主库一致的oracle
2、把主库的备份拷到备库
3、定义一个pfile,修改参数
4、用主库得到控制文件启到到nomount 然后alter database mount standby;(能到mount就表示是备库)
5、配置网络
6、在备库启动日志恢复
7、测试日志传递是否正常
实际操作:
主库:
1。SQL>select force_logging from v$database;
2。archive log list
定义参数
SQL>alter system set db_unique_name='pri'scope=spfile; 改db_unique_name
SQL>alter system set log_archive_config='dg_config=(pri,std)';--定义哪些电脑可以进行电脑的读写,远程接收 pri,std为定义的主备名
SQL>alter system setlog_archive_dest_1='location=/opt/oracle/oradata/orcl/arch/ lgwrsync valid_for=(all_logfiles,all_roles) db_unique_name=pri';
SQL>alter system set log_archive_dest_2='service=std lgwr asyncvalid_for=(online_logfiles,primary_role)db_unique_name=std';--这里的2也可以用别的3-9,但不能用1,因为前面用过了
SQL> alter system setlog_archive_config='dg_config=(pri,std)'
SQL> show parameterlog_archive_dest_state_1
SQL> show parameterlog_archive_dest_state_2
SQL>show parameter log_archive_format--看日志格式参数是否定义 %t_%s_%r.dbf 必须包含%t,%s,%r,不区分大小写
--再定义以后可以让这台主库切换成备库的参数
SQL> show parameter fal_
NAME
------------------------------------ -----------------------------------------
fal_client
fal_server
SQL>alter system set fal_client=pri;
SQL>alter system set fal_server=std;
SQL> show parameter standby
NAME
------------------------------------ -----------------------------------------
standby_archive_dest
standby_file_management
SQL>alter system set standby_file_management=auto;
--##########################################################################
--再在主库上定义切换成备库后用的日志组
SQL> select group# from v$logfile;
----------
SQL> select group#,thread# from v$log;
---------- ----------
SQL>alter database add standby logfile group 5'/opt/oracle/oradata/orcl/sredo01.log'size 50m;--定义备库日志组
SQL>alter database add standby logfile group 6'/opt/oracle/oradata/orcl/sredo02.log'size 50m;
SQL>alter database add standby logfile group 7'/opt/oracle/oradata/orcl/sredo03.log'size 50m;
SQL>alter database add standby logfile group 8'/opt/oracle/oradata/orcl/sredo04.log'size 50m;
--上面在主库加的日志组,现在主库用不到,但是当切换后,主库变成备库的时候就要用到了
--在主库中创建备库控制文件
SQL>alter database create standby controlfile as'/opt/oracle/oradata/orcl/scon.ctl';
--这里加了standby关键字,库的状态是主还是备,就是在控制文件中定义出来的,所以这个控制文件只能用来做备库的控制文件;这里创建到数据文件目录下方便后面拷到备库
SQL> createpfile='/opt/oracle/oradata/orcl/initorcl.ora' fromspfile;--创建一个pfile文件,这里创建到了数据文件目录里去了,只是为了拷的时候方便而已
File created.
SQL>shutdown immediate
SQL>startup
SQL>shutdown immediate
--再配置网络服务
cd $ORACLE_HOME/network/admin
lsnrctl start
--再注意的是密码文件
因为日志传递与应用是以sys用户来验证的,所以密码文件很重要,如果知道sys用户密码的话可以重建一个,如果不知道的话直接cp一个。
--注意的是如果两边的实例名不相同,cp的密码文件记得改下名
如果是虚机的话
下面是不是拷虚机的步骤
--备份并拷到备份
rsync -avlR -e ssh备库的ip:/opt/oracle/oradata/orcl
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
下面是在备库上开始操作了
首先,因为主库上的相关文件都同步到备库的/opt/oracle/oradata/orcl 下了(--先确定一下权限,不是的话改成oracle.oinstall)
cd /opt/oracle/oradata/orcl
--做pri和std的对换(注意手工去改,替换的话第一次替换就都是一个值了,分不清了,log_archive_config='dg_config=(pri,std)'这个参数里两个改不改无所谓)保存
cp initorcl.ora
cp orapworcl/opt/oracle/product/10g/dbs
cp scon.ctl control01.ctl
cp scon.ctl control02.ctl
cp scon.ctl control02.ctl --把备库的控制文件改名成那三个镜像的名字
--改监听
cd /opt/oracle/10g/network/admin
vi tnsname.ora
-- 可以直接到主库配好的拷过来
加的三段参考下面的,主库上也和这里一样
-------------------------------------------------------------------------
orcl =
pri =
std =
---------------------------------------------------------------------
vi listener.ora
lsnrctl start
在备库建立目录 mkdir /opt/oracle/admin/orcl/{a,b,c,u,dp}dump
vi ~/.bash_profile
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/10g
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH --修改好环境变量
source .bash_profile
--启到数据库到mount状态
sqlplus "/as sydba"
startup nomount
create spfile from pfile; --因为备库是改的pfile文件,这里创建spfile
startup force nomount;
alter database mount standby database;
开了
alter database recover managed standby database disconnect fromsession; --打开日志应用功能
--测试
tail -f /opt/oracle/admin/orcl/bdump/alert_orcl....
去主库alter system switch logfile;--备库看警告日志变化,看到序列号变化,表示日志可以同步过来
去主库建表空间,建表,备库也能同步过来
--#########################################################################################################
--.备库查询
在备库中启动到mount状态,先退出日志应用,然后只读打开数据库,可以查询数据库的数据,可作报表查询,测试只用
在standby备库上
1.alter database recover managed statndby database cancel;--关闭日志应用
2.alter database open read only; --只读打开
--oracle同步软件
如果三台库,都是同步的,只有一台是可读可写,另外两台都是只能查询的
要实现这种架构就可以用dg来实现,如果是11g的话能open状态同步,还有就是用stream流技术来做,但是相当麻烦,并且很多bug;所以就造成做这种同步的第三方软件非常多,
最出名的就是query公司的产品(淘宝网里的同步就是query公司的软件,按cpu收费,一个cpu就要20多W一年;很贵,现在玩不起了,换mysql了)
--DG环境的连接问题:
写脚本,写一个查看主库是否为open状态,再写一个查询主库一个表中的一行记录,如果能查到表示主库正常
关于主备切换后,程序端(例如jsp,php,asp等)访问数据库的IP地址问题
1.程序可以写成动态的,当主备切换后,程序可以动态连接open状态的,不过这对程序端比较痛苦
2.或者在主备库两个服务器上再加上一个网段,把另一个网段做成VIP的方式,对其进行IP切换,程序那边就写着连接这个VIP就可以了
3.或者直接做一个 HA, 但有风险,从库有可能启不启不来,要进行介质恢复,能不能恢复还不一定;
原因有 1.主库没来得及归档就断电,
有个好的解决方法就是:主和库备同时挂一台存储(这个存储放的就是日志文件)
--主备切换:
switchover:
一:primary数据库转换为standby角色。
二:standby 数据库转换为primary角色。
注意:切换时,先把主切换成从,在把从切换为主。
1,主
SQL> select database_role from v$database;
primary
SQL>
SQL>
SQL>
SQL>
standby
SQL>
SQL>
报错:
SQL>
SQL>
SQL>
验证角色:
SQL>
SQL>
二:failover
一般情况下,failover 都表示primary数据库瘫痪,最起码是起不来的,这种类型操作基本上需要primary作什么操作。
1,检查归档文件是否连续
查询standby数据库的v$archive_gap 视图,确认归档文件是否连续
SQL>
如果返回记录为空,OK
如果有记录,按照列出的记录好复制对应的归档文件到代转换的standby服务器上,必须确所有声称的归档文件均已经在standby服务器上
alter
3,启动failover
SQL>
-----force
开关机顺序:
正确开关机顺序
关机:先关主 后关备
开机:现开备 在开主
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
--逻辑DG的实现:
logicalstandby:可以实现在open状态下完成同步数据,这时只能同步数据,不能实现完整的备份。100%的容灾实现不了。
逻辑的备库是挖掘主库传递过来的日志为sql语句。然后执行sql语句达到同步的目地,所以它是逻辑结构一致,物理结构不一致。
作用在于实现只读的服务,如读写分离的架构的应用,测试,决策做数据抽样查询。
没有一套完整的逻辑DG的实现办法,只能从物理的备库转到逻辑备库。
1。--备库停止日志应用。
alter database recover database managed standby databasecancel;
2。--主库转成逻辑备库的支持。
exec dbms_logstdby.build
PL/SQL procedure successfully completed.
alter system archive log current; 进行归档
3。--备库转化到逻辑的。
alter database recover to logical standby orcl;这里如果报错,把数据库起到mount状态,起动日志应用,再关闭就好了。
shutdown immediate;
startup mount;
alter database openresetlogs;
4。--逻辑备库与主库同步数据。
alter database start logical standby apply [immediate];开始日志应用。
alter database stop logical standby apply[immediate];
alter database start logical standby applyimmediate;
SQL> alter database start logical standby applyimmediate;
alter database start logical standby apply immediate
*
ERROR at line 1:
ORA-16239: IMMEDIATE option not available without standby redologs
创建standby redologs:
alter database add standby logfile group 4'/opt/oracle/oradata/ora10G/standbyredo01.log' size 50M;
alter database add standby logfile group 5'/opt/oracle/oradata/ora10G/standbyredo02.log' size 50M;
alter database add standby logfile group 6'/opt/oracle/oradata/ora10G/standbyredo03.log' size 50M;
重新执行redo应用命令
alter database stop logical standby apply;
alter database start logical standby apply immediate;
5、验证环境
主库:
备库:
5。--要特别注意的:主库的变化可以到备库,而备库的变化不能到主库。
6。--逻辑备库的switchover
--先主到备,再备到主。
--主:
alter database prepare to switchover to logical standby;
--备:
alter database prepare to switchover to primary;
--同步数据在原来的主库上做:
alter database start logical standby apply;
7。--逻辑备库的failover。
alter database activate logical standby database finishapply;
--原来的主库就不能用了。
物理备库:有两种方式传(sync,async)。同步日志,进行日志应用,
逻辑备库:归档日志LogMiner挖掘-->sql语句-->sqlapply
sync:有了日志就传。
async:在联机日志归档前才会传,如果一直不归档我就一直不传。 可以加个delay=30 (分)
ARCH:传归档日志到备库。这个速度慢了,但性能是最好的。
LGWR:这个是默认的,传联机日志到备库,放到备库的联机日志中,备库才会归档。
LGWR不旦要进行本地日志归档,还要进行往备库传联机日志,所以LGWR进程的个数要增多,就先去增加归档进程的个数,LGWR的个数就自动增加了。
从物理备库可以到逻辑备库,但从逻辑备库不能再到物理备库了。
DG的三种保护模式。
最大保护模式:不充许丢日志。
最大可用模式:会先工作在最大保护模式下,当日志出了问题,就会切到最大可用模式。
上面两个在局域网上用的多些。
最大性能模式:充许丢日志。多用在于互联网上。
DG作为高可用的解决方案,其主要目标是 oracle 数据库层面的数据保护与容灾计划。主库与备库通过日志同步来保证
数据的同步。备库可以做为备份或查询用并能实现快速切换或灾难恢复。
作为高可用的解决方案,其主要目标是 oracle 数据库层面的数据保护与容灾计划。主库与备库通过日志同步来保证
数据的同步。备库可以做为备份或查询用并能实现快速切换或灾难恢复。
DG 的搭建方式有很多种方式,下面我用到的 4 种经典方案:
2.DG 原理
物理备库其实是采用备份与恢复的原理实现的。只不过被 oracle 处理成自动化而已。可以这样说:standby 是一个一
直在应用日志不停 recovery 的数据库。要么在应用日志,要么在等待下一个日志来应用。
而 日志的传递可以是归档日志也可以是联机日志。归档一般用 arch 进程负责传递。联机是 lgwr 负责传递或是
LNSn<10g 以后>进程传递。 日志接收由 RFS进程处理。
DataGuard 是一个集合,由一个 primary 数据库(生产数据库)及一个或多个 standby 数据库(最多 9个)组成。
组成 Data Guard 的数据库通过 Oracle Net连接,并且有可能分布于不同地域。只要各库之间可以相互通信,它们
的物理位置并没有什么限制,至于操作系统就更无所谓了(某些情况下),只要支持 oracle 就行了。
物理 standby 特点
灾难恢复及高可用性
物理 standby 提供了一个健全而且极高效的灾难恢复及高可用性的解决方案。 更加易于管理的switchover/failover角色转换及最更短的计划内或计划外停机时间。
数据保护
应用物理 standby 数据库,Dg 能够确保即使面对无法预料的灾害也能够不丢失数据。前面也提到物理 standby是基于块对块的复制,因此对象、语句统统无关,primary 数据库上有什么,
物理 standby 也会有什么。
分担 primary 数据库压力
通过将一些备份任务、仅查询的需求转移到物理 standby,可以有效节省 primary 数据库的 cpu 以及 i/o资源。
提升性能
物理 standby 所使用的 redo 应用技术使用最底层的恢复机制,这种机制能够绕过 sql级代码层,因此效率最高。
逻辑 standby 是通过接收 primary 数据库的 redo log 并转换成 sql 语句,然后在 standby数据库上执行 SQL 语句(SQL
Apply)实现同步,物理 standby 是通过接收并应用 primary 数据库的 redo log以介质恢复的方式(Redo Apply)实现同步。
逻辑 standby 是逻辑上与 primary 数据库相同,结构可以不一致。逻辑 standby 通过 sql 应用与primary 数据库保
持一致,也正因如此,逻辑 standby 可以以 read-write 模式打开,你可以在任何时候访问逻辑 standby数据库。同
样有利也有弊,逻辑 standby 对于某些数据类型以及一些 ddl,dml 会有操作上的限制。
逻辑 standby 的特点:
除了上述物理 standby 中提到的类似灾难恢复,高可用性及数据保护等之外,还有下列一些特点:
有效的利用 standby 的硬件资源
除灾难恢复外,逻辑 standby 数据库还可用于其它业务需求。比如通过在 standby数据库创建额外的索引、物化视图等提高查询性能并满足特定业务需要。又比如创建新的 schema(primary 数据库并不
存在)然后在这些 schema 中执行 ddl 或者 dml 操作等。
分担 primary 数据库压力
逻辑 standby 数据库可以在更新表的时候仍然保持打开状态, 此时这些表可同时用于只读访问。 这使得逻辑standby数据库能够同时用于数据保护和报表操作,从而将主数据库从那些报表和查询任务中
解脱出来,节约宝贵的CPU和I/O 资源。
平滑升级
比如跨版本升级啦,打小补丁啦等等,应该说应用的空间很大,而带来的风险却很小(前提是如果你拥有足够的技术实力。另外虽然物理standby 也能够实现一些升级操作,但如果跨平台的话恐怕就力不从
心),这是一种值的推荐的在线的滚动的平滑的升级方式。
switchover:转换 primary 数据库与 standby 数据库。switchover可以确保不会丢失数据。
failover:当 primary 数据库出现故障并且不能被及时恢复时,会调用 failover 将一个 standby数据库转换为新的 primary 数据库。在最大保护模式或最高可用性模式下,failover 可以保证不会丢失数据。
Data Guard 优点
Data Guard 的软硬件需求
linux 系统可以与 inter 架构下的 32 位 linux 系统组成一组 Data Guard。另外,如果服务器都运行于32 位的
话,64 位 HP-UX 也可以与 32 位 HP-UX 组成一组 Data Guard。
服务器有足够的磁盘空间用来接收及应用 redo 数据。
as4&linux as5),primary 数据库和 standby数据库的目录路径也可以不同。
2、 软件需求
免用户通过 nologging 等方式避免写 redo 造成对应的操作无法传输到 standby 数据库。
使用逻辑 standby 和物理 standby 。
覆盖。
也都需要采用 ASM/OMF。
Redologs 分 Online Redo Logs, Archived Redo Logs, Standby RedoLogs.
REDO:中文直译是重做,重做是 oracle 对操作的处理机制,我们操作数据(DML)并非直接反映到数据文件,而是先
被记录(就是 online redo log 保留的内容了),等时机合适的时候,再由相应的进程操作提交到数据文件
把所有的 online redo logs都保存下来,
保留的功能,必须借助归档数据库模式才能完成日志的保留,归档模式下保留的日志就是 archived redo logs简称
archive log 即归档日志。
由于 standby 数据库的数据通常都来自于 primary 数据库的,RFS 进程接收 primary 数据库的redo,保存在本地,
这就是 Standby redo logs, 然后 standby 数据库的 ARCn再将其写入归档,
数据文件又是怎么生成的呢,物理 standby 通过 redo 应用,逻辑 standby 通过 sql应用,不管是哪种应用,应用的
是 redo log 中的内容(默认情况下应用 archived redo logs,如果打开了实时应用,则直接从standby redo logs
中读取),至于如何应用,那就是 redo 应用和 sql 应用机制的事情了。
SQL>alter database force loging;
强制日志记录,要完整恢复,必须依赖可靠可用的日志。所以需要强制日志记录方式与归档模式
想必大家知道有一些 DDL 语句可以通过指定 NOLOGGING 子句的方式避免写 redolog(目的是提高速度,某些时候确
实有效),指定数据库为 FORCE LOGGING 模式后,数据库将会记录除临时表空间或临时回滚段外所有的操作而忽略类
似 NOLOGGING 之类的指定参数。如果在执行 force logging 时有 nologging 之类的语句在执行,则force logging
会等待直到这类语句全部执行。FORCE LOGGING 是做为固定参数保存在控制文件中,因此其不受重启之类操作的影
响(只执行一次即可),如果想取消,可以通过 alter database no force logging语句关闭强制记录。
SQL>alter database archivelog;
如果是 flashbak database 模式请关闭:
SQL>alter database flashback off;
SQL>shutdown immediate;
SQL>startup
SQL>archive log list;
SQL>alter system switch logfile;
SQL>alter system setlog_archive_dest_1=’location=/opt/oracle/oradata/orcl/archivevalid_for=(all_logfiles,all_roles)
db_unique_name=pri’;
SQL>alter system set db_uniuqe_name=’pri’scope=spfile;
SQL>alter system set standby_file_management=autoscope=spfile;
SQL>alter system setlog_archive_dest_state_1=enable scope=spfile;
SQL>alter system setlog_archive_dest_state_2=enable scope=spfile;
SQL>alter system setlog_archive_config=’dg_config=(pri,std)’;
SQL>alter
db_unique_name=std’ scope=spfile;
SQL>alter system setlog_archive_dest_state_2=enable scope=spfile;
SQL>alter system setlog_archive_format=’log%t%s%r.arc’ scope=spfile;
SQL>alter system set fal_server=’std’scope=spfile;
SQL>alter system set fal_client=’pri’scope=spfile;
SQL>alter database add standby logfile group 5‘/opt/oracle/oradata/orcl/stredo5.log’ size 50m;
SQL>alter database add standby logfile group 6‘/opt/oracle/oradata/orcl/stredo6.log’ size 50m;
…….
添加 standbylogfile 成员个数比 onlinelogfile 多 1 个即可,但大小与onlinelogfiles 一致
对于最大保护和最高可用性模式,Standby 数据库必须配置 standby redo log,并且 oracle推荐所有数据库都使用
LGWR ASYNC 模式传输
一般而言,standby redo 日志文件组数要比 primary 数据库的 online redo日志文件组数至少多一个。推荐 standby
redo 日志组数量基于 primary 数据库的线程数
有一个推荐的公式可以做参考:(每线程的日志组数+1)*最大线程数
例如 primary 数据库有 3 个线程,每个线程分配 2 组日志,则 standby 日志组数建议为 9组,使用这个公式可以降
低 primary 数据库实例 LGWR 进程锁住的可能性。
SQL>create pfile from spfile;
SQL>alter database create standby controlfile as‘/opt/oracle/oradata/orcl/sccon.ctl’;
SQL>shutdown immediate;
SQL>exit
[foway~uplooking.com ]$cd $ORACLE_HOME/dbs
[foway~uplooking.com ]$orapwd file=orapw+sid password=pswd
如果不存在的话,需要创建密码文件,同一个 Data Guard 配置中所有数据库必须都拥有独立的密码文件,并且必须
保证同一个 Data Guard 配置中所有数据库服务器的 SYS 用户拥有相同密码以保证 redo 数据的顺利传输,因为redo
传输服务通过认证的网络会话来传输 redo 数据,而会话使用包含在密码文件中的 SYS 用户密码来认证。
主库配置暂时到这里。
------------------------------------
然后在备库操作:
复制主库的数据文件后修改参数。
主要修改 initorcl.ora 中的内容:将 pri,std 互相对换。然后配置网络监听与远程密码。
并测试网络连通性。
启动步骤;从库:
#su – oracle
$sqlplus “/as sysdba”
SQL>startup nomount
SQL>alter database mount standby database;
SQL>recover managed standby database disconnectfrom session;
主库:
#su – oracle
$sqlplus “/as sysdba”
SQL>startup
保护模式转换:
提供了三种数据保护的模式,我们又亲切的叫它:有三模:
入到本地的 online redo log,还要同时提交到 standby 数据库的 standby redo log,并确认redo 数据至少在一个 standby
数据库可用(如果有多个的话),然后才会在 primary 数据库上提交。如果出现了什么故障导致 standby数据库不可用
的话,primary 数据库会被 shutdown。
数据库的 redo 数据也需要至少写入一个 standby 数据库,不过这种写入可以是不同步的。
响。
也是要求所有事务在提交前必须保障 redo 数据至少在一个 standby 数据库可用,不过与之不同的是,如果出现故障
导入无法同时写入 standby 数据库 redolog,
数据库恢复正常之后,它又会再自动转换成最高可用性模式。
LOG_ARCHIVE_DEST_n 初始化参数。
maximize performance 默认保护级别
maximize availability 默 认运行在 maximize protection 备库出现问题转到maximize performance 备库恢复转到
maximize protection
maximize protection maximize availability
该两中模式下不能先关闭备库。否则抱如下错误:
SQL> shutdown immediate;
ORA-01154: database busy. Open, close, mount, and dismount notallowed now
网络问题
在一些关键领域如果 DG 不是在 lan 中很多时候都利用 vpn 专线来保证网络的可靠,高速与安全。如果有一天需要
在南北线路上做 DG,那么你要测试好线路了。如果网络太差,应该采用 open-vpn 或商业 vpn。实在没有 vpn你可
以采用不要验证日志传递的可达性,用 ftp,scp,rsync,sshfs 等方式把日志复制到备库。
备库查询:
alter database recover managed standby database cancel;
ALTER DATABASE OPEN READ ONLY;
使用 std 数据库,使用完后
alter database recover managed standby database disconnect fromsession;
关机顺序:
正确的开关机顺序是:
关机:先关主机,后关备机
开机:先开备机,后开主机
Switchover 过程
注意:Swithover 时只能先从 Primary 切到 Standby,再从 Standby 切到 Primary.
Failover 过程
可以在网络监听中配置对方的 ip 地址,这样在切换就不会出现问题了。
不可预知原因导致 primary 数据库故障并且短期内不能恢复就需要 failover
在执行 failover 之前,尽可能将原 primary 数据库的可用 redo 都复制到 standby 数据库。 转换standby 数据库到
MAXIMIZE PERFORMANCE
SQL> ALTER DATABASE SET STANDBY DATABASE TOMAXIMIZE PERFORMANCE;
等 standby 切换为新的 primary 之后,你可以再更改到修改前的保护模式。
执行下列语句:
SQL> alter database recover managed standbydatabase finish force;
或 alter database recover managed standby database finish skipstandby logfile;
SQL> alter database commit to switchover toprimary;
shutdown immediate,然后再直接 startup。就完成了 failover 了。
原来的主库已经不是 DG 的成员了,所以需要对备库重建。
不过在以后的管理中要特别注意是否 resetlogs:
Standby数据库状态
没有应用 resetlog 之前的 redo数据
应用了 resetlog 之 后 的 redo数
据, 不过 standby 打开了 flashback。
应用了 resetlog 之 后 的 redo数
据,而且没有 flashback
--@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
--相关问题总结
问题1:ORA-16416: 切换目标与主目标不同步
Dataguard的主备机间日志不同步,发生了ORA-16416错误
切换目标与主目标不同步”错误,且v$archived_log表里没有数据,通过在主库上重建一份standbycontrolfile,拷贝到备机替换原先的controlfile,重启即解决问题。
主库上操作:
SQL> selectdatabase_role,open_mode,protection_mode,protection_level,switchover_statusfrom v$database;
DATABASE_ROLE
---------------- ---------- ---------------------------------------- --------------------
PRIMARY
--尝试切换:
SQL> alter database commit to switchover tophysical standby with session shutdown;
alter database commit to switchover to physical standby withsession shutdown
*
第 1 行出现错误:
ORA-16416: 切换目标与主目标不同步
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 243269632 bytes
FixedSize
VariableSize
DatabaseBuffers
RedoBuffers
数据库装载完毕。
SQL> alter database create standby controlfile as'/backup/sdtby_control01.ctl';
数据库已更改。
SQL> alter database open;
数据库已更改。
先停止备库,再把生成的sdtby_control01.ctl文件拷贝到备机,替换掉原先备机的控制文件。
然后在备库上操作:
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 243269632 bytes
FixedSize
VariableSize
DatabaseBuffers
RedoBuffers
数据库装载完毕。
SQL> alter database recover managed standbydatabase disconnect from session;
数据库已更改。
SQL> selectdatabase_role,open_mode,protection_mode,protection_level,switchover_statusfrom v$database;
DATABASE_ROLE
---------------- ---------- ---------------------------------------- --------------------
PHYSICAL STANDBYMOUNTED
SQL> select max(SEQUENCE#) fromv$archived_log;
MAX(SEQUENCE#)
--------------
SQL> archive log list;
数据库日志模式
自动存档
存档终点
最早的联机日志序列
下一个存档日志序列
当前日志序列
现在v$archived_log表里有数据了。
问题2.ORA-16416: Switchover target is not synchronized with theprimary
主数据库上查询:
SQL> select max(sequence#) fromv$archived_log;
MAX(SEQUENCE#)
--------------
从数据库上查询:
SQL> select max(sequence#) fromv$archived_log;
MAX(SEQUENCE#)
--------------
但是在主数据库上执行下面的语句时:
SQL> alter database commit to switchover tophysical standby;
alter database commit to switchover to physical standby
*
ERROR at line 1:
ORA-16416: Switchover target is not synchronized with theprimary
分析:主从数据库的日志最大值都相等,并且都应用了,为什么不允许主从切换呢?
解决方法:
在从数据库上:
SQL> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup nomountpfile='/opt/oracle/admin/ge/pfile/init.ora.10182008214357';
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 62916852 bytes
Database Buffers 100663296 bytes
Redo Buffers 2973696 bytes
SQL> alter database mount standby database;
Database altered.
然后重新还原从数据库以及日志:
RMAN> restore database;
RMAN> restore archivelog all;
此时查询从数据库的日志应用情况:
SQL> select max(sequence#) fromv$archived_log;
MAX(SEQUENCE#)
--------------
此时查询主数据库的日志最大值:
SQL> select max(sequence#) fromv$archived_log;
MAX(SEQUENCE#)
--------------
然后在主数据库重新切换:
SQL> alter database commit to switchover tophysical standby;
Database altered.
执行成功!!
问题3:
SQL> alter database commit to switchover toprimary;
alter database commit to switchover to primary
*
ERROR at line 1:
ORA-16139: media recovery required
解决方法:
SQL> alter database recover managed standbydatabase disconnect from session;
Database altered.
- linux下10goracle datagard(stand…
- ActiveMq1: Run Stand Alone.
- LINUX AS4 系统下安装oracle 10g终…
- LINUX AS4 系统下安装oracle 10g终…
- LINUX AS4 系统下安装oracle 10g终…
- LINUX AS4 系统下安装oracle 10g终…
- LINUX AS4 系统下安装oracle 10g终…
- LINUX AS4 系统下安装oracle 10g终…
- LINUX AS4 系统下安装oracle 10g终…
- LINUX AS4 系统下安装oracle 10g终…
- Windows/Linux 环境下安装 Apache …
- linux下 firefox安装flash debug …
- Linux 下使用 NMON&nbsp…
- Linux 下 PHP 对&n…
- Top 10 Linux console application…
- linux 下 opencv2.0 的编译与安装 …
- linux 下 opencv2.0 的编译与安装 …
- linux 下如何打开core d…
- Windows7下Oracle 10g安装图解
- oracle10.2.0.1.0升级到10.2.0.4.0
- CentOS(RedHat)中sendmail启动慢解决方法
- lvm(逻辑卷管理)
- nagios下的rrdtool导库
- linux下10goracle datagard(stand…
- break on deptno skip 1
- samba共享
- linux中的特殊权限s\t
- windows下的运行命令大全
- 感悟1
- 感悟2
- 感悟3
- 感悟4