MSSQL中的一些错误

前段时间有个项目中要使用SQLServer的数据复制功能,虽然网上有很多相关的方法介绍,但是在实际配置部署过程中还是有很多疑难杂症,我总结了一部分。

摘要:
两数据库建立同步复制关系
用强制订阅实现数据库同步操作
大量和批量的数据可以用数据库的同步机制处理

说明:
为方便操作,所有操作均在发布服务器(分发服务器)上操作,并使用推模式
在客户机器使用强制订阅方式
测试通过

--1:环境
服务器环境:
  机器名称: javaTest
  操作系统:Windows 2003 Server
  数据库版本:SQL 2000 Server 企业版

客户端:
机器名称:javaTest2
操作系统:Windows 2003 Server
数据库版本:SQL 2000 Server 企业版

--2:建用户帐号
在服务器端(javaTest)建立域用户帐号:
  右键“SQL Server 组”->新建SQL Server注册->下一步->在“可用的服务器”中写入本机计算机名->添加->下一步->完成

--3:还原数据库
将主机中需要复制的数据库导出来后完全导入到从机中。即手工做快照。
例如:将javatest中的数据库replication备份,在还原到javatest2中。

以下操作均在服务器端(javaTest)中进行,步骤如下:

--4:安装分发服务器
  A:配置分发服务器
  (选中刚注册的本机数据库)工具->复制->配置发布、订阅服务器和分发->下一步->下一步(所有的均采用默认配置)

B:配置发布服务器
工具->复制->创建和管理发布->选择要发布的数据库(replication) 创建发布->下一步->事务发布->下一步->选择要发布的内容(项目默认值->表项目->快照->选中“保持现有表不变”和“总是复制主键索引”下的所有选项)->确定->下一步->下一步->下一步->完成  

C:强制配置订阅服务器(推模式,拉模式与此雷同)
工具->复制->配置发布、订阅服务器和分发->订阅服务器->新建->SQL Server数据库->输入客户端服务器名称(javaTest2)->使用SQL Server 身份验证(sa,sa)->确定->应用->确定
  
D:初始化订阅
复制监视器->“是,通过轮询分发服务器而自动刷新复制监视器” 确定->发布服务器(SHARE-JAVETEST)->右键“replication:replication”->强制新订阅->下一步->选择启用的订阅服务器->replication->(使用下列调度:更改)下一步->(否,该订阅服务器已经具有架构和数据)下一步->下一步->下一步->完成

--5:测试配置是否成功
复制监视器->发布服务器(JAVATEST)->双击replication:replication->点状态->点立即运行代理程序查看:复制监视器->发布服务器(JAVATEST)-> replication:replication->选择replication:replication (类型强制)->鼠标右键->启动同步处理
如果没有错误标志(红色叉),恭喜您配置成功。

--6:测试数据--在服务器执行:
在JAVATEST中选择一个表,手动插入一条数据,复制监视器->发布服务器(JAVATEST) ->replication:replication (强制)->启动同步处理去查看JAVATEST2同步的表中是否插入了一条新的记录。
测试完毕,通过。

--7修改数据库的同步时间,一般选择夜晚执行数据库同步处理
 注意说明:
 注意: 服务器一端不能以(local)进行数据的发布与分发,需要先删除注册,然后新建注册本地计算机名称。
卸载方式:工具->复制->禁止发布->是在"JAVATEST"上禁止发布,卸载所有的数据库同步配置服务器。


问题1:sqlserver安装时的报错:

报错:SQL卸载后重新安装不成功,提示[Microsoft][ODBC SQL Server Driver][Shared Memory]一般性网络错误
相关日志:
driver={sql server};server=ZX021003129;UID=sa;PWD=;database=master

[Microsoft][ODBC SQL Server Driver][Shared Memory]一般性网络错误。

[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionRead (recv()).

driver={sql server};server=ZX021003129;UID=sa;PWD=;database=master

[Microsoft][ODBC SQL Server Driver][Shared Memory]一般性网络错误。

[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionRead (recv()).

driver={sql server};server=ZX021003129;UID=sa;PWD=;database=master

[Microsoft][ODBC SQL Server Driver][Shared Memory]一般性网络错误。

[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionRead (recv()).

SQL Server 配置?

###############################################################################

12:49:03 Process Exit Code: (-1)
12:49:06 安装程序配置服务器失败。参考服务器错误日志和 C:/WINNT/sqlstp.log 了解更多信息。
12:49:06 Action CleanUpInstall:
12:49:06 C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/SqlSetup/Bin/scm.exe -Silent 1 -Action 4 -Service SQLSERVERAGENT
12:49:06 Process Exit Code: (1060) 指定的服务并未以已安装的服务存在。

12:49:06 C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/SqlSetup/Bin/scm.exe -Silent 1 -Action 4 -Service MSSQLSERVER
12:49:06 Process Exit Code: (0)
12:49:06 StatsGenerate returned: 2
12:49:06 StatsGenerate (0x0,0x1,0xf0000000,0x400,2052,303,0x0,0x1,0,0,0
12:49:06 StatsGenerate -1,Administrator)
12:49:06 Installation Failed.


解决:
1.要把源安装文件放在英文目录下,不能包含中文 ,如:c:/程序/sql 是不可以的,改成C:/sql 问题解决;
2.计算机名称必须为大写(自己把计算机名称改成大写字母)
如:你的计算机名称为:share 要改成:SHARE 。
问题解决。

问题2:把两台机器设置为一个server1(发布、分发),server2(订阅)过程中报错:

报错: 在配置server1(发布、分发)问题提示:server1上的SQLServer代理当前在使用系统账户,它会导致服务器之间的复制失败。在下列对话框中,为服务启动账户另外指定一个账户。单击确定后,弹出一个对话框。

解决:
退出配置向导
我的电脑?控制面板?管理工具?服务?右键"SQLSERVERAGENT"服务?属性?登录?选择"此帐户"?点浏览,选择一个合适的用户,比如"administrator",确定,在密码中输入该用户的密码 。

问题3:进程未能大容量复制到表

报错:进程未能大容量复制到表

分析:1
当复制text类型可能会出现:“进程未能大容量复制到表”时可用
sp_configure 'max text repl size ',2147483647
go
RECONFIGURE WITH OVERRIDE
go

来扩大它的默认值

分析2:
在快照的时候,出现出错提示:“进程未能大容量复制到表”时通过测试发现是从机的表中已经有了很多的数据。
解决:
先将源库还原到目标机,不需要做快照,直接建立复制关系。


问题4:

报错:为过程或函数指定的参数太多
分析:
主从机之间要复制的某表的表结构不一致造成。

解决:
将主从机之间的该表改成一致。


问题5:主从机之间建立复制关系后,只能同步改变值,同步改变表结构无效。

分析:
SQLSERVER2000不支持通过界面直接修改有事务复制关系表结构,即主机直接更改表结构后,该操作复制失败,从机表结构不变。可通过指定的SQL语句来实现表结构的更改。
若想直接操作修改表结构并使复制成功,则必须将SQLSERVER2000升级到SQLSERVER2005。
SQLSERVER2000不支持建立复制关系后新增表的同步。

解决:
用sp_repladdcolumn存储过程,注意添加的新列只能是null或者是含有默认值的not null。
假设你要添加新列的表名为:aa_200,添加的新列为test,类型为char(10),null,则可以用:

增加列:
sp_repladdcolumn @source_object = ‘表名’,@column='列名', @typetext='列申明 ',
@publication_to_add='发布名' --如果只有一个发布,则用all即可
例如:
sp_repladdcolumn @source_object = aa_200,@column='test', @typetext='char(10) null ',
@publication_to_add='replication'

删除列:
sp_repldropcolumn @source_object = ‘表名’,@column='列名'
例如:
sp_repldropcolumn @source_object = aa_200,@column='test_2'

如果是not null类型,则需要提供默认值。

至于另外两个参数@force_invalidate_snapshot ,@force_reinit_subscription 你根据需要决定是否需要,具体说明请查联机帮助。

问题6:在分发代理程序的错误提示中的错误消息为“{call sp_MSget_repl_commands(2, ?, 0, 7500000)}”,。
症状为事务性复制分发代理程序可能会失败,并在临时复制表上, 一个主键冲突并且您收到以下错误信息:违反主键约束 ' PK__@snapshot_seqnos__{UniqueNumber}。 不能在对象 '# {UniqueNumber}' 中插入重复的键。


应用 SQL Server 2000 Security Update for Service Pack 2,版本 8.00.0679 后可能会出现此问题。 要验证您正在运行此安全更新,使用查询分析器,连接到 SQL Server,然后运行:
select @@version


此问题被解决 SQL Server 2000 Service Pack 2 在运行版本 8.00.0733 的系统。

此问题也存在于 SQL Server 2000 Service Pack 3,版本 8.00.0760 中。 若要解决此版本,您必须应用 SQL Server 2000 Service Pack 3 累积修补程序,版本 8.00.0765。

必须将此问题的修复程序应用于的 distirbution 数据库所在 SQL Server 实例。 本文讨论此消息的一个可能的原因。 此修复程序仅有助于如果您遇到本文中描述确切的方案。


解决方案
Service Pack 信息
要解决此问题,获取最新的 Service Pack 的 Microsoft SQL Server 2000。 有关其他信息,单击下面的文章编号以查看 Microsoft 知识库中相应的文章:
290211 如何获取最新的 SQL Server 2000 Service Pack

修复程序信息
此修补程序的英文版具有文件属性 (或更高版本) 下表中列出。 日期和时间为这些文件列出其格式为协调通用时间 (UTC)。 当您查看文件信息时, 它将转换为本地时间。 要了解 UTC 与本地时间之间时差,使用控制面板中的日期和时间工具 时区 选项卡。


解决:下载更高的补丁,如SP4等,打好后就OK了。


问题7:错误18483:未能连接到服务器 因为'distributor_admin'未在该服务器上定义为远程登

解决:把注册名手动更改的和计算机名一致,结果就OK了.

问题8:未能找到存储过程'sp_MSins_'分析:
有可能的原因是:
1.没有安装sql补丁或补丁失效,解决的办法是安装sql sp3

检查你的SQL有没有打补丁,没有的话要打上补丁,检查的方法是在查询分析器中运行:
select @@version
如果出来的版本号是8.00.760以下,则表明你未安装sp3的补丁,要装上.

SQL补丁下载:
全部补丁的位置
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766
应该安装的是
http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe

注意下载后,执行的时候是解压,要在解压后的目录中执行setup.bat才是真正的安装
可能你的sql是升级过来的,你可以尝试先安装sql sp3,无效的话,重新安装一下sql

解决:下了安装贝,结果就OK了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值