QL Server 跨网段(跨机房)复制

本文详细介绍了在跨网段、跨机房环境下使用SQLServer复制的技术方案与搭建步骤,包括通过主机名、host文件、SQLServer别名等方法解决网络连接问题,以及具体的环境配置、操作流程和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.本文所涉及的内容(Contents)

  1. 本文所涉及的内容(Contents)
  2. 背景(Contexts)
  3. 解决方案(Solution)
  4. 搭建过程(Process)
  5. 注意事项(Attention)
  6. 参考文献(References)

二.背景(Contexts)

  搭建SQL Server复制的时候,如果网络环境是局域网内,通过主机名就可以实现了,但是如果是跨网段、跨机房异地搭建复制的时候就需要注意了,因为SQL Server复制不支持通过IP连接分发服务器,那有什么办法解决跨网段、跨机房的问题呢?

三.解决方案(Solution)

  在跨网段、跨机房进行SQL Server复制的时候需要区分两种情况:一种是外网IP的1433端口对应了这台机器SQL Server的数据库端口;另外一种情况是外网IP对应SQLServer机器的端口不是1433;下面是几种解决方案:

A. 如果外网IP端口是1433,可以在Windows的host文件中指定IP地址与主机名的对应关系,主机名必须跟真实的主机名一样?

B. 因为你的外网IP端口不是1433,所以你无法在host文件中跟IP地址一起指定端口;这种情况下,如果条件允许(安全性和端口数),你可以在防火墙中开放外网IP的1433端口对应这个发布服务器的1433端口,并且限制某个IP可以访问这个端口,程序等访问发布数据库就使用另外的21433端口,保证了1433端口的安全;又可以解决端口映射问题,可以画张图解释;

wps_clip_image-16794

(Figure1:逻辑结构图)

C. 另外一种方案是在SQL Server配置管理器里建立一个SQL Server别名,这个别名需要跟主机名一样,不需要启用SQL Server Browser服务;

四.搭建过程(Process)

(一) 环境信息

系统环境:Windows Server 2008 + SQL Server 2008

发布服务器:192.168.1.101,1924,192.168.1.101,1433,服务器名称:USER-H2B2A89PEK

分发服务器:与发布服务器同一台机器

订阅服务器:192.168.1.102,1433,服务器名称:QuZhoushiwei105

发布数据库:Task

订阅数据库:TaskSubscribe

数据库帐号:ReplicationUser/ ReplicationPassword

 

(二) 搭建步骤

  上面的发布服务器的外网IP开通了两个端口,一个是默认的1433,一个是1924,如果是默认的1433,可以通过host文件,而如果只有端口1924的话就只能通过SQL Server别名方式实现,这里为了做测试就一起开通了这2个端口了。

A. 下面是通过host文件的形式创建订阅的具体步骤:

1) 在发布服务器上创建发布,具体操作可以参考:SQL Server 复制事务发布,只有搭建成功之后下面的步骤才能进行;

2) 设置订阅服务器C:\Windows\System32\drivers\etc目录的host文件,添加分发服务器(我的环境是发布服务器与分发服务器是一起的,所以这里指定的是发布服务器的地址)信息:192.168.1.101 USER-H2B2A89PEK

3) 设置分发服务器C:\Windows\System32\drivers\etc目录的host文件,添加订阅服务器信息:192.168.1.102 QuZhoushiwei105

4) 在订阅服务器上创建订阅,具体步骤如下:

wps_clip_image-17997

(Figure2:连接发布服务器)

wps_clip_image-22114

(Figure3:成功连接发布服务器)

wps_clip_image-18311

(Figure4:选择推送订阅)

wps_clip_image-23578

(Figure5:选择订阅数据库)

wps_clip_image-16849

(Figure6:推送订阅帐号密码)

wps_clip_image-21517

(Figure7:代理计划)

wps_clip_image-2598

(Figure8:初始化)

wps_clip_image-15522

(Figure9:成功后的订阅信息与作业)

wps_clip_image-5443

(Figure10:新建订阅的状态信息)

 

B. 下面是通过SQL Server别名的形式创建订阅的具体步骤:

1) 在发布服务器上创建发布,具体操作可以参考:SQL Server 复制事务发布,只有搭建成功之后下面的步骤才能进行;

2) 在订阅服务器上创建分发服务器(我的环境是发布服务器与分发服务器是一起的,所以这里指定的是发布服务器的地址)的别名;

wps_clip_image-12241

(Figure11:订阅服务器上的别名)

  在分发服务器上,如果别名的设置包括:SQL Native Client 10.0 配置(32位)和SQL Native Client 10.0 配置,需要都设置订阅服务器的别名,如果没有像Figure13那样进行设置,

wps_clip_image-21703

(Figure12:分发服务器上的别名)

wps_clip_image-8754

(Figure13:分发服务器上的别名)

3) 接下来的步骤按照Figure2到Figure8进行就可以了,同样,最后一样可以达到Figure9、Figure10的效果;

五.注意事项(Attention)

1. 使用请求订阅,分发作业是在订阅服务器上创建的;使用推送订阅,分发作业是在分发服务器上创建;

2. 在发布服务器上创建发布的时候,如果SQL Server数据库实例名与服务器名不一致,将会出现下面的错误:

wps_clip_image-30328

(Figure14:发布错误)

在订阅服务器上创建订阅的时候,如果SQL Server数据库实例名与服务器名不一致,将会出现下面的错误:

wps_clip_image-12226

(Figure15:订阅错误)

3. 可以通过下面的SQL脚本修改不一致的问题,修改之后记得重启SQL Server服务才能生效;

复制代码
/*
SQL Server数据库实例名与服务器名不一致的解决办法
*/
IF SERVERPROPERTY('SERVERNAME')<>@@SERVERNAME  
BEGIN
    DECLARE @server SYSNAME
    SET @server=@@SERVERNAME
    EXEC sp_dropserver @server=@server  
    SET @server=CAST(SERVERPROPERTY('SERVERNAME') AS SYSNAME)
    EXEC sp_addserver @server=@server,@local='LOCAL'
END
复制代码

4. 分发服务器上的快照文件会给删除?

CareySon:After the snapshot is applied at all Subscribers, replication cleanup deletes the associated .bcp file for the initial snapshots automatically.

5. 如果通过修改host文件部署发布订阅,你必须使用推送订阅模式,如果你使用请求订阅模式,因为你无法读取快照文件,将会报下面的错误:

wps_clip_image-24196

(Figure16:请求订阅无法读取快照文件错误信息)

使用别名的形式部署发布订阅,同样会存在相同的问题,CareySon在Azure上通过开通相关权限的方式可以使用请求订阅方式,但是过程比较复杂,这里就不做讨论了;

6. 如果只在订阅服务器的host文件上指定了分发服务器(这里指定是发布服务器,因为我的发布服务器与分发服务器是一起的),没有在分发服务器的host文件上指定订阅服务器地址,将会发生下面的错误:

wps_clip_image-2957

(Figure17:发布服务器连接不上订阅服务器)

7. 如果服务器同时存在“SQL Native Client 10.0 配置(32位)”和“SQL Native Client 10.0 配置”,测试发现“SQL Native Client 10.0 配置(32位)”设置的别名是提供给:查找SQL Server发布服务器使用的,错误信息类似Figure19所示;“SQL Native Client 10.0 配置”设置的别名是提供给:分发服务器作业推送到订阅服务器使用的,错误信息类似Figure17所示;具体原因不清楚,求科普;

wps_clip_image-15608

(Figure18:别名)

8. 在分发服务器和订阅服务器上设置别名的时候,别名应该跟服务器的实例名要一致,不然会报下面的错误:

wps_clip_image-4568

SQL Server 4064 是指 SQL Server 的一个错误代码。当连接到 SQL Server 数据库时,如果数据库名称在连接字符串中没有明确指定或者指定的名称不存在,就会出现该错误。 SQL Server 是一种关系型数据库管理系统,常用于存储和管理大量的数据。它支持高度可扩展的架构以及多种应用程序和开发工具。在连接到 SQL Server 数据库时,需要提供正确的连接字符串以指定要使用的数据库。 在 SQL Server 中,每个数据库都有一个唯一的名称用于区分。当客户端尝试连接到 SQL Server 时,需要提供连接字符串,其中包含要连接的数据库的名称。如果连接字符串中没有明确指定数据库名称,SQL Server 将使用默认数据库。 然而,当默认数据库不存在或未设置时,就会出现 SQL Server 4064 错误。该错误表示要连接的数据库不存在。为了解决这个问题,可以在连接字符串中指定正确的数据库名称,或者在 SQL Server 中设置一个默认数据库。 要在连接字符串中指定数据库名称,可以在连接字符串中添加 "Initial Catalog=数据库名称"。例如,如果要连接名为 "MyDatabase" 的数据库,可以使用以下连接字符串: "Data Source=服务器名称;Initial Catalog=MyDatabase;User Id=用户名;Password=密码"。 另一种解决方法是设置默认数据库。可以通过以下方式设置默认数据库: 1. 打开 SQL Server Management Studio。 2. 右键点击要设置默认数据库的登录名,选择 "属性"。 3. 在属性窗口中的 "默认数据库" 选项卡中,选择要设置为默认数据库的数据库名称。 4. 点击 "确定" 保存更改。 通过指定正确的数据库名称或者设置默认数据库,就可以解决 SQL Server 4064 错误,成功连接到数据库并执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值