Oracle---dataguard

克隆安装oracle
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba -m oracle
passwd oracle
su - oracle

vi .bashrc
---------------------------------------------------------
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export ORACLE_SID=orcl
export ORACLE_OWNER=oracle
export ORACLE_TERM=vt100
export THREADS_FLAG=native
export LANG=en_US
---------------------------------------------------------

su -
mkdir -p /u01/app/oracle
chown -R oracle.oinstall /u01/app

vi + /etc/security/limits.conf
---------------------------------------------
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384

vi + /etc/sysctl.conf
---------------------------------------------
kernel.shmmax = 4046471168
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
---------------------------------------------
使内核参数生效
sysctl -p

cd /u01
tar -cf - app | ssh oracle@172.25.6.12 'cd /u01/; tar -xf -'
###################################################################################
主库:primary 172.25.0.10 ; db_unique_name=demo
从库:standby 172.25.0.11 ; db_unique_name=aux1
主库与从库的db_name必须一样,主库与从库的db_unique_name必须不一样

1.主库要运行在归档模式
archive log list
shut immediate
startup mount
alter database archivelog;
alter database open;

2.主库要打开force logging:主库的所有操作都要产生日志!
select database_role,force_logging from v$database;
alter database force logging;

3.主库要打开dataguard开关:参数值在主从节点要一致
show parameter log_archive_config
alter system set log_archive_config='dg_config=(主库的唯一名,从库1的唯一名,从库2的唯一名,.....)';
alter system set log_archive_config='dg_config=(demo,aux1)';

4.修改主库的本地归档路径:
alter system set log_archive_dest_1='location=/home/oracle/arc_db01_dest1/ valid_for=(日志类型,数据库角色) db_unique_name=demo';

alter system set log_archive_dest_1='location=/home/oracle/arc_db01_dest1/ valid_for=(online_logfiles,primary_role) db_unique_name=demo';

5.激活主库的本地归档路径:
alter system set log_archive_dest_state_1='enable';

6.在主库启用远程归档:
alter system set log_archive_dest_3='service=连接从库的网络服务命名 valid_for=(online_logfiles,primary_role) db_unique_name=aux1';

alter system set log_archive_dest_3='service=aux1srv valid_for=(online_logfiles,primary_role) db_unique_name=aux1';

alter system set log_archive_dest_state_3='enable';

7.将主库的口令文件拷贝的从库
scp $ORACLE_HOME/dbs/orapw$ORACLE_SID oracle@172.25.0.11:/u01/app/oracle/product/11.2.0/db_1/dbs/orapwaux1

8.为从库创建参数文件:使用主库参数文件直接修改
sqlplus / as sysdba
create pfile='/home/oracle/initaux1.ora' from spfile;
vi /home/oracle/initaux1.ora
--------------------------------------------------------------------------
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.db_block_size=8192
*.db_domain='example.com'
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4385144832
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.log_archive_config='dg_config=(demo,aux1)'
*.memory_target=843055104
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
audit_file_dest='/u01/app/oracle/admin/aux1/adump'
control_files='/u01/app/oracle/oradata/aux1/control01.ctl'
db_unique_name='aux1'
local_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.25.0.11)(PORT=1521)))'
log_archive_dest_2='location=/home/oracle/arc_aux1_dest2/ valid_for=(standby_logfiles,standby_role) db_unique_name=aux1'
log_archive_dest_state_2='enable'
db_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/aux1/'
log_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/aux1/'
standby_file_management=auto
--------------------------------------------------------------------------
scp /home/oracle/initaux1.ora oracle@172.25.0.11:/u01/app/oracle/product/11.2.0/db_1/dbs/

9.在从库准备相关目录:
mkdir -p /u01/app/oracle/admin/aux1/adump
mkdir -p /home/oracle/arc_aux1_dest2
mkdir -p /u01/app/oracle/oradata/aux1/

10.修改从库的ORACLE_SID
export ORACLE_SID=aux1

11.将从库的pfile转换成spfile
sqlplus / as sysdba
SQL> create spfile from pfile;

12.启动从库的实例到nomount
startup nomount

13.在从库配置监听程序:使用静态注册
vi /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
--------------------------------------------------------------------
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.0.11)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = aux1.example.com)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = aux1)
    )
  )
--------------------------------------------------------------------

14.启动从库监听程序
$ lsnrctl start

15.在主库配置服务命名:
和主库的远程归档参数service=aux1srv保持一致
vi /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
--------------------------------------------------------------------
aux1srv =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.0.11)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = aux1.example.com)
    )
  )
--------------------------------------------------------------------

16.在主库测试与从库的网络连接:
SQL> conn sys/oracle@aux1srv as sysdba
SYS@ aux1srv> show parameter name

17.在主库启动rman复制从库:
rman target / auxiliary sys/oracle@aux1srv
RMAN> duplicate target database for standby from active database;

18.在从库增加standby log:standby log和主库的online log大小必须一致
SYS@ db01> select GROUP#,BYTES from v$log;

    GROUP#    BYTES
---------- ----------
     1   52428800
     2   52428800
     3   52428800

select * from v$standby_log;
alter database add standby logfile '/u01/app/oracle/oradata/aux1/redo04.log' size 52428800;
alter database add standby logfile '/u01/app/oracle/oradata/aux1/redo05.log' size 52428800;
alter database add standby logfile '/u01/app/oracle/oradata/aux1/redo06.log' size 52428800;

19.查看主库当前组的序列号:
select group#,sequence#,status from v$log;

20.查看从库的归档情况
select sequence#,applied from v$archived_log;

21.在主库切换日志
alter system switch logfile;

22.再查看从库的归档情况,看新的归档在从库是否出现
select sequence#,applied from v$archived_log;

23.如果从库的归档没有出现,查看主库的远程归档报错信息
select error from v$archive_dest where dest_id=3;

ERROR
-----------------------------------------------------------------
ORA-16058: standby database instance is not mounted

在主库重新激活远程归档,刷新字典消息:
alter system set log_archive_dest_state_3='enable';

24.打开从库:物理备用库打开模式只能是read only
alter database open;
select database_role,open_mode from v$database;

25.在从库启动管理恢复进程:回在从库激活一个进程MRP0
alter database recover managed standby database disconnect from session;

26.停止管理恢复进程:
alter database recover managed standby database cancel;

27.启用日志实时应用:
alter database recover managed standby database using current logfile disconnect from session;

28.在从库进行不完全恢复,找回主库误操作
alter database recover managed standby database cancel;

alter database recover managed standby database disconnect from session until change 2810381;

29.在从库启用日志的延迟应用(单位是分钟)
alter database recover managed standby database cancel;
alter database recover managed standby database disconnect from session delay 1;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
30.在从库打开闪回数据库功能
alter database recover managed standby database cancel;
select flashback_on from v$database;
alter database flashback on;

31.在从库创建还原点:
CREATE RESTORE POINT test_active GUARANTEE FLASHBACK DATABASE;

32.增加online redolog的归档路径
mkdir -p /home/oracle/arc_aux1_dest1
alter system set log_archive_dest_1='location=/home/oracle/arc_aux1_dest1/ valid_for=(online_logfiles,primary_role) db_unique_name=aux1';

alter system archive log sequence 1 to '/home/oracle/arc_aux1_dest1/';

33.激活从库:临时激活目的是为了做测试
ALTER DATABASE ACTIVATE STANDBY DATABASE;

34.打开从库
alter database open;

35.查看从库打开模式
select database_role,open_mode from v$database;

35.在从库中进行数据修改测试

36.将从库闪回到还原点,使其角色回归standby
shut immediate
startup mount
FLASHBACK DATABASE TO RESTORE POINT test_active;

37.将角色重新转换成从库:
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
shut immediate
startup
select database_role,open_mode from v$database;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
##################################################################################
系统重新起动后主从节点资源启动顺序:
1.启动从库监听
 lsnrctl start
2.启动从库(有可能不能open,那就在mount状态重新建立数据同步再open)
 export ORACLE_SID=aux1
 sqlplus / as sysdba
startup
3.启动主库
 sqlplus / as sysdba
 startup
如何校验主从是否同步?
在主库切换日志到从库查看归档是否出现!
##################################################################################
38.查看主库向从库传输日志的模式
SYS@ db01> select ASYNC_BLOCKS,AFFIRM from v$archive_dest where dest_id=3;

ASYNC_BLOCKS AFF
------------ ---
       61440 NO

ASYNC_BLOCKS --> 61440 代表主库向从库发送日志时可以延迟61440个日志块(网路IO异步)
AFFIRM --> NO 代表从库得到主库的日志并写盘后不需要通知主库
修改这两个选项,使主库向从库传输日志时使用网络IO同步,从库日志写盘成功给主库返回值

alter system set log_archive_dest_3='service=aux1srv sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=aux1';

39.查看当前主库的保护模式
select database_role,protection_mode,protection_level from v$database;

DATABASE_ROLE     PROTECTION_MODE      PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY      MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

40.升级对主库的保护模式:在主库修改
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE {AVAILABILITY | PERFORMANCE | PROTECTION};
升级为最高可用模式
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
alter system switch logfile;
alter system checkpoint;

select database_role,protection_mode,protection_level from v$database;

DATABASE_ROLE     PROTECTION_MODE      PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY      MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

41.在从库启动日志实时应用校验数据
alter database recover managed standby database using current logfile disconnect from session;

42.升级为最大保护模式
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;

select database_role,protection_mode,protection_level from v$database;

DATABASE_ROLE     PROTECTION_MODE      PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY      MAXIMUM PROTECTION   MAXIMUM PROTECTION
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
switchover:必须是主库先变成从库,从库再变成主库

主库变从库需要进行哪些配置?
*增加standby log
alter database add standby logfile '/u01/app/oracle/oradata/orcl/redo04.log' size 52428800;
alter database add standby logfile '/u01/app/oracle/oradata/orcl/redo05.log' size 52428800;
alter database add standby logfile '/u01/app/oracle/oradata/orcl/redo06.log' size 52428800;
*增加为standby log保存归档的路径
mkdir -p /home/oracle/arc_db01_dest2
alter system set log_archive_dest_2='location=/home/oracle/arc_db01_dest2/ valid_for=(standby_logfiles,standby_role) db_unique_name=demo';
*增加standby_file_management
alter system set standby_file_management=auto scope=spfile;
*增加数据文件路径转换参数
alter system set db_file_name_convert='/u01/app/oracle/oradata/aux1/','/u01/app/oracle/oradata/orcl/' scope=spfile;
*增加日志文件路径转换参数
alter system set log_file_name_convert='/u01/app/oracle/oradata/aux1/','/u01/app/oracle/oradata/orcl/' scope=spfile;
*配置监听程序
vi $ORACLE_HOME/network/admin/listener.ora
--------------------------------------------------------------------
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.0.10)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = demo.example.com)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = db01)
    )
  )
--------------------------------------------------------------------
lsnrctl status
lsnrctl start
查看主库的角色转换状态:
select database_role,switchover_status from v$database;

DATABASE_ROLE     SWITCHOVER_STATUS
---------------- --------------------
PRIMARY      TO STANDBY

开始角色转换:
TO STANDBY:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
SESSION ACTIVE:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
启动新的从库:
startup
SYS@ db01> select database_role from v$database;

DATABASE_ROLE
----------------
PHYSICAL STANDBY
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
从库变主库需要进行哪些配置?
*online redolog需要由归档路径
alter system set log_archive_dest_1='location=/home/oracle/arc_aux1_dest1/ valid_for=(online_logfiles,primary_role) db_unique_name=aux1';

*为从库启用远程归档
alter system set log_archive_dest_3='service=db01srv sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=demo';

*配置服务命名
vi $ORACLE_HOME/network/admin/tnsnames.ora
------------------------------------------------------------------
db01srv =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.25.0.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = demo.example.com)
    )
  )
------------------------------------------------------------------
查看从库的角色转换状态:
select database_role,switchover_status from v$database;

DATABASE_ROLE     SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY

将从库转换成主库:
ALTER DATABASE COMMIT TO SWITCHOVER TO primary;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使用broker实现快速故障转移:
前提条件:
主库和从库都要使用spfile
主库和从库都要配置连接自身和远程的服务命名
主从数据库都要配置local_listener参数
主库和从库都要打开闪回功能
alter database flashback on;
主库要运行在最高可用的保护模式
alter database set standby database to maximize AVAILABILITY;
主库和从库都要打开broker开关
172.25.0.11:
SQL> alter system set dg_broker_start=true;
172.25.0.10:
SQL> alter system set dg_broker_start=true;

在从库启动broker连接主库
dgmgrl
DGMGRL> connect sys/oracle@aux1srv
创建代理配置:
DGMGRL> create configuration 'testdg' as primary database is 'aux1' connect identifier is aux1srv;
将从库加入到代理配置
DGMGRL> add database 'demo' as connect identifier is db01srv maintained as physical;
查看broker配置
DGMGRL> show configuration verbose;
查看主从数据库配置
DGMGRL> show database verbose aux1;
DGMGRL> show database verbose demo;
启用broker代理配置
DGMGRL> enable configuration;
修改快速故障转移延迟时间
DGMGRL> edit configuration set property FastStartFailoverThreshold=10;
启动快速故障转移
DGMGRL> enable fast_start failover;
在从库启动监视器
dgmgrl
DGMGRL> connect sys/uplooking@aux1srv
DGMGRL> start observer;
在新的broker窗口查看broker配置
dgmgrl
DGMGRL> connect sys/uplooking@aux1srv
DGMGRL> show configuration verbose;

在新的主库修改归档路径状态将RESET变为enable
SQL> alter system set log_archive_dest_state_3='enable';
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
手工failover:
强制激活从库:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;
shut immediate
startup
select database_role,protection_level from v$database;


将老的主库再转成从库:
在新的主库里面查询角色转换的scn
select STANDBY_BECAME_PRIMARY_SCN from v$database;
STANDBY_BECAME_PRIMARY_SCN
--------------------------
           1650349
将老的主库闪回到上面scn
startup mount
FLASHBACK DATABASE TO SCN 1650349;
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
shut immediate
startup
select database_role,protection_level from v$database;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~










  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值