ITPub博客

首页 > 数据库 > Oracle > Oracle 9i Logical Standby Database

Oracle 9i Logical Standby Database

原创 Oracle 作者:smartbaohua 时间:2008-11-14 14:08:10 0 删除 编辑

Oracle 9i Logical Standby Database

1. 环境准备

1. 准备至少2台主机,其中一台已经安装了Oracle9R2的版本数据库,并创建了实例,另外一台为从库需要安装Oracle数据库软件;

我们定义:有实例的为主库;另外一个standby的环境为从库;

2. 准备好存储,建议使用和环境相同的存储;

3.需要拥有2个角色的用户LOGSTDBY_ADMINISTRATOR role和SELECT_CATALOG_ROLE;

2. 主库需要进行的操作

1. 必须在主库端强制生成log,因为如果在主、从库是通过redolog进行信息同步的,如果主库端进行了nologging的强制的话,那么信息将无法传递给从库导致两库环境的不统一;

SQL> ALTER DATABASE FORCE LOGGING;

2. 主库端必须要开启归档日志,并定义好归档的目录;

SQL> alter system set log_archive_dest_1='location=/u01/oracle/arch MANDATORY ' scope=both;

这里如何开归档就不再详细描述了,如果不会开可以参考一下Oracle的官方文档;

3. 在主库端允许日志的并行即SET LOG_PARALLELISM=1

SQL> alter system set log_parallelism=1 scope=spfile;

System altered.

SQL> shutdown

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area 1561401968 bytes

Fixed Size 453232 bytes

Variable Size 486539264 bytes

Database Buffers 1073741824 bytes

Redo Buffers 667648 bytes

Database mounted.

Database opened.

SQL>

4. 明确主从两个数据库之间可以同步的数据类型和表的类型,对于有些数据类型和表是可以同步的,但是有些数据类型和表是无法通过DataGuard进行同步的:

可以同步的数据类型

可以同步的表类型

CHAR

NCHAR

VARCHAR2 and VARCHAR

NVARCHAR2

NUMBER

DATE

TIMESTAMP

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE

INTERVAL YEAR TO MONTH

INTERVAL DAY TO SECOND

RAW

CLOB

BLOB

不能同步的数据类型

不支持的表类型

NCLOB

LONG

LONG RAW

BFILE

ROWID

UROWID

user-defined types

object types REFs

varrays

nested tables

User-defined tables and sequences in the SYS schema

Tables with unsupported datatypes

Tables using data segment compression

Index-organized tables

5. 明确在当前的主库中哪些表是可以同步哪些表是不能同步的,可以通过下列语句查询:

       SELECT OWNER, TABLE_NAME,BAD_COLUMN FROM DBA_LOGSTDBY_NOT_UNIQUE
         WHERE TABLE_NAME NOT IN (SELECT TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED);
        
         在BAD_COLUMN列中会显示Y或者N两种情况,注意:
       Y- 
表示查询到的表中使用了无限制的数据类型,比如CLOB or BLOB,此时提交的操作会继续在这些表中进行同步,但是你必须要保证这些类型在表中的列是唯一的,如果有2行相同的类型在一个表中,那么同步的过程很可能会出现错误,如果无法确认的话可以考虑在表上创建主键;
        N-
          表示这个表包含了足够的信息来进行同步;

6. 确认在主库上追加日志的功能必须打开,可以用以下的语句来确认是否已经打开了此功能:

        SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;
          SUP SUP
          --- ---
          YES YES
         上边这个列子表示追加日志的功能已经打开;
         
          如果没有开这个功能请按照以下操作进行:
          第一:开启日志追加功能
          SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;
        第二:切换一个新的redolog
          SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
          第三: 检查配置结果
          SQL> SELECT SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI FROM V$DATABASE;
          SUP SUP
          --- ---
          YES YES

7. 创建一个主从库转换用的表空间:

 SQL>CREATE TABLESPACE logmnrts DATAFILE '/u01/oracle/oradata/report/logmnrts.dbf' SIZE 25M AUTOEXTEND ON MAXSIZE UNLIMITED;
        SQL>EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts');

3. 生成从库

步骤

内容

操作库

1

确认主库上的数据文件和日志文件

Primary

2

生成一份主库的备份

Primary

3

生成一份初始化参数文件并拷贝到从库端

Primary

4

把主库的文件副本复制到从库上

Primary

5

设置从库端的初始化参数文件

Standby

6

如果从库安装在Windowns环境,创建一个Windowns服务

Standby

7

配置两个数据库的监听

Primary and Standby

8

开启死进程监控系统

Standby

9

配置主库和从库的server_name文件

Primary and Standby

10

从库启动到mount状态

Standby

11

修改数据文件的名称

Standby

12

修改redolog的名称

Standby

13

开启DatabaseGuard功能

Standby

14

为逻辑从库修改sid名称

Standby

15

在参数文件里修改DB-name

Standby

16

为从库创建临时文件

Standby

17

注册归档日志,开始sql同步功能

Standby

18

从库开启归档功能

Primary

1. 确认主库上的数据文件和日志文件

数据文件:

          SQL> SELECT NAME FROM V$DATAFILE;

NAME

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

/u01/oracle/oradata/report/system01.dbf

/u01/oracle/oradata/report/undotbs01.dbf

/u01/oracle/oradata/report/users01.dbf

/u01/oracle/oradata/report/report_tab01.dbf

/u01/oracle/oradata/report/report_ind02.dbf

/u01/oracle/oradata/report/logmnrts.dbf

日志文件:

SQL> select MEMBER FROM V$LOGFILE;

MEMBER

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

/u01/oracle/oradata/report/redo01.log

/u01/oracle/oradata/report/redo02.log

/u01/oracle/oradata/report/redo03.log

2. 生成一份主库的备份

第一步:shutdow 主库

          SQL> SHUTDOWN IMMEDIATE;

第二步:把主库的数据文件copy到一个临时的目录里:

cp /u01/oracle/oradata/report/system01.dbf /u01/oracle/oradata/standby/system01.dbf cp /u01/oracle/oradata/report/undotbs01.dbf /u01/oracle/oradata/standby/undotbs01.dbf

cp /u01/oracle/oradata/report/users01.dbf /u01/oracle/oradata/standby/users01.dbf

cp /u01/oracle/oradata/report/report_tab01.dbf /u01/oracle/oradata/standby/report_tab01.dbf

cp /u01/oracle/oradata/report/report_ind02.dbf /u01/oracle/oradata/standby/report_ind02.dbf

cp /u01/oracle/oradata/report/logmnrts.dbf /u01/oracle/oradata/standby/logmnrts.dbf

第三步:启动主库到mount状态:

SQL> startup mount;

第四步:生成一个从库使用的controlfile:

ALTER DATABASE BACKUP CONTROLFILE TO '/u01/oracle/oradata/standby/std.ctl';

第五步:开启主库的DML和DDL的限制:

          ALTER SYSTEM ENABLE RESTRICTED SESSION; 

第六步:生成LogMiner的数据字典:

        SQL> ALTER DATABASE OPEN;
           SQL> EXECUTE DBMS_LOGSTDBY.BUILD;

第七步:开启数据库的DML和DDL功能:

           SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;
      第八步:查看最后一个归档的归档日志:
           SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
           SQL> SELECT NAME FROM V$ARCHIVED_LOG 
           2> WHERE (SEQUENCE#=(SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG 
           3> WHERE DICTIONARY_BEGIN = 'YES' AND STANDBY_DEST= 'NO'));
          NAME
          --------------------------------------------------------------------------------
          /u01/oracle/arch/1_14.dbf

3. 为从库准备初始化参数文件:

SQL> CREATE PFILE='/u01/oracle/oradata/standby/initstdreport.ora' FROM SPFILE;

4. 把从库的文件copy到主库上:

[oracle@s22028 oradata]$ scp -r standby oracle@10.4.120.218:/u01/oracle/oradata

oracle@10.4.120.218's password:

system01.dbf 100% 1024MB 6.9MB/s 02:28

users01.dbf 100% 500MB 6.8MB/s 01:14

report_tab01.dbf 100% 1024MB 8.1MB/s 02:06

logmnrts.dbf 100% 25MB 8.3MB/s 00:03

report_ind02.dbf 100% 512MB 8.0MB/s 01:04

initstdreport.ora 100% 1154 1.1KB/s 00:00

undotbs01.dbf 100% 2048MB 7.9MB/s 04:21

std.ctl 100% 1592KB 1.6MB/s 00:00

5. 修改从库的配置文件:

修改之前:

*.aq_tm_processes=1

*.background_dump_dest='/u01/oracle/admin/report/bdump'

*.compatible='9.2.0.0.0'

*.control_files='/u01/oracle/oradata/report/control01.ctl','/u01/oracle/oradata/report/control02.ctl','/u01/oracle/oradata/report/control03.ctl'

*.core_dump_dest='/u01/oracle/admin/report/cdump'

*.db_block_size=8192

*.db_cache_size=1073741824

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='report'

*.fast_start_mttr_target=300

*.hash_join_enabled=TRUE

*.instance_name='report'

*.java_pool_size=200

*.job_queue_processes=10

*.large_pool_size=209715200

*.log_archive_dest_1='location=/u01/oracle/arch MANDATORY'

*.log_archive_dest_2=''

*.log_archive_start=TRUE

*.log_parallelism=1

*.open_cursors=300

*.pga_aggregate_target=209715200

*.processes=150

*.query_rewrite_enabled='FALSE'

*.remote_login_passwordfile='EXCLUSIVE'

*.shared_pool_size=209715200

*.sort_area_size=524288

*.standby_archive_dest='/u01/oracle/stdarch'

*.standby_file_management='AUTO'

*.star_transformation_enabled='FALSE'

*.timed_statistics=TRUE

*.undo_management='AUTO'

*.undo_retention=10800

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/oracle/admin/report/udump'

修改之后:

*.aq_tm_processes=1

*.background_dump_dest='/u01/oracle/admin/report/bdump'

*.compatible='9.2.0.0.0'

*.control_files='/u01/oracle/oradata/standby/std.ctl'

*.core_dump_dest='/u01/oracle/admin/report/cdump'

*.db_block_size=8192

*.db_cache_size=1073741824

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='report'

*.fast_start_mttr_target=300

*.hash_join_enabled=TRUE

*.instance_name='stdrep'

*.java_pool_size=200

*.job_queue_processes=10

*.large_pool_size=209715200

*.log_archive_dest_1='location=/u01/oracle/arch'

*.log_archive_dest_2=''

*.log_archive_start=TRUE

*.log_parallelism=1

*.open_cursors=300

*.pga_aggregate_target=209715200

*.processes=150

*.query_rewrite_enabled='FALSE'

*.remote_login_passwordfile='EXCLUSIVE'

*.shared_pool_size=209715200

*.sort_area_size=524288

*.standby_archive_dest='/u01/oracle/stdarch'

*.standby_file_management='AUTO'

*.star_transformation_enabled='FALSE'

*.timed_statistics=TRUE

*.undo_management='AUTO'

*.undo_retention=10800

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/oracle/admin/report/udump'

*.lock_name_space=stdrep

注意一点:lock_name_space的名称不能超过8个字符,否则启动的时候会提示错误

6. 如果是windows环境需要创建windows service,我们这里就不介绍了

7. 配置两个数据库的监听文件

从库的监听:

#LISTENER.ORA-Network-Configuration-File: /u01/oracle/product/9207/network/admin/listener.ora

# Generated by Oracle configuration tools.

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST =10.4.120.218)(PORT = 1521))

)

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

)

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/oracle/product/9207)

(PROGRAM = extproc)

)

)

主库的监听:

#LISTENER.ORA-Network-Configuration-File: /u01/oracle/product/9207/network/admin/listener.ora

# Generated by Oracle configuration tools.

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST =10.4.120.38)(PORT = 1521))

)

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

)

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/oracle/product/9207)

(PROGRAM = extproc)

)

)

8. 打开Dead Connect 配置:

文件内容如下:

cat sqlnet.ora

SQLNET.EXPIRE_TIME=2

9. 配置netservicename:

这个使用过Oracle的人都知道怎么配置,就不多说了;

10. 把从库启动到mount状态:

SQL> startup mount pfile ='/u01/oracle/oradata/standby/initstdreport.ora'

ORACLE instance started.

Total System Global Area 1561926256 bytes

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

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

注册时间:2008-03-10

  • 博文量
    44
  • 访问量
    368130