ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle10g 物理备库的搭建

oracle10g 物理备库的搭建

原创 Linux操作系统 作者:邸立明 时间:2013-04-28 14:44:32 0 删除 编辑
 
环境描述:
主库:
        IP:        192.168.203.130
        主机名:vm10g
        ORACLE_SID=lixing
        ORACLE_BASE=/u01
        ORACLE_HOME=/u01/oracle
备库:
        IP:        192.168.203.129
        主机名:vm10g1
        ORACLE_SID=lixing
        ORACLE_BASE=/u01
        ORACLE_HOME=/u01/oracle

准备工作:分别在主库和备库都安装上oracle软件,不装数据库。
安装配置步骤:
        1、运行dbca创建数据库(安装过程中需要注意:先关掉flash recovery,启用archive),数据库名为dgdemo
        2、登陆到数据库上
                [oracle@vm10g ~]$ sqlplus /nolog
                SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 11 20:31:09 2010
                Copyright (c) 1982, 2005, Oracle.  All rights reserved.
                SQL> conn / as sysdba;
                Connected.
                SQL>
        3、将主库设置为 FORCE LOGGING 模式 (数据库处于Mount状态)
                SQL> ALTER DATABASE FORCE LOGGING;
                Database altered.
        4、创建一个密码文件,如果数据库是用dbca创建的则会在$ORACLE_HOME/dbs/下自动创建一个叫orapwdSID的一个密码文件。否则可以用                orapwd命令创建一个。
        orapwd file=orapwlixing  password=oracle entries=10
        5、配置Standby Redo Log。创建组数至少要比主库的online redo log组数多一个。(数据库处于Mount状态)
                SQL> select group#,bytes from v$log;
                        GROUP#      BYTES
                ---------- ----------
                                 1   52428800
                                 2   52428800
                                 3   52428800
                这里创建4组
                SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/oradata/lixing/stdbyredo01.log') SIZE 52428800;
                        Database altered.
                        SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/oradata/lixing/stdbyredo02.log') SIZE 52428800;
                        Database altered.
                        SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/oradata/lixing/stdbyredo03.log') SIZE 52428800;
                        Database altered.
                        SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/u01/oradata/lixing/stdbyredo04.log') SIZE 52428800;
                验证一下创建是否成功
                SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
                        GROUP#    THREAD#  SEQUENCE# ARC STATUS
                ---------- ---------- ---------- --- ----------
                                 4          0          0 YES UNASSIGNED
                                 5          0          0 YES UNASSIGNED
                                 6          0          0 YES UNASSIGNED
                                 7          0          0 YES UNASSIGNED
                        Database altered.
                如果想删除某个组可以用下面的命令
                SQL> alter database drop standby logfile group 4;
                如果给某个组添加成员可以用下面命令
                SQL> ALTER DATABASE ADD STANDBY LOGFILE MEMBER '/u01/oradata/lixing/stdbyredo04_1.log' TO GROUP 7;
                删除组中的成员用以下命令
                SQL> ALTER DATABASE DROP STANDBY LOGFILE MEMBER '/u01/oradata/lixing/stdbyredo04_1.log';
                Database altered.
                SQL> host rm -f /u01/oradata/dgdemo/stdbyredo04_1.log
        6、检查数据库是否处于归档状态
                SQL> archive log list;
                Database log mode              Archive Mode
                Automatic archival             Enabled
                Archive destination            /u01/app/oracle/arch_log
                Oldest online log sequence     1
                Next log sequence to archive   2
                Current log sequence           2
                如果不是处于归档状态则运行下面命令
                SQL> SHUTDOWN IMMEDIATE;
                SQL> STARTUP MOUNT;
                SQL> ALTER DATABASE ARCHIVELOG;
                SQL> ALTER DATABASE OPEN;
        7、创建备库的控制文件(创建后数据库不能做结构性的改变)(数据库现在处于Mount状态)
                SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/u01/oradata/lixing/stdby.ctl';
        8、创建pfile以便于修改配置参数
                SQL> CREATE PFILE  FROM SPFILE;
        9、关掉数据库开始编辑参数
                SQL> shutdown immediate;
        10、$ vi /u01/oracle/dbs/initlixing.ora
                添加下面内容
                DB_UNIQUE_NAME=unq_lixingp 注意:这个名称自己定义
                LOG_ARCHIVE_CONFIG='DG_CONFIG=(unq_lixingp,unq_lixings)' 注意:括号中是db_unique_name
                LOG_ARCHIVE_DEST_2=
                 'SERVICE=lixings LGWR ASYNC                注意:这里的service名称为tnsname
                  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
                  DB_UNIQUE_NAME=unq_lixings'
                LOG_ARCHIVE_DEST_STATE_1=ENABLE
                LOG_ARCHIVE_DEST_STATE_2=ENABLE
                LOG_ARCHIVE_MAX_PROCESSES=30
                FAL_SERVER=lixings
                FAL_CLIENT=lixingp
                STANDBY_FILE_MANAGEMENT=AUTO
        11、进入sqlplus创建pfile(NOMOUNT状态)
                SQL> CREATE SPFILE from PFILE;
        12、创建tnsnames.ora和listener.ora,可以手动创建也可以用netca创建,无论哪种方法都必须保证能互相畅通。
                $ cd /u01/oracle/network/admin/
                $ vi tnsnames.ora
                输入下面内容
                LIXINGP =
                    (DESCRIPTION =
                        (ADDRESS_LIST =
                          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.203.130)(PORT = 1521))
                        )
                        (CONNECT_DATA =
                       (SERVICE_NAME = lixing)               注意 service_name为lixing 与备库一致
                        )
                    )
                 LIXINGS =
                     (DESCRIPTION =
                       (ADDRESS_LIST =
                         (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.203.129)(PORT = 1521))
                         )
                    (CONNECT_DATA =
                       (SERVICE_NAME = lixing)                注意service_name为Lixing与备库一致
                   )
                     )   
                 $ vi listener.ora
                SID_LIST_LISTENER =
                  (SID_LIST =
                  (SID_DESC =
                    (SID_NAME = PLSExtProc)
                   (ORACLE_HOME = /u01/oracle)
                       (PROGRAM = extproc)
                    )
                  )
             LISTENER =
                 (DESCRIPTION_LIST =
                   (DESCRIPTION =
                    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.203.130)(PORT = 1521))
                      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
                       )
                    )
                SID_LIST_LISTENER =
                  (SID_LIST =
                   (SID_DESC =
                        (GLOBAL_DBNAME = lixing)
                   (SID_NAME = lixing)
                       )
                        )  注意:该部分在使用netaca创建监听的时候不会出现该部分。在备库远程连接主库的时候conn system/oracle@lixing出现以下错误:ORA-12514: TNS:listener
                             does not currently know of service requested in connect descriptor。将该部分添加到listener.ora,重启监听.lsnrctl reload 问题解决。

        13、复制备份文件到备库
                $ cd /u01/oracle/dbs
                $ scp -r * oracle@192.168.203.129:/u01/oracle/dbs/
                $ cd /u01/oradata/lixing
                $ scp * oracle@192.168.203.129:/u01/oradata/lixing
                $ cd /u01
                $ scp -r admin oracle@192.168.203.129:/u01/
                $ cd /u01/oracle/network/admin
                $ scp listener.ora tnsname.ora oracle@192.168.203.129:/u01/oracle/network/admin/
        14、打开备库做以下操作.注意:不是启动实例
                $ cd /u01/oradata/lixing/
                $ rm -rf control0*
                $ cp stdby.ctl control01.ctl
                $ cp stdby.ctl control02.ctl
                $ cp stdby.ctl control03.ctl

                $ vi pfile 对相应文件做修改
                DB_UNIQUE_NAME=unq_lixings
                LOG_ARCHIVE_CONFIG='DG_CONFIG=(lixingp,lixings)'
                LOG_ARCHIVE_DEST_2=
                 'SERVICE=lixingp LGWR ASYNC
                  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
                  DB_UNIQUE_NAME=unq_lixingp'
                LOG_ARCHIVE_DEST_STATE_1=ENABLE
                LOG_ARCHIVE_DEST_STATE_2=ENABLE
                LOG_ARCHIVE_MAX_PROCESSES=30
                FAL_SERVER=lixingp
                FAL_CLIENT=lixings
                STANDBY_FILE_MANAGEMENT=AUTO

                $ cd /u01/oracle/network/admin/
                $ vi listener.ora
                将主库IP修改为备库IP即把192.168.203.130 修改为 192.168.203.129
        15、在备库中进入sqlplus
                $ sqlplus /nolog
                SQL> conn / as sysdba;
                SQL> CREATE SPFILE from PFILE;
        16、测试oracle net是否畅通
                首先启动监听服务(分别在主机和备机上进行)
                $ lsnrctl stop
                $ lsnrctl start
                分别在主机和备机上运行下面命令来测试
                $ tnsping lixingp
                $ tnsping lixings
        17、启动主库(正常启动)
                $ sqlplus /nolog
                SQL> conn / as sysdba;
                SQL> startup
        18、启动备库到mount状态,并打开redo Apply
                $ sqlplus /nolog
                SQL> conn / as sysdba;
                SQL> startup mount
                SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;(该状态是redo appy状态,即将主库上的日志解析到了备库,这个状态不能在备库
上进行查询,此时数据库处于mount状态)
        19、在主库上做一次日志切换
                SQL> ALTER SYSTEM SWITCH LOGFILE;
        20、分别在主库和备库上做下列查询,检查归档日志是否由主库传送到备库
                SQL> l
                1* SELECT DESTINATION, STATUS, ARCHIVED_THREAD#, ARCHIVED_SEQ# FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE'
                以下语句可以查看日志应用情况
                SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG  ORDER BY SEQUENCE#;
                 SEQUENCE# APP
                ---------- ---
                                 2 YES
                                 3 YES

        如果出现上面情况则说明配置成功。
              查看归档是是否有误:
              SELECT DEST_NAME,STATUS,ERROR FROM V$ARCHIVE_DEST.如果出现错误,大多是LOG_ARCHIVE_DEST_2参数配置有问题。可能的错误:
              ORA-16009: remote archive log destination must be a STANDBY database
        21、在主库建表然后在备库查询进行验证
                SQL> create table dlm(id int)
                SQL> insert into dlm values(1);
                SQL> commit;
                SQL> select * from dlm;
                ID
                ---
                1
        22、在主库上做个日志归档
                SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
        23、在备库上取消掉redo apply
                SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;(该状态的时候,数据库处于只读状态,不能对进行增,删,改操作,只能进行select)
                SQL> ALTER DATABASE OPEN;
                SQL> select * from dlm;
                ID
                ---
                1
        测试成功
        24、再次切换为备库的redo apply状态
                SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
        主库备库互相切换
        25、在主库上做如下sql语句,主库此时处于OPEN状态。
                SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; 在做主备库切换的时候,commit to参数将自动提交没有提交的事务,在有会
话连接的时候,该命令with session shutdown 将断开会话
                SQL> shutdown immediate;
                SQL> startup nomount;
                SQL> ALTER DATABASE MOUNT STANDBY DATABASE;  以备库的形式进行MOUNT
                SQL> RECOVER MANAGED STANDBY DATABASE DISCONNECT;(Redo Apply)
        26、在备库上做switchover
                SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 将备库未提交的事务进行COMMIT,然后转换成主库
                SQL> shutdown immediate;
                SQL> startup
        27、分别在新的主库和备库上查看状态,验证主库备库是否切换正常。
                SQL> select name,database_role from v$database;
       
        再次创建表在切换后的主库备库上验证
        28、在新的主库上创建表               
                SQL> create table huyoung(id integer,name char(10));
                SQL> insert into huyoung values(111,'haha');
                SQL> commit;
                SQL> select * from huyoung;
                SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
        29、在新的备库上做下面操作以取消redo apply
                SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
                SQL> ALTER DATABASE OPEN;
                SQL> select * from dlm;
        30、恢复新备库为redo apply状态
               

维护
        1、开机顺序,先备库的listener再启动备库。再启动主库的listener,再启动主库。
        2、关机顺序,先关闭主库,再关闭备库
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28843436/viewspace-759483/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-04-28

  • 博文量
    1
  • 访问量
    1734