首页logo
  •  

jonllen

金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。

个人档案

jonllen
心情闪存 | 给他留言
妮称:jonllen
来自:中国. 湖南. 湘潭
简述:金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。
博客日历

Oracle流同步使用总结

分类:数据库

因为工作关系,最近使用Oracle数据库,前段时间用了Oracle数据库自带的流同步功能,做数据库的热备,功能还是挺强大的,直接可以在登录控制台向导进行配置,下面我就来说下Oracle流同步配置和使用问题总结。

一、Oracle流同步配置

1.设置主从数据库参数

sqlplus / as sysdba
--配置主从数据库参数
alter system set aq_tm_processes=2 scope=both;
alter system set global_names=true scope=both;
alter system set job_queue_processes=10 scope=both;
alter system set parallel_max_servers=20 scope=both;
alter system set undo_retention=3600 scope=both;
alter system set nls_date_format='YYYY-MM-DD HH24:MI:SS' scope=spfile;
alter system set streams_pool_size=25M scope=spfile;
alter system set utl_file_dir='*' scope=spfile;
alter system set open_links=4 scope=spfile;

2.设置归档模式

Oracle流同步在可以em控制台进行配置,使用system帐户登录进入源数据库实例管理主页面,再进入维护的流设置,使用全局流, 方案, 表和子集复制向导进行设置,如果数据库当前是运行在NOARCHIVELOG模式下,则会提示“要设置流, 数据库需要运行在 ARCHIVELOG 模式下。数据库当前运行在 NOARCHIVELOG 模式下。建议您从数据库主页中修改此设置, 然后返回继续运行此向导。”,所以先要设置数据库实例设置为运行在ARCHIVELOG模式下,设置Oracle数据库归档模式SQL语句如下。

--使用管理员帐户登录数据库
sqlplus / as sysdba
--设置归档路径
alter system set log_archive_dest_1='location=E:\oracle\arch' scope=spfile;
alter system set log_archive_start=TRUE scope=spfile;
alter system set log_archive_format='arch%t_%s_%r.arc' scope=spfile;
--关闭数据库例程
shutdown immediate;
--装载数据库
startup mount;
--设置数据库为archivelog模式
alter database archivelog;
--打开数据库
alter database open;
--查看归档
archive log list

3.配置源数据库流管理员

设置归档模式后,继续回到流同步向导界面,创建流管理员strmadmin。创建流管理员应当是具有 SYSDBA 权限的现有管理员,随后需要需要 SYSDBA用户名口令,在此向导完成时将创建流管理员用户。

4.配置目标数据库

目标数据库同样也要创建流管理员,输入主机名、端口、SID 或服务名、流管理员、口令,创建目标数据库的流管理员SQL语句如下,可以先在目标数据库执行。

sqlplus / as sysdba
--创建表空间
create tablespace tbs_stream datafile 'E:/Oracle/data/tbs_stream.dbf' size 100m autoextend on maxsize unlimited segment space management auto;
--将logminer的数据字典从system表空间转移到新建的表空间,防止撑满system表空间
execute dbms_logmnr_d.set_tablespace('tbs_stream');
--创建流管理用户
create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp;
--授权Stream管理用户
grant connect,resource,dba,aq_administrator_role to strmadmin;

Grant execute on dbms_aqadm to strmadmin;
Grant execute on dbms_capture_adm to strmadmin;
Grant execute on dbms_propagation_adm to strmadmin;
Grant execute on dbms_streams_adm to strmadmin;
Grant execute on dbms_apply_adm to strmadmin;
Grant execute on dbms_flashback to strmadmin;

begin
dbms_streams_auth.grant_admin_privilege(
grantee
=> 'strmadmin',
grant_privileges
=> true);
end;
/

begin
dbms_rule_adm.grant_system_privilege(
privilege
=> DBMS_RULE_ADM.CREATE_RULE_SET_OBJ,
grantee
=> 'strmadmin',
grant_option
=> true);
end;
/

begin
dbms_rule_adm.grant_system_privilege(
privilege
=> DBMS_RULE_ADM.CREATE_RULE_SET_OBJ,
grantee
=> 'strmadmin',
grant_option
=> false);
end;
/

5.配置流复制规则

Oracle流同步可以使用全局规则(指定要排除的方案和要排除的表)、方案规则(指定要包含的方案和要排除的表)、表规则(指定要包含的表或指定 WHERE 子句以包含表的子集)三种方式,全局规则即整个数据库实例同步,如果只需要同步指定用户建议使用方案规则。同时还可以选择捕获传播DML、DDL更改,排除表。

6.确认配置流和启动作业

上面配置流完成后可以生成脚本,完成提交流设置作业,需要运行源数据库的计算机的主机用户名和口令,点击提交即进行流作业。进入作业活动可以监视在执行流作业,过会作业执行成功后,可以看到源数据库的流管理增加了STREAMS_CAPTURE的捕获记录和STREAMS_PROPAGATION的传播记录,而目标数据库的流管理会增加STREAMS_APPLY的应用记录。

7.测试

配置顺利完成后,源数据库就会自动捕获传播指定对象修改,并应用同步到目标数据库。比如我们增加一个表再往表里加条记录,然后目标数据库也会自动同步过来,实现Oracle数据库的联机热备。

二、使用问题总结

1.archiver error, Connect internal only, until freed.

在使用归档模式一段时间后,出现了上述错误,因为归档的日志空间没能释放,解决办法如下:

--查看flash recovery area的archivelog使用情况
select * from V$FLASH_RECOVERY_AREA_USAGE;
--计算flash recovery area已经占用的空间
select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
--查看recovery目录
show parameter recover;

--进入Oracle主目录,找到对应的归档日志,删除或转移一些旧的日志
cd ORACLE主目录/flash_recovery_area/ORCL/archivelog
del ORACLE主目录
/flash_recovery_area/ORCL/archivelog/20120810

--使用rman命令清理不用的归档日志,以释放空间
rman target sys/pass
crosscheck archivelog
all;
delete expired archivelog all;
select * from V$FLASH_RECOVERY_AREA_USAGE;

2.ORA-00376: 此时无法读取文件 6
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\JITCADB\ECCCADATA.ORA'

这是因为有数据库文件脱机了,解决办法如下:

--查看数据文件状态
select name, status from v$datafile;
--修改状态
alter database datafile 6 online;
--重新打开数据库
shutdown immediate;
startup mount;
alter database open;

3.ORA-16038:日志 2序列号80无法归档
ORA-19809:超出了恢复文件数的限制

归档模式下的联机日志损坏掉了,解决办法如下:

--查看日志组
select group#,sequence#,archived,status from v$log;
--重建该日志文件
alter database clear unarchived logfile group 2;
--重新打开数据库
alter database open;

Oracle流同步通过高级列对,解析归档日志挖掘DDL、DML语句,对主数据库没有增加额外太大压力,提高了数据库的可用性。当然Oracle流同步也有些需要注意的地方,比如说不能更新数据库的主键的字段,配置维护相对较为复杂。

标签:数据库
  • posted@ 2012-12-02 14:03
  • update@
  • 阅读(4155)
  • 评论(0)

相关文章

评论
暂无任何评论。
发表评论
*必填
回复通知我
*必填

博文推荐