主备服务器内数据同步后如何确保完全一致

主备服务器内数据同步后如何确保完全一致,第1张

SQL SERVER 2005 同步复制技术

以下实现复制步骤(以快照复制为例)

运行平台SQL SERVER 2005

一、准备工作:

1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户。

2.在SQL SERVER下实现发布服务器和订阅服务器的通信正常(即可以互访)。打开1433端口,在防火墙中设特例

3.在发布服务器上建立一个共享目录,作为发布快照文件的存放目录。例如:在D盘根目录下建文件夹名为SqlCopy

4.设置SQL 代理(发布服务器和订阅服务器均设置)

打开服务(控制面板---管理工具---服务)

---右击SQLSERVER AGENT---属性---登录---选择“此帐户“

---输入或选择第一步中创建的WINDOWS 用户

---“密码“中输入该用户密码

5.设置SQL SERVER 身份验证,解决连接时的权限问题(发布、订阅服务器均设置)

步骤为:对象资源管理器----右击SQL实例-----属性----安全性----服务器身份验证------选“SQL Server和WINDOWS“,然后点确定

6.开启SQL Server 2005的网络协议TCP/IP和管道命名协议并重启网络服务。

7.在SQL Server中创建步骤1中对应的系统用户登陆名,作为发布数据库的拥有者(设置为dbo_owner和public)。

8.以系统超级用户sa登陆SQL Server建立数据库和表。

9.发布服务器和订阅服务器互相注册

步骤如下:视图----单击以注册服务器----右键数据库引擎----新建服务器注册-----填写要注册的远程服务器名称------身份验证选“SQL Server验证“-----用户名(sa) 密码------创建组(也可不建)-----完成。

10.对于只能用IP,不能用计算机名的,为其注册服务器别名

Oracle Goldengate目前支持主被动式的双向配置,换而言之OGG可以将来自于激活的主库的数据变化完全复制到从库中,从库在不断同步数据的同时已经为计划内的和计划外的outages做好了故障切换的准备,也就是我们说的Live Standby。这里我们重点介绍一下配置Oracle Goldengate Live Standby系统的步骤,和具体的故障切换过程。

如果自己搞不定可以找ASKMACLEAN专业ORACLE数据库修复团队成员帮您恢复!

SQL> conn clinic/clinic

Connected.

SQL> drop table tv

create table tv (t1 int primary key,t2 int,t3 varchar2(30))

Table dropped.

SQL> 

Table created.

SQL> drop sequence seqt1

create sequence seqt1 start with 1 increment by 1

Sequence dropped.

SQL> SQL>

Sequence created.

declare

  rnd number(9,2)

begin

   for i in 1..100000 loop

     insert into tv values(seqt1.nextval,i*dbms_random.value,'MACLEAN IS TESTING')

     commit

   end loop

end

/

/* 以上脚本在primary主库的某个应用账户下创建了测试用的数据,

    接着我们可以使用各种工具将数据初始化到从库中,如果在这个过程中

    希望实时在线数据迁移的话,可以参考《Goldengate实现在线数据迁移》

*/

/* 注意我们在Live Standby的环境中往往需要复制sequence序列,以保证切换到备库时业务可以正常进行  */

/* 初始化备库数据后,确保已与主库完全一致 */

primary :

SQL> select sum(t2) from tv

   SUM(T2)

----------

2498624495

SQL> select last_number from user_sequences

LAST_NUMBER

-----------

     100001

standby:

SQL> select sum(t2) from tv

   SUM(T2)

----------

2498624495

SQL> select last_number from user_sequences

LAST_NUMBER

-----------

     100001

以上完成准备工作后,我们可以进入到正式配置Goldengate live stanby的阶段,包括以下步骤:

配置由主库到备库的extract、replicat、data pump,该步骤同普通的单向复制没有太大的区别

配置由备库到主库的extract、replicat、data pump

启动由主库到备库的extract、replicat、data pump

接下来我们会实践整个配置过程:

1.

创建由主库到备库的extract、data pump、replicat

GGSCI (rh2.oracle.com) 10> dblogin userid maclean

Password: 

Successfully logged into database.

GGSCI (rh2.oracle.com) 11> add trandata clinic.*

Logging of supplemental redo data enabled for table CLINIC.TV

GGSCI (rh2.oracle.com) 4> add extract extstd1,tranlog,begin now

EXTRACT added.

GGSCI (rh2.oracle.com) 5> add exttrail /d01/ext/cl,megabytes 100,extract extstd1

EXTTRAIL added.

GGSCI (rh2.oracle.com) 7> view params extstd1

-- Identify the Extract group:

EXTRACT extstd1

-- Specify database login information as needed for the database:

userid maclean, password maclean

-- Specify the local trail that this Extract writes to:

EXTTRAIL /d01/ext/cl

-- Specify sequences to be captured:

SEQUENCE clinic.seqt1

-- Specify tables to be captured:

TABLE clinic.*

-- Exclude specific tables from capture if needed:

-- TABLEEXCLUDE 

GGSCI (rh2.oracle.com) 17> add extract pumpstd1,exttrailsource /d01/ext/cl,begin now

EXTRACT added.

GGSCI (rh2.oracle.com) 98> add rmttrail /d01/rmt/cl,megabytes 100,extract pumpstd1

RMTTRAIL added.

GGSCI (rh2.oracle.com) 129> view params pumpstd1

-- Identify the data pump group:

EXTRACT pumpstd1

userid maclean, password maclean

-- Specify database login information as needed for the database:

userid maclean, password maclean

RMTHOST rh3.oracle.com, MGRPORT 7809

-- Specify the remote trail on the standby system:

RMTTRAIL /d01/rmt/cl

-- Pass data through without mapping, filtering, conversion:

PASSTHRU

sequence clinic.seqt1

Table clinic.*

在备库上配置由主库到备库的replicat:

GGSCI (rh3.oracle.com) 4> add replicat repstd1,exttrail /d01/rmt/cl,begin now

REPLICAT added.

GGSCI (rh3.oracle.com) 49> view params repstd1

-- Identify the Replicat group:

REPLICAT repstd1

-- State that source and target definitions are identical:

ASSUMETARGETDEFS

-- Specify database login information as needed for the database:

userid maclean, password maclean

-- Specify tables for delivery:

MAP clinic.*, TARGET clinic.*

-- Exclude specific tables from delivery if needed:

-- MAPEXCLUDE 

2.

创建由备库到主库的extract、data pump、replicat

GGSCI (rh3.oracle.com) 51> dblogin userid maclean

Password: 

Successfully logged into database.

GGSCI (rh3.oracle.com) 52> add trandata clinic.*

Logging of supplemental redo data enabled for table CLINIC.TV.

/* 不要忘记在备库端的相关表加上追加日志 */

GGSCI (rh3.oracle.com) 53> add extract extstd2,tranlog,begin now

EXTRACT added.

GGSCI (rh3.oracle.com) 54> add exttrail /d01/ext/cl,megabytes 100,extract extstd2

EXTTRAIL added.

GGSCI (rh3.oracle.com) 58> view params extstd2

-- Identify the Extract group:

EXTRACT extstd2

-- Specify database login information as needed for the database:

userid maclean, password maclean

-- Specify the local trail that this Extract writes to:

EXTTRAIL /d01/ext/cl

-- Specify sequences to be captured:

SEQUENCE clinic.seqt1

-- Specify tables to be captured:

TABLE clinic.*

-- Exclude specific tables from capture if needed:

-- TABLEEXCLUDE 

GGSCI (rh3.oracle.com) 59> add extract pumpstd2,exttrailsource /d01/ext/cl,begin now

EXTRACT added.

GGSCI (rh3.oracle.com) 60> add rmttrail /d01/rmt/cl,megabytes 100,extract pumpstd2

RMTTRAIL added.

GGSCI (rh3.oracle.com) 63> view params pumpstd2

-- Identify the data pump group:

EXTRACT pumpstd2

userid maclean, password maclean

-- Specify database login information as needed for the database:

userid maclean, password maclean

RMTHOST rh2.oracle.com, MGRPORT 7809

-- Specify the remote trail on the standby system:

RMTTRAIL /d01/rmt/cl

-- Pass data through without mapping, filtering, conversion:

PASSTHRU

sequence clinic.seqt1

Table clinic.*

在主库上配置replicat:

GGSCI (rh2.oracle.com) 136> add replicat repstd2,exttrail /d01/rmt/cl,begin now,checkpointtable maclean.ck

REPLICAT added.

GGSCI (rh2.oracle.com) 138> view params repstd2

-- Identify the Replicat group:

REPLICAT repstd2

-- State that source and target definitions are identical:

ASSUMETARGETDEFS

-- Specify database login information as needed for the database:

userid maclean, password maclean

-- Specify tables for delivery:

MAP clinic.*, TARGET clinic.*

-- Exclude specific tables from delivery if needed:

-- MAPEXCLUDE 

3.

完成以上OGG配置后,可以启动主库到备库的extract、pump、以及replicat:

GGSCI (rh2.oracle.com) 141> start extstd1

Sending START request to MANAGER ...

EXTRACT EXTSTD1 starting

GGSCI (rh2.oracle.com) 142> start pumpstd1

Sending START request to MANAGER ...

EXTRACT PUMPSTD1 starting

GGSCI (rh3.oracle.com) 70> start repstd1

Sending START request to MANAGER ...

REPLICAT REPSTD1 starting

/* 如果你是在offline状态下配置的话,那么此时可以启用应用了*/

接下来我们尝试做有计划的主备库切换演练:

1.

首先停止一切在主库上的应用,这一点和DataGuard Switchover一样。在保证没有活动事务的情况下,才能切换干净。

2.

在主库端使用LAG等命令了解extract的延迟,若返回如"At EOF, no more records to process"的信息,则说明所有事务均已被抽取。

GGSCI (rh2.oracle.com) 144> lag extstd1

Sending GETLAG request to EXTRACT EXTSTD1 ...

Last record lag: 0 seconds.

At EOF, no more records to process.

在EOF的前提下关闭extract:

GGSCI (rh2.oracle.com) 146> stop extstd1 

Sending STOP request to EXTRACT EXTSTD1 ...

Request processed.

3.

同样对pump使用LAG命令,若返回如"At EOF, no more records to process"的信息,则说明已抽取的数据都被发送到备库了。

GGSCI (rh2.oracle.com) 147> lag pumpstd1

Sending GETLAG request to EXTRACT PUMPSTD1 ...

Last record lag: 3 seconds.

At EOF, no more records to process.

在EOF的前提下,关闭data pump

GGSCI (rh2.oracle.com) 148> stop pumpstd1

Sending STOP request to EXTRACT PUMPSTD1 ...

Request processed.

3.

检查备库端replicat的同步情况,如返回"At EOF, no more records to process.",则说明所有记录均被复制。

GGSCI (rh3.oracle.com) 71> lag repstd1

Sending GETLAG request to REPLICAT REPSTD1 ...

Last record lag: 5 seconds.

At EOF, no more records to process.

在EOF的前提下关闭replicat

GGSCI (rh3.oracle.com) 72> stop repstd1

Sending STOP request to REPLICAT REPSTD1 ...

Request processed.

4.

紧接着我们可以在备库上为业务应用用户赋予必要的insert、update、delete权限,启用各种触发器trigger及cascade delete约束等;

以上手段在主库上对应的 *** 作是收回应用业务的权限,disable掉各种触发器及cascade delete约束,

之所以这样做是为了保证在任何时候扮演备库角色的数据库均不应当接受任何除了OGG外的手动的或者应用驱动的业务数据变更,

以保证主备库间的数据一致。

5.

修改原备库上的extract的启动时间到现在,已保证它不去抽取那些之前的重做日志

GGSCI (rh3.oracle.com) 75> alter extstd2 ,begin now

EXTRACT altered.

GGSCI (rh3.oracle.com) 76> start extstd2

Sending START request to MANAGER ...

EXTRACT EXTSTD2 starting

若之前没有启动由备库到主库的pump和replicat的话可以在此时启动:

GGSCI (rh3.oracle.com) 78> start pumpstd2

Sending START request to MANAGER ...

EXTRACT PUMPSTD2 starting

GGSCI (rh2.oracle.com) 161> start repstd2

Sending START request to MANAGER ...

REPLICAT REPSTD2 starting

6.此时我们可以正式启动在原备库现在的主库上的应用了

接下来我们尝试回切到原主库上:

1.前提步骤与之前的切换相似,首先停止在原备库上的任何应用,

之后使用LAG命令确认extract和replicat的进度,在确认后关闭extract和replicat。

完成在主库上的维护工作:包括赋予权限,启用触发器等等。

2.修改原主库上的extract的开始时间为当前,保证它不去处理之前的重做日志:

GGSCI (rh2.oracle.com) 165> alter extract extstd1,begin now

EXTRACT altered.

3.此时我们已经可以启动在原主库现在的主库上的应用了

4.启动最早配置的由主库到备库的extract、pump、replicat:

GGSCI (rh2.oracle.com) 166> start extstd1

Sending START request to MANAGER ...

EXTRACT EXTSTD1 starting

GGSCI (rh2.oracle.com) 171> start pumpstd1

Sending START request to MANAGER ...

EXTRACT PUMPSTD1 starting

GGSCI (rh3.oracle.com) 86> start repstd1

Sending START request to MANAGER ...

REPLICAT REPSTD1 starting

以上完成了OGG的Live Standby中主备库之间的计划内的切换Switchover,That's Great!

主从数据库的建立一般基于以下三个方面考虑:

1、容灾:备库在异地,主库不存在了,备库可以立即接管,无须恢复时间

2、负载均衡:主库做增删改,备库做查询,这样很多查询业务不占用主库资源

3、数据集中和分发:此种模式主要用于数据从分公司集中到总公司,或从总公司分发到分公司,前提是公司需要同步的数据很少,另外各公司间业务系统不是同一家公司开发的

同步功能主要通过数据库同步软件实现的,象ORACLE的DATAGUARD、QUEST的SHAREPLEX、沃信科技的PAC、ORACLE的GOLDEN GATE、迪思杰的REALSYNC

但是建议可以用沃信科技的产品,因为只有他们一家产品是安装到主备之外的第三台机器上的,不站用主库资源,其他产品必须安装到主库机器上,大家试用起来很不方便


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10643684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存