oracle11g dataguard

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

oracle11g dataguard_第1张图片

 出现 是因为目录不存在

oracle11g dataguard_第2张图片

 

必须保证 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 错误是权限不足

登录备库的时候

oracle11g dataguard_第3张图片

 

 备库错误:

 主库密码

oracle11g dataguard_第4张图片

 备库

oracle11g dataguard_第5张图片

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

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

orapworcl

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

tnsping orcl2 --查看tns 是否通 

ora 19809 错误 归档日志满

备库 

oracle11g dataguard_第6张图片

 备库的归档日志满

oracle11g dataguard_第7张图片

 

--查询备库 归档日志

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 验证备库文件的时候,发现数据库老有以下错误,备库的块损坏

oracle11g dataguard_第8张图片

 

原因:
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,发现确实没有强制归档,最好主备库 都开启强制归档

oracle11g dataguard_第9张图片

 

下面将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...)读取数据块 组装数据

oracle11g dataguard_第10张图片

oracle11g dataguard_第11张图片 

 

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;

你可能感兴趣的:(数据库,oracle,数据库,sql)