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. 明确在当前的主库中哪些表是可以同步哪些表是不能同步的,可以通过下列语句查询:
BAD_COLUMNYN
Y-
CLOB or BLOB2
N-
6. 确认在主库上追加日志的功能必须打开,可以用以下的语句来确认是否已经打开了此功能:
7. 创建一个主从库转换用的表空间:
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. 确认主库上的数据文件和日志文件
数据文件:
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 主库
第二步:把主库的数据文件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的限制:
第六步:生成LogMiner的数据字典:
第七步:开启数据库的DML和DDL功能:
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博客 ” ,链接:http://blog.itpub.net/598601/viewspace-1013372/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/598601/viewspace-1013372/