• DataGuard physical standby创建与维护


    首先介绍一些概念

    • physical standby database ,即直接从主库接受archivedlog然后做基于block的物理恢复,所以physical standby在物理文件一级完全等同于主库。
    • Logical standby database是把主库上传过来的archived log通过logminer技术,解析为sql语句,直接在logical standby上作基于sql的同步。

    重要的进程

    • RFS (remote file server process) :接受由primary数据库的lgwr或arch通过oracle net传来的redo 数据,写入standby redo logs或standby archived redo logs
    • MRP(managed Recovery Process): 管理恢复进程。
    • FAL(fetch archive log): 在primary和standby数据库的两端同时配置。Primary端是fetch archive log server,standby端是fetch archive log client. FAL是自动探测primary/standby数据库之间archived logs是否有有间隔的一个进程。

    一、开始做physical standby
    1.1 主库上的准备工作
    1、开启forced logging模式

    alter database force logging;

    2、开启归档模式和设置归档路径

    alter system set log_archive_dest_1=’LOCATION=/u02/oradata/archive’scope=both;

    3、为备库创建控制文件

    alter database create standby controlfile as ‘目标路径’;

    4、验证主库的数据文件,利用主库的备份创建备库
    5、修改tnsnames.ora,加入备库信息:

    STANDBY =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.40.13.179)(PORT = 1521))
    )

    (CONNECT_DATA =
    (SERVICE_NAME = orcl)
    )
    )

    6.为备库创建参数文件,可利用主库的spfile生成pfile然后拷贝到备库

    1.2 创建备用数据库
    1、修改从主库拷贝的备库参数文件
    一般只须加这些参数:
    standby_archive_dest=’d:oradataarchive’
    standby_file_management=AUTO
    remote_archive_enable=true
    fal_server=’orcl’
    fal_client=’standby’

    需要修改的一些参数:
    control_files:修改指向备库的控制文件
    standby_archive_dest:指向备库的归档日志目录(从主库接收归档日志)
    db_file_name_convert:在目录结构改变时需要设置,格式为(‘主库数据文件路径’,'从库数据文件路径’)
    log_file_name_convert:在目录结构改变时需要设置,格式为(‘主库日志文件路径’,'从库日志文件路径’)
    log_archive_dest_1:应指向从库的归档日志目录
    standby_file_management:设置为AUTO
    remote_archive_enable:设置为TURE(测试中发现加上这条就无法生成spfile,可能是系统默认值不要设置)
    instance_name:应该修改为从库的数据库实例名(如在同一主机时,备库肯定无法和主库相同,肯定要修改)
    lock_name_space:设置为备库实例名

    2、如果是windows平台,利用oradim创建windows服务
    3、配置监听进程及tnsnames
    以下是备库tnsnaes.ora

    ORCL =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.40.13.180)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = orcl)
    )
    )

    standby =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.40.144.79)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = orcl)
    )
    )

    EXTPROC_CONNECTION_DATA =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    )

    (CONNECT_DATA =
    (SID = PLSExtProc)
    (PRESENTATION = RO)
    )

    4、创建备库SPfile(由修改过的Pfile生成)
    create spfile from Pfile=’备库路径’;

    5、启动physical standby database

    startup nomount;
    alter database mount standby database;

    6、置于恢复状态

    alter database recover managed standby database disconnect from session;

    7、在主库上设置到备库的归档(在主库上操作)

    alter system set log_archive_dest_2=’SERVICE=备库实例名’ scope=both;
    alter system set log_archive_dest_state_2=enable scope=both;

    1.3 验证physical standby database
    当创建了物理备份数据库和设置日志传输服务,可在备份数据库上验证修改是否生效
    1、查询现有归档日志

    select name,applied from v$archived_log;

    2、在主库上归档当前日志

    alter system archive log current;

    3、验证新日志是否接收到(同步骤1)
    4、验证是否新的归档Redo日志已经被应用
    select name,applied from v$archived_log ;

    二、主备库切换
    2.1 主库切到备库
    1、 在主库

    SQL> alter database commit to switchover to physical standby;
    Database altered.

    SQL> shutdown immediate
    ORA-01507: database not mounted

    ORACLE instance shut down.

    以备用模式启用原主库

    SQL> startup nomount;
    ORACLE instance started.

    SQL> alter database mount standby database;
    SQL> select name,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;

    NAME OPEN_MODE PROTECTION_MODE DATABASE_ROLE
    ——— ———- ——————– —————-
    PRIMARY MOUNTED MAXIMUM PERFORMANCE PHYSICAL STANDBY

    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
    Database altered.

    2、 在备库

    SQL> alter database commit to switchover to primary;
    SQL> shutdown immediate;

    ORA-01507: database not mounted
    ORACLE instance shut down.

    SQL> startup
    SQL> alter system switch logfile;

    System altered.

    三、日常管理
    3.1 关于启动关闭顺序
    启动的时候,先从库的listener,再启动从库,再启动主库的listener,再主库
    关闭的时候,先关闭主库,再启动从库。

    3.2 检查当前Primary库的保护模式

    select protection_mode from v$database;

    3.3 转换数据库模式为MAX AVAILABILITY:

    shutdown immediate;
    startup mount;
    alter database set standby database to maximize performance;
    alter database open;

    3.4 测试Primary的归档能否应用到Standby
    查看主数据库日志是否全部传送到副数据库,可查看v$archive_gap,更简单的方法是查看各自主机的日志归档目录的日志序号即可

    select max(sequece#) from v$archived_log;
    select file_name from v$datafile;
    show parameter fal
    show parameter lag
    select * from v$archive_gap;

    3.5 设置归档频率
    如果要强制Primary一分种归档一次,那么设置Primary的初始化参数ARCHIVE_LAG_TARGET:

    alter system set ARCHIVE_LAG_TARGET=60 scope=both;

    3.6 停止Standby

    alter database recover managed standby database cancel;
    shutdown immediate;

    3.7 切换到只读模式

    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    ALTER DATABASE OPEN READ ONLY;

    3.8 切换回管理恢复模式

    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE PARALLEL 8 DISCONNECT FROM SESSION;

    3.9 哪些归档日志没有归档到备用库
    假设local归档目录的ID为1,remote的归档目录为2。

    SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# FROM
    (SELECT THREAD#, SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1) LOCAL
    WHERE
    LOCAL.SEQUENCE# NOT IN
    (SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND
    THREAD# = LOCAL.THREAD#);

    3.10 注意事项:
    1、如果在主库执行 alter database clear unarchived logfile或alter database open resetlogs ,则dataguard要重建。

    2、在连续恢复模式下工作之前,需要保证之前所有的归档日志己经应用到备用库上。因为在连续恢复模式的情况下,oracle不会应用之前的归档日志,而只会应用后面陆续到来的归档日志。

    3、出现归档日志gap时,需要找出相应的归档日志, 然后将这些归档日志copy到备用节点的standby_archive_dest和log_archive_dest目录下面。需要注意的是log_archive_dest目录下也需要copy。然后ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;

    4、新建表、表空间、datafile都能通过日志应用到备库,但新建一个临时表空间,rename datafile 均不能应用到备库上.

    5、应当实时察看standby库的alert文件,就能清晰明了地知道主备更新的情况。这也是排错的重要方法,切记!!

    3.11 failover和switchover

    Failover : 将主数据库offline,备用数据库online,这种操作由系统和软件失败引起。 即使在备用数据库上应用重做日志,也可能出现数据丢失的现象,除非备用数据库运行在 guaranteed protection 模式。 原主数据库重新使用时必须重新启动实例。 其它的备用数据库也需重新启动实例。

    Switchover : 故意将主数据库offline,而将另一备用数据库online,它能够切换到备用数据库而不需同步操作。如:可使用 Switchover 完成系统的平滑升级。 即使在备用数据库上不应用重做日志,也不会造成数据的丢失。 数据库不需重新启动实例。这使主数据库几乎能立即在备用数据库上恢复它的功能,因此可经常进行定期维护而不需中断操作。   Failover和Switchover的区别为:当Failover发生,备用数据库切换为主数据库之后,它丢失了备用数据库的所有能力,也就是说,不能再返回到备用模式;而Switchover可以,备用数据库可切换为主数据库,也可从主数据库再切换回备用数据库。

    3.12 相关视图

    DBA_LOGSTDBY_EVENTS (Logical Standby Databases Only)
    DBA_LOGSTDBY_LOG (Logical Standby Databases Only)
    DBA_LOGSTDBY_NOT_UNIQUE (Logical Standby Databases Only)
    DBA_LOGSTDBY_PARAMETERS (Logical Standby Databases Only)
    DBA_LOGSTDBY_PROGRESS (Logical Standby Databases Only)
    DBA_LOGSTDBY_SKIP (Logical Standby Databases Only)
    DBA_LOGSTDBY_SKIP_TRANSACTION (Logical Standby Databases Only)
    DBA_LOGSTDBY_UNSUPPORTED (Logical Standby Databases Only)
    V$ARCHIVE_DEST
    V$ARCHIVE_DEST_STATUS
    V$ARCHIVE_GAP
    V$ARCHIVED_LOG
    V$DATABASE
    V$DATAFILE
    V$DATAGUARD_STATUS
    V$LOG
    V$LOGFILE
    V$LOG_HISTORY
    V$LOGSTDBY (Logical Standby Databases Only)
    V$LOGSTDBY_STATS (Logical Standby Databases Only)
    V$MANAGED_STANDBY (Physical Standby Databases Only)
    V$STANDBY_LOG

  • 相关阅读:
    VUE学习日记(十八) ---- 传递数据
    VUE学习日记(十七) ---- 组件数据函数
    VUE学习日记(十六) ---- 表行组件
    DataGridView控件使用Demo
    C# ADO.NET连接字符串详解
    SQL Server management studio使用sa连接时报错与伺服器的连接已成功,但在登入程序是发生错误
    Oracle Rac to Rac One Node
    online创建索引中途取消导致索引无法删除解决办法
    oracle常用hint添加
    C# url的编码解码,xml和json的序列化和反序列化
  • 原文地址:https://www.cnblogs.com/sopost/p/2190095.html
Copyright © 2020-2023  润新知