Streams全库复制
一、设置标识
SQL*Plus: Release 10.2.0.1.0 - Production on 星期六9月 1 09:36:23 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> set sqlprompt 'JSSWEB> ';
JSSWEB>
二、创建辅助实例
1. 创建辅助实例
C:\WINDOWS\system32>oradim –new –sid jssstr
实例创建。
2. 创建辅助实例的密码文件
C:\WINDOWS\system32>orapwd file=c:\oracle\database\PWDjssstr.ora password=oracle entries=30
3. 创建助实例的初始化参数文件
1). 创建相应的目录
2). 创建并修改本地初始化参数
从源库创建初始华文件:
JSSWEB> create pfile='c:\admin\jssstr\pfile\20120901.ora' from spfile;
用记事打开并更改相应的参数。并添加以下两参数:
db_file_name_convert='oradata\jssweb','oradata\jssstr'
log_file_name_convert='oradata\jssweb','oradata\jssstr'
接着:
JSSSTR> create spfile from pfile='c:\admin\jssstr\pfile\20120901.ora';
文件已创建。
JSSSTR> startup force nomount;
例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 339741572 bytes
Database Buffers 264241152 bytes
Redo Buffers 7135232 bytes
JSSSTR>
三、查看初始化参数
使用 pfile的修改init<SID>.ora 文件,使用spfile的通过alter system命令修改spile文件,主要包括以下几项(源和目标数据库都需要设置):
- COMPATIBLE:数据库的兼容版本不能低于10.2.0.1
- GLOBAL_NAMES:必需设置为true
- JOB_QUEUE_PROCESSES:设置实例最大同时启用的job里程数不能小于2
- STREAMS_POOL_SIZE:为streams分配适当的缓存区。参数值不能为0
sql> alter system set global_names=true scope=both;
sql> alter system set aq_tm_processes=10 scope=both;
sql> alter system set streams_pool_size=200m scope=spfile;
执行完成后重启数据库
四、检查归档模式
c:> sqlplus ‘/ as sysdba’
sql> alter system set log_archive_dest_1=’location=c:/jssweb/arch’ scope=spfile;
sql> alter system set log_archive_start=TRUE scope=spfile;
sql> alter system set log_archive_format=’ arch%t_%s_%r.arc’ scope=spfile;
sql> shutdown immediate;
sql> startup mount;
sql> alter database archivelog;
sql> alter database open;
数据库置为归档模式后,可以按如下方式检验一下
sql> archive log list;
五、创建表空间及管理员帐户(源库操作)
sql> create tablespace stream_tbs datafile '/data/oradata/jssweb/stream01.dbf' size 200m;
将logminer 的数据字典从system表空间转移到新建的表空间,防止撑满system表空间
sql> execute dbms_logmnr_d.set_tablespace('stream_tbs');
创建管理员
sql> create user strmadmin identified by strmadmin default tablespace stream_tbs quota unlimited on stream_tbs;
分配权限
sql> grant connect,resource,dba,aq_administrator_role to strmadmin;
sql> begin
dbms_streams_auth.grant_admin_privilege( grantee => 'strmadmin', grant_privileges =>true);
end;
六、 创建数据库链接(源库操作)
以strmadmin身份登录创建:
sql> create database link jssstr connect to strmadmin identified by strmadmin using 'jssstr';
--查看db links
sql> select owner,db_link,host from all_db_links;
七、源库执行初始化过程
JSSWEB> declare
2 empty_tbs dbms_streams_tablespace_adm.tablespace_set;
3 begin
4 dbms_streams_adm.pre_instantiation_setup(
5 maintain_mode => 'global',
6 tablespace_names => empty_tbs,
7 source_database => 'jssweb.jss.cn',
8 destination_database => 'jssstr.jss.cn',
9 perform_actions => true,
10 bi_directional => false,
11 include_ddl => true,
12 start_processes => true,
13 exclude_schemas => 'strmadmin',
14 exclude_flags => dbms_streams_adm.exclude_flags_full +
15 dbms_streams_adm.exclude_flags_dml +
16 dbms_streams_adm.exclude_flags_ddl);
17 end;
18 /
PL/SQL 过程已成功完成。
maintain_mode 只有两个值:GLOBAL,表示数据库级的复制;TRANSPORTABLE TABLESPACES,表示表空间级的复制,需要同时指定 tablespace_names参数,表空间可以是多个PRE_INSTANTIATION_SETUP/POST_INSTANTIATION_SETUP创建表空间级的复制环境。
tablespace_names :要复制的表空间,此处为数据库级的复制,因此此参数为空,不过该参数不能直接指定为null,因为该参数类型为 DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET,因此我们在执行过程前先declare了一个 empty_tbs的变量。
source_datebase :连接到源端数据库的数据库链 。
destination_database :连接到目标端数据库的数据库链 。
perform_actions :如果为true,则过程直接执行。如果为false,则过程并不直接生成复制环境,而是创建复制环境的配置脚本,由dba手动执行(或修改编辑后执 行),因此必须同时设置script_name和script_directory_object两参数,指定脚本输出路径和脚本文件名,不然过程执行将 直接报错。
bi_directional :true时表示启用双向复制。false表示源库向目录库单向复制。
include_ddl :是否同步ddl语句 。
start_processes :是否启用捕获和应用进程 。
exclude_schemas :指定不包含在复制环境中的schemas。*表示全不包括,null表示全部包括(一个bu字,意义千差万别,汉字太奇妙啦),注意,由于源端的捕获进 程不会捕获SYS/SYSTEM/CTXSYS这三个schema,因此即使此处指定null,这三个schema也不会被同步。另外,此参数仅在 MAINTAIN_MODE=>¨GLOBAL¨时有效。
exclude_flags : 这个要好好说说,这个选项是与exclude_schemas组合使用,同时由于该参数值具有多个组合属性,因此设置时也特别需要注意。
有如下可选值:
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULL :排除指定schemas中所有对象操作。
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED :排除指定schemas中不支持的对象操作。
上述两值仅能同时选一个,如果两个同时选择在配置时会抛出异常。同时还有下列两个附加选项:
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML :排除对不支持对象的DML操作。
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL :排除对不支持对象的DDL操作。
上述四个属性值可以通过"+"号连接来达到同时支持的目的。
比如,对于exclude_schemas参数中指定的schemas对象,复制其DML操作但不复制DDL操作,则设置exclude_flags参数值如下可满足要求:
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_FULL +
DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL
八、源库创建RMAN备份
RMAN> run{
2> allocate channel c1 device type disk;
3> backup database plus archivelog delete input;
4> }
然后马上查看一下当前系统的scn,并且归档当前的redo
JSSWEB> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
687812
JSSWEB> alter system archive log current;
System altered.
九、 执行RMAN Duplicate复制数据库
C:\WINDOWS\system32>rman target sys/oracle@jssweb auxiliary/
RMAN> run{
2> set until scn 687812;
3> duplicate target database to jssstr open restricted;
9> }
十、连接目标数据库检查global_name
十一、创建目标数据库到源数据库的链接
JSSSTR> conn strmadmin/strmadmin
已连接。
JSSSTR> create database link jssweb connect to strmadmin identified by strmadmin using ‘jssweb’;
不过由于jssstr数据库是由jssweb复制过来的,因此strmadmin用户下也存在一个jssstr.jss.cn的dblink, 如果看其不爽可以将它删除,不过直接删除是不行的,肯定会报ORA-02082错误,因为不能删除与global_name同名的dblink。如果确实 想删除该dblink,方法有二:
A>. 先修改global_name,再删除dblink
JSSSTR> alter database rename global_name to test.jss.cn;
数据库已更改。
JSSSTR> drop database link jssstr.jss.cn;
数据库链接已删除。
JSSSTR> alter database rename global_name to jssstr.jss.cn;
数据库已更改。
B>. 直接删除字典表
JSSSTR> conn / as sysdba
已连接。
JSSSTR> delete link$ where name=¨JSSSTR.JSS.CN¨;
已删除 1 行。
JSSSTR> commit;
提交完成。
十二、在源数据库执行Post_INSTANTIATION_SETUP过程
JSSWEB> declare
2 empty_tbs dbms_streams_tablespace_adm.tablespace_set;
3 begin
4 dbms_streams_adm.post_instantiation_setup(
5 maintain_mode =>'GLOBAL',
6 tablespace_names=>empty_tbs,
7 source_database => 'jssweb.jss.cn',
8 destination_database =>'jssstr.jss.cn',
9 perform_actions => true,
10 bi_directional => false,
11 include_ddl => true,
12 start_processes => true,
13 instantiation_scn => 687811,
14 exclude_schemas => 'strmadmin',
15 exclude_flags=>dbms_streams_adm.exclude_flags_full +
16 dbms_streams_adm.exclude_flags_dml +
17 dbms_streams_adm.exclude_flags_ddl);
18 end;
19 /
PL/SQL 过程已成功完成。
十三、 在目标端执行,取消受限连接:
JSSSTR> conn / as sysdba
已连接。
JSSSTR> ALTER SYSTEM DISABLE RESTRICTED SESSION;
系统已更改。
至此,单向同步的streams整库复制环境就算完成了
十四、文件路径转换
JSSSTR> conn strmadmin/strmadmin
已连接。
JSSSTR> create or replace procedure file_convert (in_any IN ANYDATA) authid current_user is
2 ddl_lcr SYS.LCR$_DDL_RECORD;
3 ddl_text CLOB;
4 rc PLS_INTEGER;
5 begin
6 rc := in_any.GETOBJECT(ddl_lcr);
7 DBMS_LOB.CREATETEMPORARY(ddl_text, true);
8 ddl_lcr.GET_DDL_TEXT(ddl_text);
9 ddl_text := replace(ddl_text,’oradata\jssweb’,’oradata\jssstr’);
10 execute immediate to_char(ddl_text);
11 DBMS_LOB.FREETEMPORARY(ddl_text);
12 end;
13 /
过程已创建。
设置ddl handler:
JSSSTR> select apply_name from dba_apply;
APPLY_NAME
------------------------------
APPLY$_JSSWEB_44
JSSSTR> exec DBMS_APPLY_ADM.ALTER_APPLY(apply_name=>‘APPLY$_JSSWEB_44,,ddl_handler=>’strmadmin.file_convert’);
PL/SQL 过程已成功完成。
转载于:https://www.cnblogs.com/landexia/archive/2012/09/01/2667021.html
Streams全库复制相关推荐
- 单库单表到多库多表的全量复制方案
单库单表到多库多表的全量复制方案 背景 方案 背景 公司最近业务发展比较快速,数据库里面表的数据量猛增,当前单库单表的模型已经无法满足后续业务的发展,需要从单库单表切换到多库多表的模型 方案
- mysql dump gtid_mysqldump命令详解 Part 3- 备份全库
前面说了MySQL Linux平台和Windows平台的安装 下面开始是MySQL的一些学习笔记 前面我们说了如果构造数据 这节开始说MySQL 的备份 环境为MySQL 5.7.25 在解释命令之前 ...
- 再谈MySQL全库备份
简介 Part1:写在最前 在很早之前,我写过一个MySQL生产库全库备份脚本,今天有同事问我是不是要再加一个-R参数来备份存储过程,理由的话是由于mysqldump --help中 关于存储过程的默 ...
- MySQL备库复制延迟的原因及解决办法
背景 今天有同事问我主从复制延迟会影响高可用切换的 RTO 怎么办,这个不需要做实验,我可以直接回答,所以有了以下赶鸭子的文章,都是一线运维经验之谈,建议四连:点赞.收藏.转发.在看. 复制延迟的原因 ...
- mysql 同步复制 半同步复制_一文看懂MySQL的异步复制、全同步复制与半同步复制...
今天主要聊一下MySQL的异步复制.全同步复制与半同步复制,目前我们生产库实际上用的就是异步复制了,后面再转成半同步复制. 一.MYSQL复制架构衍生史 在2000年,MySQL 3.23.15版本引 ...
- MySQL 采用Xtrabackupex进行全库备份过程汇总
1,xtrabackup简介 关于数据库备份以及备份工具,参考:http://blog.itpub.net/26230597/viewspace-1460065/,这里来介绍xtrabackup已经如 ...
- 企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制)
企业级高性能MYSQL的用法---------(二)----------半同步复制 和 全同步复制(组复制) 1.基于GDIT的半同步复制 为什么要实现mysqI的复制 1.实现服务器负载均衡 2.通 ...
- python 密度聚类 使用_使用wgd进行全基因组复制分析
因为全基因组复制(Whole genome duplications, WGD)是生物进化的重要因素之一, 所以WGD分析也是基因组分析经常用到的一种分析方法.举个例子,我们之所以能在多条染色体之间发 ...
- 【原创】rman 全库备份脚本
rman 全库备份脚本 run { allocate channel d1 type disk; allocate channel d2 type disk; backup full database ...
最新文章
- linux 信号软中断的方式
- (Oracle学习笔记) Oracle体系结构
- Poj_3984走迷宫(广搜)
- [2020.10.25NOIP模拟赛]序列【Splay】
- 数据库支持的数据类型
- 使用绑定进行WPF DataGrid格式化的指南
- php学语法,PHP入门学习——PHP语法
- tab控件的使用心得
- Bailian4108 羚羊数量-Number Of Antelope【递推+打表】
- 你会用LaTeX写毕业论文么?
- 教你制作一个自动发摩斯电码的PYTHON小程序
- matlab 求导的一个简单程序
- 10的n次方换算关系 10^N 计算机存储单位的换算关系
- 微信公众平台测试号推送思路
- lol那个服务器有无限火力,全新游戏模式-无限火力上线
- SQL基础语法_刘世民
- java.jpi在线_JPI中常使用的类介绍:
- Android性能优化(一):APP启动优化
- 同城聚合平台v59.4.0 本地同城 同城信息 同城商家
- 天才小毒妃 第912章 坑了一大笔