环境:
Windows 2008 服务器,Oracle 11g r2 数据库
任务要求:
有三个数据库实例,一个实例供管理子系统使用,一个实例供利用子系统使用,还有一个实例专门做备份。
选择的技术:
Oracle Stream Replication(流复制)
创建另外两个实例
源实例:orcl
目标1:target
目标2:target2
停止应用服务器,防止用户因为使用应用服务器而对数据库做出的改变。
并导出 orcl 实例中用户的数据,用 exp 命令
例如 exp nt_gxt/oais@orcl file=E:\nt_gxt_201508140923.dmp
环境设置
使用命令行登录数据库
sqlpus sys/orcl@orcl as sysdba 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=512M scope=spfile; alter system set utl_file_dir='*' scope=spfile; alter system set open_links=4 scope=spfile;
--下面为设置归档模式的命令:(注意:修改路径)
alter system set log_archive_dest_1='location=E:\DevProgramsFile\Oracle\archive\target' 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;
(如果startup mount报如上错误,需要对实例进行静态注册,在listener.ora文件中添加如下内容,并重新启动监听服务)
alter database archivelog; alter database open; --如果要查看归档模式是否设置成功可以用命令: archive log list --如果出现如下截图内容则说明设置成功,
8. 创建 stream 管理用户
1). 创建主环境管理用户
Sqlplus sys/orcl@orcl as sysdba #创建主环境的 stream 专用表空间(注意修改路径) create tablespace tbs_stream datafile 'E:\DevProgramsFile\Oracle\oradata\orcl\tbs_stream01.dbf' size 100m autoextend on maxsize unlimited segment space management auto; #将logminer的数据字典从system表空间转移到新建的表空间,防止撑满system表空间 execute dbms_logmnr_d.set_tablespace('tbs_stream'); #创建Stream管理用户 create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp; #授权Stream管理用户 grant connect,resource,dba,aq_administrator_role to strmadmin; begin dbms_streams_auth.grant_admin_privilege( grantee => 'strmadmin', grant_privileges => true); end; /
2). 创建从环境的 stream 管理用户
Sqlplus sys/orcl@target as sysdba #创建Stream专用表空间 create tablespace tbs_stream datafile 'E:\DevProgramsFile\Oracle\oradata\target\tbs_stream01.dbf' size 100m autoextend on maxsize unlimited segment space management auto; #同样,将logminer的数据字典从system表空间转移到新建的表空间,防止撑满system表空间 execute dbms_logmnr_d.set_tablespace('tbs_stream'); #创建Stream管理用户 create user strmadmin identified by strmadmin default tablespace tbs_stream temporary tablespace temp; #授权Stream管理用户 grant connect,resource,dba,aq_administrator_role to strmadmin; begin dbms_streams_auth.grant_admin_privilege( grantee => 'strmadmin', grant_privileges => true); end; /
3). 创建 DBlink
3.1) 创建主数据库数据链
根据Oracle 10gR2 Stream官方文档,针对主数据库建立的数据库链的名字必须和从数据库的global_name
相同。如果需要修改global_name,执行“alter database rename global_name to xxx”。
#以strmadmin身份,登录主数据库。 Sqlplus strmadmin/strmadmin@orcl create database link target connect to strmadmin identified by strmadmin using 'target'; create database link target2 connect to strmadmin identified by strmadmin using 'target2';
3.2)创建从数据库的数据链
#以strmadmin身份,登录从数据库。 Sqlplus strmadmin/strmadmin@target create database link orcl connect to strmadmin identified by strmadmin using 'orcl';
4). 启动归档日志
alter database add supplemental log data;
8. 使用oracle自带的管理器来创建流复制相关的进程
1). 启动orcl 实例的dbconsole
2). 点击 Database Control – orcl, 启动em
3). 在打开的浏览器窗口中用 strmadmin 用户登录
4). 点击数据移动
5). 选择 ‘流’ – '设置'
6). 选择 复制方案,下面的主机身份证明输入计算机管理员的用户名和密码,并勾选另存为首选身份证明。
然后点击继续。
7). 在包含方案中选择馆系统用户(我的是 nt_gxt)
8). 进行配置
9). 设置立即启动
10). 如果最后一步提交时报如下错误
执行语句(execute MGMT_USER.MAKE_EM_USER('STRMADMIN');),用系统用户登录orcl实例执行。
已同样的方法为target2创建进程。实现多实例实时同步。
注意:
11g数据库空表导出问题。
Sql代码
查看
show parameter deferred_segment_creation;
修改
alter system set deferred_segment_creation=false;
三个实例都完成后,服务启动情况,如图所示
最后一张oracle原理图