读写分离Sqlserver数据库订阅发布

账号添加登陆不了
1 状态 启用登陆
2 强制实行密码 去掉
3 最重要的是右键属性 安全性里面 选择 sql和windows混合登陆

2 无法远程连接
1 右键属性 连接 允许远程连接
2 最重要创建入站端口1433
3 还要阿里云服务器域名管理允许1433

3打开SQL复制报错:

SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名

第一种情况下:
在SQL SERVER里面执行下面语句:

use master

go

select @@servername;

select serverproperty('servername')

使用上面的语句查询服务器的名称和实际计算机的名称,如果两者不一致,就需要修改。

USE master   
GO
-- 设置两个变量   
DECLARE @serverproperty_servername varchar(100),@servername varchar(100)   
-- 取得Windows NT 服务器和与指定的 SQL Server 实例关联的实例信息   
SELECT @serverproperty_servername=CONVERT(varchar(100), SERVERPROPERTY('ServerName'))   
-- 返回运行 Microsoft SQL Server 的本地服务器名称   
SELECT @servername=CONVERT(varchar(100), @@SERVERNAME)   
-- 显示获取的这两个参数   
select @serverproperty_servername,@servername
--如果@serverproperty_servername和@servername不同(因为你改过计算机名字),再运行下面的   
--删除错误的服务器名   
EXEC sp_dropserver @server=@servername
--添加正确的服务器名   
EXEC sp_addserver @server=@serverproperty_servername, @local='local'

4 在另一台数据库新建订阅,指定发布服务器报错

打开SQL复制报错:需要实际的服务器名称

为远程服务器增加“别名”,使用别名代替IP地址来连接远程数据库服务器。(我自己用的是SQL SERVER2012)

打开SQL SERVER2012的配置管理器,定位到“别名”服务选项,如下:

端口号 1433 ,不能写成1443了  我就因为这个耽误很久

在两个SQL native都要配置

5 连接远程服务器需要别名

别名不是自己连接自己的服务器 ,而是别的服务器的IP 和服务器名称,而自己在本地添加对应的映射

理解错误,以为自己数据库需要给自己添加别名 然后映射,耽误很久

别名

接着在本机的hosts添加相应的IP地址和别名:
C:\Windows\System32\drivers\etc

hosts:

IP地址        别名

例如:

172.168.1.15     sniper

6 异地创建订阅时候必须使用sa账号

无法使用特殊主体sa

解决办法:

对象资源管理器中找到相应数据库-->右键点属性-->点击文件,把这里文件的所有者设置为sa就可以了

7必须使用sa账号,不然会报错

8在订阅服务器启动后 ,还必须在发布服务器启动

9两个服务器的sql代理用同一个账号密码

10 在重新在两台服务器布置发布和订阅

11 无法读取 ReplData

.将存放快照的目录设置为共享,并设置读取的权限;

  1)发布服务器设置:
    在发布属性中,点击左侧的快照,在右边页面中的快照文件的位置默认为D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\ReplData
    把Repldata文件夹设置为共享,并且在安全项里,设置用户权限

添加之前创建的账号  和把every权限都开启

  2)订阅服务器设置:
    然后在订阅服务器中,右击订阅的服务名,选择属性,设置属性参数如下
    a.快照位置修改为备用文件夹
    b.快照文件夹修改为 \\发布服务器的ip\repldata

注意: 发布服务器的ip 这个也可以是你设置好并映射好的别名

12 所有配置都设置了 ,还是无法开启文件共享,可能需要阿里云开启5个端口,放弃,使用推送订阅

13Message: 脚本 对于 表“dbo.HY_CORP_BAD_CREDIT_INFO”失败。 

Message: 对象 HY_CORP_BAD_CREDIT_INFO 中的列 fHappenDate 包含类型 Date,此类型不受目标服务器版本 SQL Server 2005 支持。

1.1.2. 处理方法

将数据库兼容级别设置到100,在发布数据库上执行如下代码,修改数据库的兼容级别到100。

ALTER DATABASE [DataBase] SET COMPATIBILITY_LEVEL = 100

或者界面操作:

14

进程无法在“iZyegouzr1ihp8Z”上执行“sp_replcmds”。 (源: MSSQL_REPL,错误号: MSSQL_REPL20011)
 

  ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [sa]

  ALTER AUTHORIZATION ON DATABASE::[数据库名] TO [fabu]

  USE 数据库名
  GO
  sp_changedbowner 'fabu'

15 代理历史记录清除: distribution 作业执行失败

调用作业—错误提示内容 
该作业失败。 无法确定所有者 WIN-3TH1KNIT12D\Administrator (拥有作业 Database_Backup.step1)是否有服务器访问权限 (原因: 无法获取有关 Windows NT 组/用户 ‘WIN-3TH1KNIT12D\Administrator’ 的信息,错误代码 0x534。 [SQLSTATE 42000] (错误 15404)). 
产生原因:

之前有修改过操作系统的用户名或计算机名 

解决办法:

重新选择登录名或者更换一个有权限的登录名

说明:更改作业计划的所有者,不是数据库所有者

16 历史快照ReplData没有自动删除的解决办法:

1 查找原因 

2 新建批处理文件删除

3 在数据库新建维护任务

管理——维护计划里面——清楚维护任务——搜索文件夹并根据扩展名删除文件

出现错误

应用复制的命令时在订阅服务器上找不到该行。

暂时处理办法 :重新初始化,会导致订阅数据库添加的索引全部消失,并且会初始化一段时间,应该有更好处理办法

可能可以借鉴这篇文章

https://www.cnblogs.com/datazhang/p/5552579.html

猜你喜欢

转载自blog.csdn.net/qq_25744257/article/details/81112695