求教开发用数据库和实际运行的数据库表结构更新同步的处理

starrain95 2013-12-24 03:25:39
有两个数据库:
1、开发用的测试数据库dev,在局域网.
2、服务上实际部署运行的数据库real,在外网,可远程桌面.

情况:
dev库的某些表结构发生更改(新增字段,原有字段修改)
real库中已有大量的数据

目前采用的方式:
手动记录更改的内容,手动在real库上做修改。

问题:
1、如何在保留real库中数据的前提下,通过便捷准确的方式(非手动)将dev库的修改同步到real库?
2、如何对比dev和real结构是否一致,哪些地方不一致?

...全文
161 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
haitao 2014-01-03
  • 打赏
  • 举报
回复
在2个服务器上分别导出sql脚本 再比较这2个sql文件,不同的就是需要同步的
giftzheng 2014-01-02
  • 打赏
  • 举报
回复
应该写个PROC生成日志,并成成生修改sql语句.
铁歌 2014-01-01
  • 打赏
  • 举报
回复
实施一个复制好了。如果宽带不是问题的话。。。
LongRui888 2013-12-24
  • 打赏
  • 举报
回复
另外,如果你要自己来做,可以考虑通过ddl触发器,记录结构的变化,可以参考如下的代码:



--2.1在master数据库中建立服务器级别跟踪表
use master
go

create table server_eventdata
	(eventdata xml,
     principal_user nvarchar(100),
     login_user nvarchar(100)
    )
go    
/*
select * from sys.trigger_event_types
where type_name like '%table%' or
      type_name like '%deny%' or
      type_name like '%revoke%'
*/

    
    
--2.2建立服务器级别触发器

create trigger gyy_server
on all server
for create_table,
    alter_table,
    drop_table
as

insert into server_eventdata
select EVENTDATA(),USER,SUSER_NAME()
go


--2.3
create database wc
go

use wc
go

create table dbo.wc_table(v int)

insert into dbo.wc_table values(1)
go


use wc
go

alter table dbo.wc_table
add name varchar(100)

alter table dbo.wc_table
add tt datetime default getdate()
go


--查看记录的事件
select --EVENTDATA,  --里面是所有的信息
       eventdata.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)') as '事件类型',
       eventdata.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(100)') as 'sql授权语句',
       
       eventdata.value('(/EVENT_INSTANCE/PostTime)[1]','datetime') as '执行时间',
       
       
       '登录名' + eventdata.value('(/EVENT_INSTANCE/LoginName)[1]','nvarchar(100)') + 
       '用户名' + eventdata.value('(/EVENT_INSTANCE/UserName)[1]','nvarchar(100)') + ',授予者'+
       eventdata.value('(/EVENT_INSTANCE/Grantor)[1]','nvarchar(100)') + ' 把类型为:' +
       eventdata.value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(100)') + '的对象' +
       eventdata.value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(100)') + '.' +
       eventdata.value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '.' +
       eventdata.value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '的' +
       eventdata.value('(/EVENT_INSTANCE/Permissions/Permission)[1]','nvarchar(100)') +'权限授予给' +
       
       eventdata.value('(/EVENT_INSTANCE/Grantees)[1]','nvarchar(100)')            
                   
from master.dbo.server_eventdata t
/*
事件类型	         sql授权语句	                                                    执行时间	                 (无列名)
CREATE_TABLE	create table dbo.wc_table(v int) 	                        2013-11-07 10:22:31.157	NULL
ALTER_TABLE	    alter table dbo.wc_table add name varchar(100)  	        2013-11-07 10:23:59.987	NULL
ALTER_TABLE	    alter table dbo.wc_table add tt datetime default getdate() 	2013-11-07 10:24:00.013	NULL
*/
LongRui888 2013-12-24
  • 打赏
  • 举报
回复
可以考虑用 redgate: SQL开发利器SQL Prompt 5.1完全破解+使用教程 http://www.cnblogs.com/keepfool/archive/2012/05/27/2519839.html
發糞塗牆 2013-12-24
  • 打赏
  • 举报
回复
最好是做好版本控制,不然再牛逼的工具都无能为力
發糞塗牆 2013-12-24
  • 打赏
  • 举报
回复
对于你这种情况,以前我用这个工具来对比,但是前提是你能在其中一端访问对方,如果网络不通,工具是不能用的http://download.csdn.net/detail/dba_huangzj/5178694

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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