SQL SERVER 复制问题

houyajin 2013-04-17 02:57:46
加精
请问大家平日工作中遇到的SQL SERVER复制中的事务复制有那些问题,处理方案是什么?
MSDN上面的就不用直接贴了。
...全文
2128 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
houyajin 2013-09-18
  • 打赏
  • 举报
回复
以下为几个常见问题:


-- 查询数据库有那些同步
SELECT sct .dest_db ,srt . dest_owner , srt. name , sct . srvname ,   pub.pubid , srt . dest_table --,srt.artid ,sct.artid
FROM syspublications as pub  WITH (NOLOCK)
inner join sysarticles  as srt WITH( NOLOCK) on  pub . pubid = srt .pubid
inner join syssubscriptions  sct with (nolock) on srt.artid = sct.artid
GROUP BY sct. srvname , pub . pubid , srt. dest_owner , srt. name , srt.dest_table ,sct .dest_db
  


--查看实例中所有复制数据库
SELECT name ,is_published FROM sys .databases WITH(NOLOCK )
WHERE is_published = 1 AND state = 0
-- 查看对应数据库有多少未分发命令
use distribution
go
select count (*) from msrepl_commands with(nolock )
where publisher_database_id in (
select database_id   , name from sys. databases
where name = N'XXX')

-- 查询各库所有的分发命令
use distribution
go
select publisher_database_id ,article_id ,cnt = COUNT(*)
from msrepl_commands with( nolock)
group by publisher_database_id ,article_id


-- 查看数据库发布的发布名称
use DB_NAME
go
exec sp_helppublication

-- 数据库有那些发布项目
use DB_NAME
go
exec sp_helparticle
@publication  = 'xxx'

-- 根据article_id 也确认是那个表有问题
use distribution
go
select article_id , cnt = COUNT(*) from msrepl_commands with (nolock)  
where article_id in ( 32 , 3)
group by article_id
  -- 查看表是否发布重复 ,通常这个再有事务的时候就会出现主键冲突。
use YinTaiOrder
go
select  object_name (art .[objid] ) objectame , dest_table , art. pubid , is_replicated , is_published -- ,*
from sysarticles art with(nolock ) INNER JOIN sys.tables tab with(nolock ) on art .objid = tab .object_id
group by dest_table ,objid ,fire_triggers_on_snapshot ,art. pubid , is_replicated , is_published
having   COUNT (dest_table )> 1
  

-- 查询快照对应的JOB
use distribution
go
select  jobs .name, publisher_db, publication, s.data_source as publisher,
case publication_type     when 0 then   'Transactional'
                      when 1 then    'snapshot'
                      when 2 then    'Merge'
                      end as  publication_type
From MSsnapshot_agents a inner join sys. servers s on a.publisher_id =s. server_id
inner join  msdb.. sysjobs jobs on a.job_id =jobs. job_id

-- 查询日志读取器对应的JOB  : 同一个数据库的多个 publication共用一个Logreaderagent )
select  jobs .name, publisher_db, s.data_source as publisher
From MSlogreader_agents a inner join sys. servers s on a.publisher_id =s. server_id
inner join  msdb.. sysjobs jobs on a.job_id =jobs. job_id

-- 查询分发代理JOB
select isnull (jobs. name,a .name) as name, a.publisher_db ,a. publication as publicationName,s .name as publisherName ,s .data_source as publisherName,s1 .data_source as subscriber ,a. subscriber_db, a.local_job
From MSdistribution_agents a
inner join sys. servers s on a.publisher_id =s. server_id
inner join  sys. servers s1 on a.subscriber_id =s1 .server_id
left join   msdb.. sysjobs jobs on a.job_id =jobs. job_id
where a .subscription_type <>2


893885385 2013-08-22
  • 打赏
  • 举报
回复
亲爱的houyajin同学 我按照你给的这个做过http://bbs.csdn.net/topics/330269588 不行 如果选择了请求订阅的话 订阅服务器 始终读取不到分发服务器上面的快照(发布和分发是同一台机器)需要手动将快照复制到订阅服务器上面 如果选择推送订阅的话 就可以;你能否留个QQ我加你 你帮我看看吧 我折腾了好久都没弄好 非常感谢
houyajin 2013-04-23
  • 打赏
  • 举报
回复
附个链接学习:http://bbs.csdn.net/topics/330269588
苦逼的程序员 2013-04-22
  • 打赏
  • 举报
回复
帮顶
u010401768 2013-04-22
  • 打赏
  • 举报
回复
瞅瞅
u010011803 2013-04-22
  • 打赏
  • 举报
回复
不错,我要好好看看~~~
茫茫前路 2013-04-22
  • 打赏
  • 举报
回复
引用 43 楼 Zh_java_2009 的回复:
学习学习哈 , 自己还没深入接触过这些东西
学习学习!
szm341 2013-04-22
  • 打赏
  • 举报
回复
如果一个操作频率一般的表,需要双向同步,那是用触发器好呢,还是合并复制好呢?
Zh_java_2009 2013-04-22
  • 打赏
  • 举报
回复
学习学习哈 , 自己还没深入接触过这些东西
刘兄弟 2013-04-21
  • 打赏
  • 举报
回复
引用 34 楼 DBA_Huangzj 的回复:
引用 33 楼 jadilee 的回复:最近我补录入销售数据,文本压缩文档2G,大概80*14个文件. 用的是bulk导入,最后内存用完了... 后来想了个办法,每导入一定数量的文本文档后,我就net stop mssqlserver 然后 net start sqlserveragent ,清理释放导入程序的内存. 再继续重复导入,之后一直没问题. 顺便问下,t……
嗯,斑竹果然眼睛容不得沙子. 确实我数据导入到另外一台服务器的我就是那这个做中转的.导入的数据在一个表里面,我会拆分成3个表,之后通过MSSQL里面的 右键EXPORT DATA 导入过去. 这个导入用命令是怎么写呢? 或者说这个导入的本质是神马导入呢
xiaoxiangqing 2013-04-21
  • 打赏
  • 举报
回复
没有用过,数据量大,就不要用事务复制
双鱼星星 2013-04-21
  • 打赏
  • 举报
回复
我这边用到复制比较多,生产环境测试机链接数据库很多,导致问题主要有2个 1、数据量较大时,上传延时,发布的服务器一直不能讲数据在规定时间内处理完成 2、大量并发时,死锁很多,上传失败; 3、某些异常数据上传导致订阅失效;
u010374635 2013-04-20
  • 打赏
  • 举报
回复
我也想知道,有人可以帮忙吗?
發糞塗牆 2013-04-20
  • 打赏
  • 举报
回复
引用 33 楼 jadilee 的回复:
最近我补录入销售数据,文本压缩文档2G,大概80*14个文件. 用的是bulk导入,最后内存用完了... 后来想了个办法,每导入一定数量的文本文档后,我就net stop mssqlserver 然后 net start sqlserveragent ,清理释放导入程序的内存. 再继续重复导入,之后一直没问题. 顺便问下,tempdb你们是怎么释放的? 引用……
你这种方式在生产环境还是挺危险的,毕竟等于重启机器。所有其它有用的信息都被清空。对服务器短期内的性能有严重影响。对于tempdb,我一般设为10个数据文件加1个日志文件,日志文件比较大。释放tempdb通常交给SQLServer就可以了,不释放的原因通常是因为你的语句有问题,一直占着一个临时表不是放,可以考虑每次insert完就删掉,并提交事务,由于tempdb必然是简单模式,所以提交数据的速度还是很快的,一旦数据提交到数据文件,那么日志空间可以重用。你这种情况还有就是tempdb设置得比较小。
刘兄弟 2013-04-20
  • 打赏
  • 举报
回复
最近我补录入销售数据,文本压缩文档2G,大概80*14个文件. 用的是bulk导入,最后内存用完了... 后来想了个办法,每导入一定数量的文本文档后,我就net stop mssqlserver 然后 net start sqlserveragent ,清理释放导入程序的内存. 再继续重复导入,之后一直没问题. 顺便问下,tempdb你们是怎么释放的?
引用 23 楼 Beirut 的回复:
就好比延时,你怎么监视这些延时啊,从”感觉延迟“了吗? 你可以写一个延时的报警,几个sp供参考 sp_posttracertoken sp_helptracertokens sp_helptracertokenhistory sp_deletetracertokenhistory
引用 6 楼 ap0405140 的回复:
问题,当发行端或订阅端的表结构需要修改时,需先删除复制-->修改表结构-->重建复制.
引用 3 楼 DBA_Huangzj 的回复:
帮你高亮一下,我也想看看有什么问题
bargin808 2013-04-20
  • 打赏
  • 举报
回复
坐等。。。。。。。。。。。。。。。。。。
马少华 2013-04-20
  • 打赏
  • 举报
回复
订阅的数据不能直接改写,不然数据会消失的,碰到两次这样的问题了。
wyz33173866 2013-04-20
  • 打赏
  • 举报
回复
大表,高并发,Update ,死锁严重
u010360844 2013-04-19
  • 打赏
  • 举报
回复
题,当发行端或订阅端的表结构需要修改时,需先删除复制-->修改表结构-->重建复制.
加载更多回复(18)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧