oracle11g dataguard

article/2025/9/29 15:51:02

1. 主库必须处于  归档模式
必须设置数据库强制归档,否则复制到备库有块损坏


=====================================================================
1. 确定数据库25是否处于归档模式

SQL> select name,log_mode from v$database;

NAME      LOG_MODE
--------- ------------
ORCL      ARCHIVELOG

2. 查看数据库是否强制记录日志

SQL> SELECT FORCE_LOGGING FROM V$DATABASE;

FOR
---
NO

强制主库写日志
ALTER DATABASE FORCE LOGGING;

--强制不写日志
ALTER DATABASE no force logging;


3. 修改主库和备库 监听
--主库
[root@centos7db1 admin]# more listener.ora 
# listener.ora Network Configuration File: /home/oracle/database/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER=
   (SID_LIST=
    (SID_DESC=
          (GLOBAL_DBNAME=orcl)  
          (SID_NAME=orcl)            
          (ORACLE_HOME=/home/oracle/database/product/11.2.0/db_1)
     )
    )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.25)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /home/oracle/database


--备库

[oracle@centos7db2 admin]$ more listener.ora
# listener.ora Network Configuration File: /home/oracle/database/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER=
   (SID_LIST=
    (SID_DESC=
          (GLOBAL_DBNAME=orcl2)  
          (SID_NAME=orcl)            
          (ORACLE_HOME=/home/oracle/database/product/11.2.0/db_1)
     )
    )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.26)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /home/oracle/database

4. 修改tns

[root@centos7db1 admin]# more tnsnames.ora 
# tnsnames.ora Network Configuration File: /home/oracle/database/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.25)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
  
ORCL2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.10.26)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl2)
    )
  )  


5. 修改主库参数

修改在线日志文件大小,防止在复制的时候日志文件频繁切换

alter database add logfile group 4 '/home/oracle/database/oradata/orcl/redo04.log' size 1024M;
alter database add logfile group 5 '/home/oracle/database/oradata/orcl/redo05.log' size 1024M;

alter system switch logfile;            
alter system checkpoint;     
       
select group#, status from v$log;

alter database drop logfile group 1; 
alter database drop logfile group 2; 
alter database drop logfile group 3; 


alter database add logfile group 1 '/home/oracle/database/oradata/orcl/redo01.log' size 1024M;
alter database add logfile group 2 '/home/oracle/database/oradata/orcl/redo02.log' size 1024M;
alter database add logfile group 3 '/home/oracle/database/oradata/orcl/redo03.log' size 1024M;

alter database drop logfile group 4; 
alter database drop logfile group 5; 
=======================主库操作====================================================================

关闭主库
sqlplus / as sysdba
shutdown immediate;
emctl stop dbconsole
lsnrctl stop

全部物理备份
--仅打包,不压缩
tar -cvf /home/oracle/database20160601.tar /home/oracle/database 


--启动数据库修改参数
sqlplus / as sysdba
startup;

下边开始配置DG


-- log_archive_max_processes默认为2 修改为4
--查询数据库发现已经是4 了就不修改了
SQL> show parameter log_archive_max_processes;

NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes         integer     4
--------------------------------------------------
--alter system set log_archive_max_processes=4;
--------------------------------------------------

--修改db_unique_name
alter system set db_unique_name='orcl' scope=spfile;
--修改 日志归档配置
alter system set log_archive_config='DG_CONFIG=(orcl,orcl2)'; 
--修改 备用数据库模式 :同步复制 确认
alter system set log_archive_dest_2='SERVICE=orcl2 LGWR SYNC REOPEN=30 NET_TIMEOUT=20 valid_for=(online_logfile,primary_role) db_unique_name=orcl2' ;  
--fetch archive log client
alter system set fal_client='orcl';
--fetch archive log server
alter system set fal_server='orcl2';
--文件管理方式
alter system set standby_file_management=auto;
-- 备用日志文件组 比在线日志多一组
alter database add standby logfile group 7  '/home/oracle/database/oradata/orcl/standby07.log'  size 1024M;
alter database add standby logfile group 8  '/home/oracle/database/oradata/orcl/standby08.log'  size 1024M;   
alter database add standby logfile group 9  '/home/oracle/database/oradata/orcl/standby09.log'  size 1024M;   
alter database add standby logfile group 10 '/home/oracle/database/oradata/orcl/standby10.log'  size 1024M;   
--关闭
shutdown immediate  
--重启
startup   

--创建初始化参数文件
create pfile='/home/oracle/database/product/11.2.0/db_1/dbs/initorcl.ora' from spfile;


  

--查看主库 保护模式
select db_unique_name,protection_mode,protection_level from v$database;
--设置主库 为最大可用性模式
alter database set standby database to maximize availability; 


======================================备库操作=======================================
见 本机 dataguard 目录

sqlplus / as sysdba
shutdown immediate;
lsnrctl stop;
emctl stop dbconsole;

解压文件从服务器备份的安装后文件,但是不需要数据

--删除日志文件和数据文件 因为要用rman 来备份数据库

rm -rf /home/oracle/database/admin/orcl/adump/
rm -rf /home/oracle/database/admin/orcl/pfile
rm -rf /home/oracle/database/admin/orcl/dpdump
rm -rf /home/oracle/database/oradata/orcl/
rm -rf /home/oracle/database/fast_recovery_area/orcl/
rm -rf /home/oracle/database/fast_recovery_area/ORCL/

rm -rf /home/oracle/database/product/11.2.0/db_1/dbs

--重建库的时候需要删除之前的归档
rm -rf  /home/oracle/database/fast_recovery_area/ORCL2/archivelog
rm -rf  /home/oracle/database/fast_recovery_area/ORCL2/onlinelog
--------------------------------------------------

修改主库的initORCL.ora 文件  注意不要修改db_name

 出现 是因为目录不存在

 

必须保证 oradata/orcl 目录存在
fast_recovery_area/orcl 也必须存在


启动监听
lsnrctl start;
--创建密码文件 否则rman 无法登录
orapwd file=$ORACLE_HOME/dbs/orapworcl password='password' entries=5   


sqlplus /nolog
conn /as sysdba 
--启动到nomount
startup nomount   

--进入rman  orcl2 是备库 ,orcl 是主库
--在出现 PLS-00201:identifier 'DBMS_RCVCAT.GETDBID' must be declared 这个错误时加上  nocatalog 参数
rman target sys/'password'@orcl  auxiliary sys/'password'@orcl2  nocatalog
--rman 复制数据库,得关闭防火墙 否则可能连接不上
duplicate target database for standby nofilenamecheck  from active database;

复制完成后 设置备库开始应用日志
conn /as sysdba
--打开数据库
alter database open; 
--开始应用日志  如果没有复制数据 请启动数据复制
alter database recover managed standby database using current logfile disconnect from session;    

--查看备用日志文件
select status from v$standby_log;

dataguard 日常维护技巧
http://wenku.baidu.com/link?url=SiFzMIknwFRh3yvGrm3juCHGgrvtXaHfdc2XzasRf7eRdeXhSoY3zY-zZ8fG7DPFfFXMckrV-JDfbyYQrhkKr_2E2yABCPEdEKb294jBwqi
 

------------------------------------------------

------------------------------------------20161223-故障排除  不复制----------------
密码过期造成的 权限不足 而且备库空间不足

主库到备库的redo传输需要通过密码文件中的sys用户密码来进行认证,如果在主库配置了其它的sysdba用户也可以,但问题是主库的redo传输是通过密码文件像sys一样的用户来作为认证基础的,一旦主库加密后的密码和备库不一致,那么redo传输就会有麻烦。

如果需要保证dataguard的可持续性,如果主库存在任何密码文件的变更,我们必须从主库拷贝密码文件到备库

SELECT * FROM V$DATAGUARD_STATUS ORDER BY TIMESTAMP desc

主库 错误 PING[ARC2]: Heartbeat failed to connect to standby 'orcl2'. Error is 1031.

ora 1031 错误是权限不足

登录备库的时候

 

 备库错误:

 主库密码

 备库

直接修改备库的过期策略是修改不了的

解决方法 把主库的密码文件 拷贝到备库
/home/oracle/database/product/11.2.0/db_1/dbs

orapworcl

-------------------------------------------
dgmgrl  dataguard 管理

tnsping orcl2 --查看tns 是否通 

ora 19809 错误 归档日志满

备库 

 备库的归档日志满

 

--查询备库 归档日志

SELECT * FROM v$recovery_file_dest;

在备库上 
rman target/
DELETE NOPROMPT ARCHIVELOG UNTIL TIME "TO_DATE('2017-05-01','YYYY-MM-DD')";
删除后必须要验证 然后删除否则数据库中占用记录不会修改
2)命令>crosscheck archivelog all;
3)命令>delete  NOPROMPT  expired archivelog all;

一定要注意主库的归档日志不能满 否则也不能复制到备库,原因不明

 ------------------------------------------------------------

--备库 standby archive log 满

验证复制时候正确

dbv file='/home/oracle/database/oradata/orcl/bworg01.dbf'
dbv file='/home/oracle/database/oradata/orcl/CHECKROLL01'

在dbv 验证备库文件的时候,发现数据库老有以下错误,备库的块损坏

 

原因:
DBV-00201: Block, DBA number, marked corrupt for invalid redo application
Cause: The block was marked corrupt by the Oracle database server for invalid redo application, ex: media recovery of a NOLOGGING object or direct loaded data.
Action: If the block is not currently allocated to a database object, then no action is required. If the block is allocated, 
then the object will need to be rebuilt, or data to be reloaded.
仔细想了下:日志应用?咦?这不是只用在dataguard等软件才需要么,进一步询问。
果然是在搭建dataguard,在上面的Cause信息中NOLOGGING关键字中,并且在网上查找了下信息。
明白了是他没有开启force logging。之后开启数据库的force logging就好了。


alter database force logging ;


查询主库25,发现确实没有强制归档,最好主备库 都开启强制归档

 

下面将oracle数据库设置为30分钟内没进行归档的话,就强制其归档:
 
alter system set archive_lag_target=1800;

备库的归档日志也会满


重做传输服务  Redo Transport Service
主数据库的LGWR 将重做数据写入到自己的 ORL(online redo log)中一个独立的DataGruard进程从SGA的重做缓存区读取信息,交由OracleNet服务传输到
备份数据库 这个进程叫 Log Network Server (LNS),有3个备库就有3个LNS

 在备库端 由LNS 传输的重做记录在备用数据库由另一个进程 Remote File Server (RFS) 接收,RFS 在备用数据库上接收重做数据,然后写入备用重做
日志(Standy Redo log   SRL)文件中。
备库端:介质恢复协调器(Media Recovery Coordinator)MRP0 管理恢复会话按SCN 顺序合并来自多个实例的重做数据(在使用RAC的情况下),然后应用进程
(pr00 pr01...)读取数据块 组装数据

 

 

dataguard 维护
--查看恢复和错误信息

SELECT * FROM V$DATAGUARD_STATUS ORDER BY TIMESTAMP desc

创建dblink
create public database link
to_25 connect to BWORG identified by "password" using 'BWIE_25';


--备库查看RFS接收日志和MRP应用日志同步主库情况
select process, sequence#, status, delay_mins from v$managed_standby;
--查看日志接收状态
select REGISTRAR,CREATOR,THREAD#,APPLIED,sequence#,first_change#,next_change#, COMPLETION_TIME from v$archived_log;


--备库查看已经应用的redo
select thread#,sequence#,first_change#,next_change# from v$log_history;


主、备库查看是否有gap
select status,gap_status from v$archive_dest_status where dest_id=2;
--备库查看
select * from v$archive_gap;


查看备库 接收的最大日志
select sequence#
     from v$archived_log
    where recid = (select max(recid) from v$archived_log);
查看主库的日志

select sequence#,status from v$log;


查看恢复区大小 
select name,space_limit,space_used,number_of_files from v$recovery_file_dest;
alter system set db_recovery_file_dest_size=200G scope=both;

物理DG要实现实时同步:在最大性能的模式下,是可以的。
先停用日志同步: 
alter database recover managed standby database cancel;
实时同步:  每次断电重启后  需要 现在备库执行恢复数据同步 然后在主库  执行 alter system switch logfile;  
启用备库同步
alter database recover managed standby database using current logfile disconnect from session;

日志同步:只有在主库日志文件切换后才同步
alter databse recover managed standby databse disconnect from session;
日志同步的模式,就是要把日志传动DG后,才能更新数据,日志不归档时,数据是不同步到物理DG的。

搜索
使用图形化界面管理GridControl和DataGuard - Secooler.pdf

oracle db_name,sid20150810.docx

data Guard可以以只读的方式打开数据库,但此时Media Recovery利用日志进行数据同步的过程就停止了,如果物理备用数据库处于恢复的过程中数据库就不能打开查询,也就是说日志应用和只读打开两个状态是互斥的。
Oracle 11g 中推出的Active Data Guard功能解决了这个矛盾,在利用日志恢复数据的同时可以用只读的方式打开数据库,用户可以在备用数据库上进行查询、报表等操作,这类似逻辑Data Guard备用数据库的功能(查询功能方面),但是,数据同步的效率更高、对硬件的资源要求更低。这样可以更大程度地发挥物理备用数据库的硬件资源的效能。
http://ylw6006.blog.51cto.com/470441/841815/

1. DB_NAME 表示数据库名称,DB_NAME 会保持在数据文件头、控制文件、REDO文件里,所以更改DB_NAME不能仅仅修改spfile ,还需要用nid 来进行更改,并且更改后还需要手工做些工作,使其生效。
DB_NAME 最长 8 个字符。

2. 在 DG下,主库和物理从库的 DB_NAME 是一致的,主库和物理从库的DB_UNIQUE_NAME 不同,DB_UNIQUE_NAME 用于标识主从库。

修改 DB_UNIQUE_NAME 需要修改 spfile 并重启数据库;
由于 DB_NAME 记录在数据文件头、控制文件、REDO文件里,所以修改 DB_NAME 一般有两种方式:
(1)备份控制文件到trace,修改 spfile,重启数据库,resetlogs 打开数据库
(2)或者通过 nid 命令修改

DB_NAME 数据库名称,也就是数据库的名字标示。这里,数据库里可能有多个实例,比如RAC里的多节点,这多个节点是不同的实例
,但是却有相同的名字,他们的 DB_NAME是相同的但是Instance_name是不同的。DB_NAME会保持在数据文件头里
,所以更改DB_NAME不能仅仅修改parameter,还需要用nid 来进行更改,并且更改后还需要手工做些工作,是其生效。

3. SID:System Identifier

The SID identifies the instance's shared memory on a host, but may not uniquely distinguish this instance
from other instances

doc上把sid解释为在host上用sid来标示实例的共享内存的,可见sid主要是和os打交道的。

sid可以通过如下语句在库中查询: select instance_name from v$instance;

----------------------------------
主库


alter database force logging;
alter system set db_unique_name='orcl1' scope=spfile;
alter system set log_archive_config='DG_CONFIG=(orcl1,orcl2)'; 
alter system set log_archive_dest_2='SERVICE=orcl2 lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcl2'; 
alter system set fal_client='orcl1';
alter system set fal_server='orcl2';

alter system set standby_file_management=auto;  

alter database add standby logfile group 4 '/home/oracle/database/oradata/orcl/standby04.log' size 50M;  
alter database add standby logfile group 5 '/home/oracle/database/oradata/orcl/standby05.log' size 50M;  
alter database add standby logfile group 6 '/home/oracle/database/oradata/orcl/standby06.log' size 50M;  
alter database add standby logfile group 7 '/home/oracle/database/oradata/orcl/standby07.log' size 50M;  
shutdown immediate;
startup;

create pfile from spfile; 

备库

[oracle@bogon1 admin]$ rman target sys/123456@orcl1 auxiliary sys/123456@orcl2

Recovery Manager: Release 11.2.0.3.0 - Production on Tue May 10 20:48:22 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1439208389)
connected to auxiliary database: ORCL (not mounted)

RMAN> duplicate target database for standby nofilenamecheck from active database;


http://chatgpt.dhexx.cn/article/oUw0kOaW.shtml

相关文章

oracle ogg dataguard,Oracle DataGuard与GoldenGate比较

一、复制方式 • Golden Gate 可提供秒一级的大量数据实时捕捉和投递,无法实现同步复制; • Data Guard 最大保护—Maximum protection 最大可用—Maximum availability 最大性能—Maximum performance 最大保护,最大可用模式都需要同步传输日…

oracle 9i 11g dataguard,Oracle 11g DataGuard使用总结

Oracle 11g的dataguard相比于10g来说,最优越的特性应该算就是active dataguard了,这一点改进在很大意义上促使用户需要把数据库从10g升级到11g,读写分离在这个时候得到了升华,而且在后台会根据需要进行数据的同步,相比于使用10g&a…

mysql可以使用dataguard,DataGuard相关参数

定义数据库唯一名称,因为DB_NAME参数对于物理数据库是必须相同,对于逻辑数据库必须不同,所以在Oracle 10g中引入DB_UNIQUE_NAM DB_UNIQUE_NAME 定义数据库唯一名称,因为DB_NAME参数对于物理数据库是必须相同,对于逻辑数…

oracle dataguard详细,Oracle数据库DataGuard参数配置与参数详解

oracle数据库Data Guard参数配置与参数详解 1. Oracle 11g Dataguard参数详解 就Oracle Data Guard来说,我们只关注如下三种参数: 1 独立于数据库角色的参数 2 数据库角色为primary时的参数 3 数据库角色为standby时的参数 虽然DG有着非常多的配置参数&a…

oracle11 dataguard,探索Oracle之11g DataGuard

1、什么是DataGuard DataGuard是Oracle推出的一项专门针对oracle数据库的高可用技术,在8i之前被称之为Standby Dtabase,从9i开始正式更名为DataGuard。通常情况下至少会有两个数据镜像节点构成的主备关系。通过redo日志的同步技术来保证数据的实时同步&a…

oracle取消dataguard,Oracle Dataguard的强制切换

【前言】Dataguard的从库一般情况下都是出于数据的抽取和查询的作用的,但是万一在主库发生故障的情况下就需要切换到备库了。而这种故障的切换往往又是灾难性的情况:比如主库的服务器根本就起不来了,没有办法进行正常的切换,就需要…

Oracle19c DataGuard

为记录的更详细点,文章经过二次编辑,有几张图的时间对不上,不过不影响查阅。 CSDN排版不太友好,有些代码的进位都给省略了。 文章早就编辑好了,由于一些原因一直没发出来。 根据自己的环境,一定要仔细比对d…

oracle dataguard延迟,dataguard延迟日志应用的问题

本帖最后由 lfree 于 2012-12-11 12:07 编辑 我管的dataguard使用recover managed standby database disconnect from session delay 720。 我发现一个问题,如果使用asm作为存储,会出现"大量“读取操作。 snap.jpg (10 KB, 下载次数: 43) 2012-12-1…

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(01)—— dataguard 服务器安装 Oracle 软件

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(01)—— dataguard 服务器安装 Oracle 软件 / 本专栏详细讲解 Oracle Dataguard(Oracle 版本为11g,主库为双节点 Oracle rac 集群)的配置过程…

Oracle DataGuard

一、DataGuard介绍 DataGuard是Oracle的一种高可用性数据库方案,主要用于数据容灾和读写分离。 数据库角色 Primary:主库 Standby:备库 Standby类型 物理standby:redolog以介质恢复的方式实现同步。用于数据备份(11G也可以读写分离)。 逻辑…

Data Guard原理

文章来源于网络整理 DG通过提供冗余数据来提供数据保护 1.常用于异地容灾和小企业的高可用解决方案 2.虽然可以在Standby机器上执行只读查询,从而分散Primary数据库的性能压力,但是绝不是性能解决方案 DataGuard介绍 在DG环境中,至少会有两…

基于Java的员工工资管理系统

​ 源码编号:F-A15 项目类型:Java SE项目(awtswing) 项目名称:基于Java的员工工资管理系统(EmployeeSalary) 用户类型:双角色(员工、管理员) 主要技术:ja…

Java工程师工资水平出炉!真厉害了

Java因为其十分适用于企业级开发的特点,所以一直是国内大厂最主要使用的语言之一,也是应用最广泛的编程语言。 也由于Java主要用于开发企业级应用,市场需求同比其他语言来说会更大一些,自然它的起薪也相对较高,因而很多…

Java培训出来后一般多少工资

学完Java培训出来后一般多少工资呢?这是很多人都比较关心的一个问题,小编在这里告诉大家,java技术这个岗位分为初级、中级和高级,每个等级的工资情况也是不一样,来看看下面的详细介绍。 Java培训出来后一般多少工资?Java程序员薪…

2022上海Java工资收入概览

微信公众号,关注:georgezheng 越来越多的人选择从事IT,接触计算机互联网,除了学习复杂庞大的知识体系,也比较关注各地区Java工资收入,我收集了上海的信息做一次整理,数据来源职友集和平…

Java基础(员工工资管理系统)

项目介绍: 某公司的雇员分为以下若⼲类: SalariedEmployee:拿固定⼯资的员⼯。 HourlyEmployee:按⼩时拿⼯资的员⼯,每⽉⼯作超出160⼩时的部分按照1.5倍⼯资发放 SalesEmployee:销售⼈员,⼯资由⽉销售额和…

2020年5大一线城市Java薪资水平汇总,你还差多少呢?

程序员作为薪资最高的行业之一,一直是很多人转行的热门首选行业。Java程序员又在所有程序员中占比最大, 因此,Java程序员的薪资就能够很好的代表行业的薪资水准。 今天就为大家整理5大热门城市的Java薪资情况,看看你还差多少,你又想拿多少?或者你希望去哪个城市发展呢?…

Redis LRU

一:Redis内存驱逐的几种策略 检测易失数据(可能会过期的数据集server.db[i].expires ) ① volatile-lru:挑选最近最少使用的数据淘汰 ② volatile-lfu:挑选最近使用次数最少的数据淘汰 ③ volatile-ttl&#xff1a…

LRU链表及LRU缓存

注:本文分析基于linux-4.18.0-193.14.2.el8_2内核版本,即CentOS 8.2 1、 关于LRU LRU即Least recently used,也就是最近最少使用,一般用作缓存淘汰上,它的核心思想是——如果一个数据在最近一段时间没有被访问到&…

14.1 LRU链表

在最近几十年操作系统的发展过程中,有很多页面交换算法,其中每个算法都有各自的优点和缺点。linux内核中采用的页面交换算法主要是LRU算法和第二次机会法(second chance)。 LRU链表 LRU是least recently used(最近最少使用)的缩写…