此处将为大家介绍关于sqlserver创建服务器连接,及同构数据库同步问题的详细内容,此外,我们还将为您介绍关于MSSQLSERVER跨服务器连接、SQLSERVER2000数据库同步详细步骤[两台服
此处将为大家介绍关于sqlserver创建服务器连接,及同构数据库同步问题的详细内容,此外,我们还将为您介绍关于MSSQLSERVER跨服务器连接、SQL SERVER 2000 数据库同步详细步骤[两台服务器]、SQL Server 2000数据库同步 同步两个SQLServer数据库的内容、SQL Server 创建服务器和数据库级别审计的有用信息。
本文目录一览:- sqlserver创建服务器连接,及同构数据库同步问题
- MSSQLSERVER跨服务器连接
- SQL SERVER 2000 数据库同步详细步骤[两台服务器]
- SQL Server 2000数据库同步 同步两个SQLServer数据库的内容
- SQL Server 创建服务器和数据库级别审计
sqlserver创建服务器连接,及同构数据库同步问题
创建服务器连接
exec sp_addlinkedserver 'srv1','','sqlOLEDB','192.168.0.221,7788'
exec sp_addlinkedsrvlogin 'srv1','false',null,'userid','pwd'
删除服务器连接
sp_droplinkedsrvlogin ‘srv1',null
sp_dropserver 'srv1'
或者 exec sp_dropserver 'srv1','droplogins '
查看服务器连接
select * from master..sysservers
创建存储过程的语法
create proc p_process
{
@in_name varchar(100),
@int_param2 int,
@out_param3 int output --输出参数
}
as
-- content
return xxx;
end
//////////////////////////////////////////////////////////////////////////////////////////////////
/*--同步两个数据库中两个表的示例 测试环境及同步要求: 有数据库服务器srv1和srv2,两台电脑能互相访问,有数据 srv1.库名..author有字段:id,name,phone, srv2.库名..author有字段:id,telphone,adress 要求: srv1.库名..author增加记录则srv2.库名..author记录增加 srv1.库名..author的phone字段更新,则srv2.库名..author对应字段telphone更新 --*/ --大致的处理步骤 --1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步 exec sp_addlinkedserver 'srv2','srv2的sql实例名或ip' exec sp_addlinkedsrvlogin 'srv2','用户名','密码' go --2.在 srv1 和 srv2 这两台电脑中,启动 msdtc(分布式事务处理服务),并且设置为自动启动 我的电脑--控制面板--管理工具--服务--右键 distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动 go --3.实现同步处理 --a.在srv1..author中创建触发器,实现数据即时同步 --新增同步 create trigger tr_insert_author on author for insert as set xact_abort on --如果执行 Transact-sql 语句产生运行时错误,则整个事务将终止并回滚。 insert srv2.库名.dbo.author(id,telphone) select id,telphone from inserted go --修改同步 create trigger tr_update_author on author for update as set xact_abort on update b set name=i.name,telphone=i.telphone from srv2.库名.dbo.author b,inserted i where b.id=i.id go --删除同步 create trigger tr_delete_author on author for delete as set xact_abort on delete b from srv2.库名.dbo.author b,deleted d where b.id=d.id go 上面的触发器是同步更新到链接的同构sql server服务器上的,如果链接服务器不是24小时都可用的,则要定时提交更新 --在srv1中创建如下的同步处理存储过程 create proc p_process as --更新修改过的数据 update b set name=i.name,author i where b.id=i.id and (b.name<>i.name or b.telphone<>i.telphone) --插入新增的数据 insert srv2.库名.dbo.author(id,telphone from author i where not exists( select * from srv2.库名.dbo.author where id=i.id) --删除已经删除的数据(如果需要的话) delete b from srv2.库名.dbo.author b where not exists( select * from author where id=b.id) go --然后创建一个作业定时调用上面的同步处理存储过程就行了 企业管理器 --管理 --sql Server代理 --右键作业 --新建作业 --"常规"项中输入作业名称 --"步骤"项 --新建 --"步骤名"中输入步骤名 --"类型"中选择"Transact-sql 脚本(Tsql)" --"数据库"选择执行命令的数据库 --"命令"中输入要执行的语句: exec p_process --确定 --"调度"项 --新建调度 --"名称"中输入调度名称 --"调度类型"中选择你的作业执行安排 --如果选择"反复出现" --点"更改"来设置你的时间安排 然后将sql Agent服务启动,并设置为自动启动,否则你的作业不会被执行 总结: 1. 这个是用于同构的sql server服务器之间的同步 2. 没有采用增量同步技术,直接对比两张表找出不同,大数据量下不适用。
MSSQLSERVER跨服务器连接
SQL SERVER 2000 数据库同步详细步骤[两台服务器]
感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!
为什么要同步sql Server 2000 数据库,它都用在什么场合
sql Server 2000 数据库同步配置的原理复制的概念 Microsoft? sql Server? 2000 的复制是在数据库之间对数据和数据库对象进行复制 使用复制可以将数据分发到不同位置,通过局域网、使用拨号连接、通过 Internet 分 --------------------------------------------------------------------------- 发布服务器、订阅服务器、分发服务器、发布、项目 发布服务器 分发服务器 订阅服务器 发布 项目 订阅 ---------------------------------------------------------------------------
精品版sql Server 2000 数据库同步配置sql SERVER复制技术类型,三种复制技术,分别是(详细的说明参考sql联机帮助):
准备工作: 1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户 2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作: 我的电脑--D:\ 新建一个目录,名为: PUB 3.设置sql代理(sqlSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置) 开始--程序--管理工具--服务 4.设置sql Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置) 企业管理器 5.在发布服务器和订阅服务器上互相注册 6.对于只能用IP,不能用计算机名的,为其注册服务器别名 ============================================================================== 正式开始: 1.配置发布服务器 a. 选中指定 [服务器] 节点 --------------------------------------------------------------------------- 2.创建发布 --------------------------------------------------------------------------- 3.设计订阅
---------------------------------------------------------------------------- 完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?
从0开始一步一步配置sql Server 2000 数据库同步,非常细首先,一般情况下数据库安装好后,在企业管理器里看到的sql注册是(local)(Windows NT), sql Server 复制不支持昵称,例如使用“.”或“(local)”作为服务器名。 删除该服务器的 sql Server 注册并使用实际的服务器名对它进行注册。 我把先把这个删除,右击他,选择删除sql server 注册 。。然后新建注册,右击sql server组,新建sql server 注册 下一步--》可用的服务器里有你的计算机名,点中间的添加,添加到“添加的服务器里”--下一步--》下一步--》下一步--》完成 单击刚刚以计算机名建好的sql server 注册,以选中它--》工具--》复制--》配置发布、订阅服务器和分发。。。--》下一步--》下一步--》出现“SEOGIRL”上的 sql Server 代理当前在使用系统帐户,它会导致服务器之间的复制失败。在下列对话框中,为服务启动帐户另外指定一个帐户。--》确定,选择“本帐户”(这时进入系统新建一个帐户比如sql120),用户名输入SEOGIRL\sql120,输入密码,确定,出现:所做的一个或多个更改只有在 sql Server 代理重新启动后才会生效。现在要停止并重新启动 sql Server 代理吗?,确定,确定,--》下一步--》下一步--》快照文件夹路径“\\SEOGIRL\D$\Program Files\Microsoft sql Server\MSsql\ReplData”使用特殊的共享名称,该名称通常只能由在计算机“SEOGIRL”上有管理权限的登录访问。此共享可能不能由在其它计算机上运行的代理程序访问,例如请求订阅的代理程序。 确实要使用此快照文件夹路径吗?
打开企业管理器--》选中发布服务器--》工具--》复制--》配置发布、订阅服务器和分发。。。--》下一步--》下一步--》下一步--》否,选择一个快照文件夹位置,\\SEOgirl\ReplData--》下一步--》--》--》--》--》--》--》--》 “SEOGIRL”上的 sql Server 代理当前在使用系统帐户,它会导致服务器之间的复制失败。在下列对话框中,为服务启动帐户另外指定一个帐户。 输入administrator时提示以下错误:
系统出现两个选择 一个是 是,将sql server代理服务配置为自动启动 1。 一个是 是,将sql server代理服务配置为自动启动
配置sql Server 2000 数据库同步时的 常见问题问题:sql Server 复制不支持昵称,例如使用“.”或“(local)”作为服务器名。 回答:删除该服务器的 sql Server 注册并使用计算机名进行注册。 问题:“SEOGIRL”上的 sql Server 代理当前在使用系统帐户,它会导致服务器之间的复制失败。在下列对话框中,为服务启动帐户另外指定一个帐户。 回答:应该先建一个有管理员组权限的帐户,然后用在这。 问题:快照文件夹路径“\\SEOGIRL\D$\Program Files\Microsoft sql Server\MSsql\ReplData”使用特殊的共享名称,该名称通常只能由在计算机“SEOGIRL”上有管理权限的登录访问。此共享可能不能由在其它计算机上运行的代理程序访问,例如请求订阅的代理程序。确实要使用此快照文件夹路径吗? 回答:在D盘或你别的盘建一个文件夹如:D:\pub,设为共享,并把上面那个新建 的用户加到这里面设为完全控制,快照路径里写\\计算机名\pub 问题:“sql120”不是有效的 Windows NT 名称。请给出完整名称: <域\用户名>。 解决:使用:计算机名\用户名。
另一种配置方法
有时候会看不到新建立的项目,重新进就可以了。 --------------------------------------------------------------------------------
经过测试,可以顺利实现数据库结构的初始化和数据的单向同步(也就是订阅服务器的数据可以及时更新为发布服务器的数据)。 > >在操作的起始,需要考虑订阅服务器是否有和发布服务器相同结构的数据库,如果有,需要做的就是使用代理把发布服务器现有的数据初始化过去;如果没 有对应的相同结构的数据库,就需要要把发布服务器当前的数据库结构和当前的数据都初始化到订阅服务器中。当然这里所说的操作都是在下面的实施步骤中实现, 不需要单独处理。 b.操作前,也不允许这三台服务器对应的别名使用呢称,比如LOCAL,这样的别名要删除重建,可以采用主机名,比如:server02. 下面开始执行数据库同步的操作: 到 这里就可以完成了,修改发布服务器数据库中的内容,等一两分钟,数据就同步到订阅服务器中了。不过由于第一次执行需要快照,如果发布库中有一定的内容,第 一次执行可能需要几分钟时间。如果数据不能同步过去,大家是调度设置时间太短(比如1分钟)使快照不能完成,所以后面的步骤无法执行,遇到这样的情况的 话, -------------------------------------------------------------------------------- http://www.itpub.net/showthread.PHP?threadid=558706
http://blog.csdn.net/renzhe2008/relatedarticles/1717005.aspx |
SQL Server 2000数据库同步 同步两个SQLServer数据库的内容
感兴趣的小伙伴,下面一起跟随小编 jb51.cc的小编两巴掌来看看吧!
复制前要做好的准备工作:1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户
我的电脑
控制面板
管理工具
计算机管理
用户和组
右键用户
新建用户
建立一个隶属于administrator组的登陆windows的用户
2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作:
我的电脑
D:\ 新建一个目录,名为: PUB
右键这个新建的目录
属性 共享
选择共享该文件夹
通过权限按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限
确定
3.设置sql代理(sqlSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置)
开始 程序 管理工具 服务
右键sqlSERVERAGENT
属性 登陆 选择此账户
输入或者选择第一步中创建的windows登录用户名
密码中输入该用户的密码
4.设置sql Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置)
企业管理器
右键sql实例 属性
安全性 身份验证
选择sql Server 和 Windows
确定
5.在发布服务器和订阅服务器上互相注册
企业管理器
右键sql Server组
新建sql Server注册...
下一步 可用的服务器中,输入你要注册的远程服务器名 添加
下一步 连接使用,选择第二个sql Server身份验证
下一步 输入用户名和密码
下一步 选择sql Server组,也可以创建一个新组
下一步 完成
6.对于只能用IP,不能用计算机名的,为其注册服务器别名
(在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP)
开始 程序 Microsoft sql Server 客户端网络实用工具
别名 添加
网络库选择TCP/IP 服务器别名输入sql服务器名
连接参数 服务器名称中输入sql服务器ip地址
如果你修改了sql的端口,取消选择动态决定端口,并输入对应的端口号
sql数据库同步复制
一、建立发布和分发服务器
[欢迎使用配置发布和分发向导]->[选择分发服务器]
->[使@servername成为它自己的分发服务器,sql Server将创建分发数据库和日志]
->[制定快照文件夹]-> [自定义配置] -> [否,使用下列的默认配置] -> [完成]
上述步骤完成后,会在当前@servername sql Server数据库里建立了一个distribion库和
一个distributor_admin管理员级别的用户(我们可以任意修改密码)
服务器上新增加了四个作业:
[ 代理程序历史记录清除: distribution ]
[ 分发清除: distribution ]
[ 复制代理程序检查 ]
[ 重新初始化存在数据验证失败的订阅 ]
sql Server企业管理器里多了一个复制监视器,当前的这台机器就可以发布、分发、订阅了。
我们再次在sql Server企业管理器里[复制]-> 右键选择
->[配置发布、订阅服务器和分发],可以看到类似下图:
我们可以在 [发布服务器和分发服务器的属性] 窗口
-> [发布服务器] -> [新增] -> [确定]
-> [发布数据库] -> [事务]/[合并] -> [确定]
-> [订阅服务器] -> [新增] -> [确定]
把网络上的其它sql Server服务器添加成为发布或者订阅服务器.
新增一台发布服务器的选项:
我这里新建立的JIN001发布服务器是用管理员级别的数据库用户test连接的,
到发布服务器的管理链接要输入密码的可选框,默认的是选中的,
在新建的JIN001发布服务器上建立和分发服务器FENGYU/FENGYU的链接的时需要输入distributor_admin用户的密码
到发布服务器的管理链接要输入密码的可选框,也可以不选,
也就是不需要密码来建立发布到分发服务器的链接(这当然欠缺安全,在测试环境下可以使用)
二、新建立的网络上另一台发布服务器(例如JIN001)选择分发服务器
[欢迎使用配置发布和分发向导]->[选择分发服务器]
-> 使用下列服务器(选定的服务器必须已配置为分发服务器) -> [选定服务器](例如FENGYU/FENGYU)
-> [下一步] -> [输入分发服务器(例如FENGYU/FENGYU)的distributor_admin用户的密码两次]
-> [下一步] -> [自定义配置] -> [否,使用下列的默认配置]
-> [下一步] -> [完成] -> [确定]
建立一个数据库复制发布的过程:
[复制] -> [发布内容] -> 右键选择 -> [新建发布]
-> [下一步] -> [选择发布数据库] -> [选中一个待发布的数据库]
-> [下一步] -> [选择发布类型] -> [事务发布]/[合并发布]
-> [下一步] -> [指定订阅服务器的类型] -> [运行sql Server 2000的服务器]
-> [下一步] -> [指定项目] -> [在事务发布中只可以发布带主键的表] -> [选中一个有主键的待发布的表]
->[在合并发布中会给表增加唯一性索引和 ROWGUIDCOL 属性的唯一标识符字段[rowguid],默认值是newid()]
(添加新列将: 导致不带列列表的 INSERT 语句失败,增加表的大小,增加生成第一个快照所要求的时间)
->[选中一个待发布的表]
-> [下一步] -> [选择发布名称和描述] ->
-> [下一步] -> [自定义发布的属性] -> [否,根据指定方式创建发布]
-> [下一步] -> [完成] -> [关闭]
发布属性里有很多有用的选项:设定订阅到期(例如24小时)
设定发布表的项目属性:
常规窗口可以指定发布目的表的名称,可以跟原来的表名称不一样。
下图是命令和快照窗口的栏目
( sql Server 数据库复制技术实际上是用insert,update,delete操作在订阅服务器上重做发布服务器上的事务操作
看文档资料需要把发布数据库设成完全恢复模式,事务才不会丢失
但我自己在测试中发现发布数据库是简单恢复模式下,每10秒生成一些大事务,10分钟后再收缩数据库日志,
这期间发布和订阅服务器上的作业都暂停,暂停恢复后并没有丢失任何事务更改 )
发布表可以做数据筛选,例如只选择表里面的部分列:
例如只选择表里某些符合条件的记录,我们可以手工编写筛选的sql语句:
发布表的订阅选项,并可以建立强制订阅:
成功建立了发布以后,发布服务器上新增加了一个作业: [ 失效订阅清除 ]
分发服务器上新增加了两个作业:
[ JIN001-dack-dack-5 ] 类型[ REPL快照 ]
[ JIN001-dack-3 ] 类型[ REPL日志读取器 ]
上面蓝色字的名称会根据发布服务器名,发布名及第几次发布而使用不同的编号
REPL快照作业是sql Server复制的前提条件,它会先把发布的表结构,数据,索引,约束等生成到发布服务器的OS目录下文件
(当有订阅的时候才会生成,当订阅请求初始化或者按照某个时间表调度生成)
REPL日志读取器在事务复制的时候是一直处于运行状态。(在合并复制的时候可以根据调度的时间表来运行)
建立一个数据库复制订阅的过程:
[复制] -> [订阅] -> 右键选择 -> [新建请求订阅]
-> [下一步] -> [查找发布] -> [查看已注册服务器所做的发布]
-> [下一步] -> [选择发布] -> [选中已经建立发布服务器上的数据库发布名]
-> [下一步] -> [指定同步代理程序登录] -> [当代理程序连接到代理服务器时:使用sql Server身份验证]
(输入发布服务器上distributor_admin用户名和密码)
-> [下一步] -> [选择目的数据库] -> [选择在其中创建订阅的数据库名]/[也可以新建一个库名]
-> [下一步] -> [允许匿名订阅] -> [是,生成匿名订阅]
-> [下一步] -> [初始化订阅] -> [是,初始化架构和数据]
-> [下一步] -> [快照传送] -> [使用该发布的默认快照文件夹中的快照文件]
(订阅服务器要能访问发布服务器的REPLDATA文件夹,如果有问题,可以手工设置网络共享及共享权限)
-> [下一步] -> [快照传送] -> [使用该发布的默认快照文件夹中的快照文件]
-> [下一步] -> [设置分发代理程序调度] -> [使用下列调度] -> [更改] -> [例如每五分钟调度一次]
-> [下一步] -> [启动要求的服务] -> [该订阅要求在发布服务器上运行sqlServerAgent服务]
-> [下一步] -> [完成] -> [确定]
成功建立了订阅后,订阅服务器上新增加了一个类别是[REPL-分发]作业(合并复制的时候类别是[REPL-合并])
它会按照我们给的时间调度表运行数据库同步复制的作业
三、sql Server复制配置好后,可能出现异常情况的实验日志:
1.发布服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制没有多大影响
中断期间,分发和订阅都接收到没有复制的事务信息
2.分发服务器断网,对已经设置好的复制有一些影响
中断期间,发布服务器的事务排队堆积起来
(如果设置了较长时间才删除过期订阅的选项,繁忙发布数据库的事务日志可能会较快速膨胀),
订阅服务器会因为访问不到发布服务器,反复重试
我们可以设置重试次数和重试的时间间隔(最大的重试次数是9999,如果每分钟重试一次,可以支持约6.9天不出错)
分发服务器sql server服务启动,网络接通以后,发布服务器上的堆积作业将按时间顺序作用到订阅机器上:
会需要一个比较长的时间(实际上是生成所有事务的insert,delete语句,在订阅服务器上去执行)
我们在普通的PC机上实验的58个事务100228个命令执行花了7分28秒.
3.订阅服务器断网,对已经设置好的复制影响比较大,可能需要重新初试化
我们实验环境(订阅服务器)从18:46分意外停机以,第二天8:40分重启动后,
已经设好的复制在8:40分以后又开始正常运行了,发布服务器上的堆积作业将按时间顺序作用到订阅机器上
但复制管理器里出现快照的错误提示,快照可能需要重新初试化,复制可能需要重新启动.
(我们实验环境的机器并没有进行快照初试化,复制仍然是成功运行的)
四、删除已经建好的发布和定阅可以直接用delete删除按钮
我们最好总是按先删定阅,再删发布,最后禁用发布的顺序来操作。
如果要彻底删去sql Server上面的复制设置,可以这样操作:
[复制] -> 右键选择 [禁用发布] -> [欢迎使用禁用发布和分发向导]
-> [下一步] -> [禁用发布] -> [要在@servername上禁用发布]
-> [下一步] -> [完成禁用发布和分发向导] -> [完成]
我们也可以用T-sql命令来完成复制中发布及订阅的创建和删除,选中已经设好的发布和订阅,按属标右键
可以[生成sql脚本]。(这里就不详细讲了,后面推荐的网站内有比较详细的内容)
当你试图删除或者变更一个table时,出现以下错误
Server: Msg 3724,Level 16,State 2,Line 1
Cannot drop the table object_name because it is being used for replication.
比较典型的情况是该table曾经用于复制,但是后来又删除了复制
处理办法:
代码如下:
select * from sysobjects where replinfo >0
sp_configure allow updates,1
go
reconfigure with override
go
begin transaction
update sysobjects set replinfo = 0 where replinfo >0
commit transaction
go
rollback transaction
go
sp_configure allow updates,0
go
reconfigure with override
go
疑问:
在合并复制配置完全后,如果同步代理停止了。我要在程序中去重新启动合并复制的同步代理。请问使用什么命令或存储过程呢?
解决办法:
sp_start_job
指示 sql Server 代理程序立即执行作业。
示例
下例启动名为 Nightly Backup 的作业。
USE msdb
EXEC sp_start_job @job_name = Nightly Backup
2、日志还原功能、、、
代码如下:
说明:
下面的代码演示了如何利用日志还原功能,将主数据库中的数据变化及时反馈到备用数据库中
备用数据库的数据可以随时用于查询,但不能被更新(备用数据库只读)。
首先,创建一个演示用的数据库(主数据库)
CREATE DATABASE Db_test
ON
( NAME = Db_test_DATA,FILENAME = c:\Db_test.mdf )
LOG ON
( NAME = Db_test_LOG,FILENAME = c:\Db_test.ldf)
GO
对数据库进行备份
BACKUP DATABASE Db_test TO disK=c:\test_data.bak WITH FORMAT
GO
把数据库还原成备用数据库(演示主数据库与这个备用数据库之间的同步)
RESTORE DATABASE Db_test_bak FROM disK=c:\test_data.bak
WITH REPLACE,STANDBY=c:\db_test_bak.ldf,MOVE Db_test_DATA TO c:\Db_test_data.mdf,MOVE Db_test_LOG TO c:\Db_test_log.ldf
GO
启动 sql Agent 服务
EXEC master..xp_cmdshell net start sqlserveragent,no_output
GO
创建主服务器数据训与备用服务器数据库之间同步的作业
DECLARE @jogid uniqueidentifier
EXEC msdb..sp_add_job
@job_id = @jogid OUTPUT,@job_name = N数据同步处理
创建同步处理步骤
EXEC msdb..sp_add_jobstep
@job_id = @jogid,@step_name = N数据同步,@subsystem = Tsql,@command = N
主数据库中进行日志备份
BACKUP LOG Db_test TO disK=c:\test_log.bak WITH FORMAT
备用数据库中还原主数据库的日志备份(应用主数据库中的最新变化
实际应该时主数据库备份与备用数据库的还原作业应该分别在主服务器和备用服务器上建立,并且备份文件应该放在主服务器和备用都能访问的共享目录中
RESTORE LOG Db_test_bak FROM disK=c:\test_log.bak WITH STANDBY=c:\test_log.ldf,@retry_attempts = 5,@retry_interval = 5
创建调度(每分钟执行一次)
EXEC msdb..sp_add_jobschedule
@job_id = @jogid,@name = N时间安排,@freq_type=4,@freq_interval=1,@freq_subday_type=0x4,@freq_subday_interval=1,@freq_recurrence_factor=1
添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jogid,@server_name = N(local)
GO
通过上述处理,主数据库与备用数据库之间的同步关系已经设置完成
下面开始测试是否能实现同步
在主数据库中创建一个测试用的表
CREATE TABLE Db_test.dbo.TB_test(ID int)
GO
等待1分钟30秒(由于同步的时间间隔设置为1分钟,所以要延时才能看到效果)
WAITFOR DELAY 00:01:30
GO
查询一下备用数据库,看看同步是否成功
SELECT * FROM Db_test_bak.dbo.TB_test
结果:
ID
-
(所影响的行数为 0 行)
测试成功
GO
最后删除所有的测试
DROP DATABASE Db_test,Db_test_bak
EXEC msdb..sp_delete_job @job_name=N数据同步处理
GO
===========================================================
服务器档机处理说明
使用这种方式建立的数据库同步,当主数据库不可用时(例如,主数据库损坏或者停机检修)
可以使用以下两种方法使备用数据库可用。
1. 如果主数据库损坏,无法备份出最新的日志,可以直接使用下面的语句使备用数据库可读写(丢失最近一次日志还原后的所有数据)。
RESTORE LOG Db_test_bak WITH RECOVERY
2. 如果主数据库可以备份出最新日志,则可以使用下面的语句。
先备份主数据库的最新的事务日志
BACKUP LOG Db_test TO disK=c:\test_log.bak WITH FORMAT
再在备用数据库中恢复最新的事务日志,并且使备用数据库可读写(升级为主数据库)
RESTORE LOG Db_test_bak FROM disK=c:\test_log.bak
简单地说:
1. 你的sql服务要使用指定的windows用户登陆,而不能使用本地系统帐户
2. 用于登陆sql服务的用户要求对共享目录具有所有权限
3. 如果你的电脑没有加入到域,还必须保证源和目标服务器的sql服务设置的登陆用户是一样的(用户名和密码都一样)
网络备份主要是权限设置问题,参考下面的备份文件共享目录权限设置方法去解决目录的共享权限就可以了
下面假设是假设A服务器上的数据库备份到B服务器上的共享目录权限设置(两台服务器应该在局域网内,允许目录共享访问)::
1.机器A,B创建一个同名的windows用户,用户组设置为administrators,做为备份文件夹文件夹的有效访问用户,操作:
我的电脑
控制面板
管理工具
计算机管理
用户和组
右键用户
新建用户
建立一个隶属于administrator组的登陆windows的用户
2.在B机器器上,做为备份文件的存放目录,操作:
我的电脑D:\ 新建一个目录,名为: BAK
右键这个新建的目录
属性共享
选择共享该文件夹
通过权限按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限
确定
3.设置 MSsqlSERVER 及 sqlSERVERAGENT 服务的启动用户
开始程序管理工具服务
右键 MSsqlSERVER
属性登陆选择此账户
输入或者选择第一步中创建的windows登录用户名
密码中输入该用户的密码
确定
同样的方法设置 sqlSERVERAGENT
4.在A机器上完成对B机器BAK目录的映射
5.查询分析器中执行下面的语句,检验是否成功:
exec master..xp_cmdshell dir 映射的盘符
6.A服务器上做备份计划
备注:创建一个新的用户只是为了让MSsqlSERVER服务的启动帐户与共享目录的有效访问同名且密码相同,这样才能通过验证(所以你也可以用其他有效的用户来代替,只需要满足用户名和密码相同,并且拥有足够的权限)
SQL Server 创建服务器和数据库级别审计
一、概述
在上一篇文章中已经介绍了审计的概念;本篇文章主要介绍如何创建审计,以及该收集哪些审核规范。
二、常用的审核对象
2.1、服务器审核对象
1.FAILED_LOGIN_GROUP( Audit Login Failed Event Class)
指示主体尝试登录到 SQL Server,等效于 Audit Login Failed Event Class,
比如:登入失败的操作
2.SERVER_OBJECT_CHANGE_GROUP(Audit Server Object Management)
针对服务器对象执行 CREATE、ALTER 或 DROP 操作时将引发此事件。等效于 Audit Server Object Management 事件类。
比如:删除链接服务器对象等凌驾于数据库级别以上的对象(权限除外)。
3.SERVER_ROLE_MEMBER_CHANGE_GROUP
向固定服务器角色添加登录名或从中删除登录名时将引发此事件, 此事件由 sp_addsrvrolemember 和 sp_dropsrvrolemember 存储过程引发。 等效于 Audit Add Login to Server Role Event Class。
比如:授予、撤销服务器角色等
4.SERVER_PRINCIPAL_CHANGE_GROUP
创建、更改或删除服务器主体时将引发此事件
比如:创建删除登入名等
5.SUCCESSFUL_LOGIN_GROUP
指示主体已成功登录到 SQL Server。 此类中的事件由新连接引发或由连接池中重用的连接引发。 等效于 Audit Login Event Class。
注意:每一个连接会话都会记录,开启SUCCESSFUL_LOGIN_GROUP会产生很多的记录
6.USER_CHANGE_PASSWORD_GROUP
使用 ALTER USER 语句更改包含数据库用户的密码时,测试发现无效
2.2、审核自身审核对象
AUDIT_CHANGE_GROUP
2.3、数据库审核对象
DDL相关
1.DATABASE_PRINCIPAL_CHANGE_GROUP
在数据库中创建、更改或删除主体(如用户)时,将引发此事件。 等效于 Audit Database Principal Management Event Class。
比如:创建删除登入名等
2.DATABASE_ROLE_MEMBER_CHANGE_GROUP
向数据库角色添加登录名或从中删除登录名时将引发此事件。 此事件类与 sp_addrolemember、sp_changegroup 和 sp_droprolemember 存储过程一起使用。等效于 Audit Add Member to DB Role 事件类
比如:授予、撤销服务器角色等
3.DATABASE_CHANGE_GROUP(Audit Database Management 事件)
创建、更改或删除数据库时将引发此事件。创建、更改或删除任何数据库时均将引发此事件。等效于 Audit Database Management 事件类。
比如:删除创建数据库、修改数据库属性等数据库本身的修改操作
4.DATABASE_OBJECT_CHANGE_GROUP(Audit Database Object Management 事件)
针对数据库对象(如架构)执行 CREATE、ALTER 或 DROP 语句时将引发此事件。创建、更改或删除任何数据库对象时均将引发此事件。等效于 Audit Database Object Management 事件类。
比如:Serive Broker相关对象、存储、安全等凌驾于用户创建的对象以上的对象(权限除外)。
5.SCHEMA_OBJECT_CHANGE_GROUP( Audit Schema Object Management Event Class)
针对架构执行 CREATE、ALTER 或 DROP 操作时将引发此事件。等效于 Audit Schema Object Management 事件类。此事件针对架构对象引发。等效于 Audit Object Derived Permission 事件类。任何数据库的任何架构发生更改时,均将引发此事件。等效于 Audit Statement Permission 事件类。
比如:表、存储过程、视图、函数、架构等对象。
DML相关
SELECT、DELETE、INSERT、UPDATE
三、创建服务审核
1.创建审核
USE [master]
GO
----创建审核,命名规范AuditServer_描述
CREATE SERVER AUDIT [AuditServer_All]
TO FILE
( FILEPATH = N''D:\Audit\AuditServer_All'' ----文件路径
,MAXSIZE = 2 GB ----文件最大大小,单位可以是MB、GB、TB
,MAX_FILES = 2147483647 ----最大文件数,最大2147483647也就是无限制
-----,MAX_ROLLOVER_FILES = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和MAX_FILES一起配置
,RESERVE_DISK_SPACE = ON ----保留磁盘空间
)
WITH
( QUEUE_DELAY = 1000 ----队列延时,默认1S
,ON_FAILURE = CONTINUE ----审核失败继续,还可以指定SHUTDOWN关闭数据库服务器,但是必须有相关权限
)
GO
注意:默认创建审核是禁用的,必须手动启用,同样修改审核之前也必须先禁用然后再修改。路径‘D:\Audit\AuditServer_All’必须事先创建好。
2.启用和禁用审核
---启用
USE [master]
GO
ALTER SERVER AUDIT AuditServer_All WITH(STATE=ON);
---禁用
USE [master]
GO
ALTER SERVER AUDIT AuditServer_All WITH(STATE=OFF);
3.创建审核规范
----创建服务器审核规范,命名规范:AuditSpecification_描述(和审核描述保持一致)
USE [master]
GO
CREATE SERVER AUDIT SPECIFICATION AuditSpecification_All
FOR SERVER AUDIT AuditServer_All
ADD (FAILED_LOGIN_GROUP),
ADD (SERVER_OBJECT_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_CHANGE_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
ADD (AUDIT_CHANGE_GROUP)
GO
审核的事件包括:登入失败的操作、服务器级别对象的操作、创建删除登入用户、服务器角色的授予和撤销、对审核配置的操作。还有一些其它的审核类型暂时不做审计。其实这里也可以将将数据库级别的审核操作创建到服务器级别下,这样的话
4.启用和禁用审核规范
--启用
GO
ALTER SERVER AUDIT SPECIFICATION AuditSpecification_All WITH(STATE=ON);
GO
---禁用,注意作业会影响禁用
ALTER SERVER AUDIT SPECIFICATION AuditSpecification_All WITH(STATE=OFF);
5.测试
----创建登入名,并授予sysadmin角色
USE [master]
GO
CREATE LOGIN [test] WITH PASSWORD=N''123456'', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [test]
GO
四、创建数据库审核
1.创建数据库审核
USE [master]
GO
----创建审核,审核只能创建在服务器级别,命名规范AuditDatabase_数据库名_描述
CREATE SERVER AUDIT [AuditDatabase_chenmh_AllObjectChange]
TO FILE
( FILEPATH = N''D:\Audit\AuditDatabase_chenmh_AllObjectChange'' ----文件路径
,MAXSIZE = 2 GB ----文件最大大小,单位可以是MB、GB、TB
,MAX_FILES = 2147483647 ----最大文件数,最大2147483647也就是无限制
-----,MAX_ROLLOVER_FILES = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和MAX_FILES一起配置
,RESERVE_DISK_SPACE = ON ----保留磁盘空间
)
WITH
( QUEUE_DELAY = 1000 ----队列延时,默认1S
,ON_FAILURE = CONTINUE ----审核失败继续,还可以指定SHUTDOWN关闭数据库服务器,但是必须有相关权限
)
GO
---启用
USE [master]
GO
ALTER SERVER AUDIT AuditDatabase_chenmh_AllObjectChange WITH(STATE=ON);
---禁用
USE [master]
GO
--ALTER SERVER AUDIT AuditDatabase_chenmh_AllObjectChange WITH(STATE=OFF);
注意:数据库审核也是创建在服务器级别,数据库审核规范是创建在具体的数据库下。
2.创建数据库审核规范
CREATE DATABASE Audit;
GO
----创建数据库审核规范,命名规范:AuditSpecification_描述(和审核描述保持一致)
USE [Audit]
GO
CREATE DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange
FOR SERVER AUDIT AuditDatabase_Audit_AllObjectChange
---DDL相关操作
ADD (DATABASE_CHANGE_GROUP),
ADD (DATABASE_OBJECT_CHANGE_GROUP),
ADD (SCHEMA_OBJECT_CHANGE_GROUP),
ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
---DML相关操作,PUBLIC代表所有用户
-----ADD (SELECT ON SCHEMA::[dbo] BY PUBLIC),
ADD (DELETE ON SCHEMA::[dbo] BY PUBLIC),
ADD (INSERT ON SCHEMA::[dbo] BY PUBLIC),
ADD (UPDATE ON SCHEMA::[dbo] BY PUBLIC);
GO
--启用
USE [Audit]
GO
ALTER DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange WITH(STATE=ON);
---禁用,注意作业会影响禁用
USE [Audit]
GO
--ALTER DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange WITH(STATE=OFF);
注意:1.一个服务器审核可以对应多个数据库审核规范。
2.暂时不支持RPC调用的审核事件。
3.测试
USE [Audit]
GO
CREATE TABLE a(id int not null);
GO
ALTER TABLE a ADD name varchar(10);
GO
INSERT INTO a values(1,''a'')
GO
DELETE FROM a WHERE id=1;
GO
DROP TABLE a;
备注:审计记录的日期和使用GETDATE()查询的时间8个小时
五、查询
----查询审核日志
select * from sys.fn_get_audit_file(''D:\Audit\AuditServerFile_66D8F97A-B495-4CB4-83EA-564D1ECF9988_0_131604628132230000.sqlaudit'',DEFAULT, DEFAULT) AS a
--服务器审核相关视图
SELECT * FROM SYS.server_audits
SELECT * FROM sys.server_audit_specifications
SELECT * FROM sys.server_audit_specification_details
SELECT sa.name as AuditName,
sa.type_desc AS StoreType,
sas.name AS AuditSpecificationsName,
sasd.audit_action_id,
sasd.audit_action_name,
sasd.class_desc as AuditGrade
FROM SYS.server_audits sa INNER JOIN sys.server_audit_specifications sas ON sa.audit_guid=sas.audit_guid
INNER JOIN sys.server_audit_specification_details sasd ON sas.server_specification_id=sasd.server_specification_id
LEFT JOIN sys.dm_audit_actions daa ON sasd.audit_action_id=daa.action_id AND sasd.class_desc=daa.class_desc
--数据库审核规范视图
SELECT * FROM chenmh.sys.database_audit_specifications
SELECT * FROM chenmh.sys.database_audit_specification_details
SELECT sa.name as AuditName,
sa.type_desc AS StoreType,
sas.name AS AuditSpecificationsName,
sasd.audit_action_id,
sasd.audit_action_name,
sasd.class_desc as AuditGrade
FROM SYS.server_audits sa INNER JOIN chenmh.sys.database_audit_specifications sas ON sa.audit_guid=sas.audit_guid
INNER JOIN chenmh.sys.database_audit_specification_details sasd ON sas.database_specification_id=sasd.database_specification_id
LEFT JOIN sys.dm_audit_actions daa ON sasd.audit_action_id=daa.action_id AND sasd.class_desc=daa.class_desc
----
SELECT * FROM sys.dm_audit_actions WHERE action_id=''DL''
六、删除
--删除服务器审核规范,先禁用才能删除
USE [master]
GO
ALTER SERVER AUDIT SPECIFICATION AuditSpecification_All WITH (STATE=OFF)
GO
DROP SERVER AUDIT SPECIFICATION AuditSpecification_All
GO
--删除服务器审核对象,先禁用才能删除
USE [master]
ALTER SERVER AUDIT AuditServer_All WITH (STATE=OFF)
GO
DROP SERVER AUDIT AuditServer_All;
七、在AlwaysOn中创建审核
1.创建服务器级别审核
和在单实例上创建审核一样,主副本和辅助副本都需要创建。
2.创建数据库级别审核
先在主副本中执行
USE [master]
GO
----创建审核,审核只能创建在服务器级别,命名规范AuditDatabase_数据库名_描述
CREATE SERVER AUDIT [AuditDatabase_Audit_AllObjectChange]
TO FILE
( FILEPATH = N''C:\Audit\AuditDatabase_Audit_AllObjectChange'' ----文件路径
,MAXSIZE = 2 GB ----文件最大大小,单位可以是MB、GB、TB
,MAX_FILES = 2147483647 ----最大文件数,最大2147483647也就是无限制
-----,MAX_ROLLOVER_FILES = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和MAX_FILES一起配置
,RESERVE_DISK_SPACE = ON ----保留磁盘空间
)
WITH
( QUEUE_DELAY = 1000 ----队列延时,默认1S
,ON_FAILURE = CONTINUE ----审核失败继续,还可以指定SHUTDOWN关闭数据库服务器,但是必须有相关权限
)
GO
---启用
USE [master]
GO
ALTER SERVER AUDIT AuditDatabase_Audit_AllObjectChange WITH(STATE=ON);
---禁用
USE [master]
GO
--ALTER SERVER AUDIT AuditDatabase_Audit_AllObjectChange WITH(STATE=OFF);
CREATE DATABASE Audit;
GO
----创建数据库审核规范,命名规范:AuditSpecification_描述(和审核描述保持一致)
USE [audit]
GO
CREATE DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange
FOR SERVER AUDIT AuditDatabase_Audit_AllObjectChange
---DDL相关操作
ADD (DATABASE_CHANGE_GROUP),
ADD (DATABASE_OBJECT_CHANGE_GROUP),
ADD (SCHEMA_OBJECT_CHANGE_GROUP),
ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
---DML相关操作,PUBLIC代表所有用户
-----ADD (SELECT ON SCHEMA::[dbo] BY PUBLIC),
ADD (DELETE ON SCHEMA::[dbo] BY PUBLIC),
ADD (INSERT ON SCHEMA::[dbo] BY PUBLIC),
ADD (UPDATE ON SCHEMA::[dbo] BY PUBLIC);
GO
--启用
USE [audit]
GO
ALTER DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange WITH(STATE=ON);
在辅助副本执行
-------========================创建服务器审核=======================
USE [master]
GO
----创建审核,命名规范AuditServer_描述
CREATE SERVER AUDIT [AuditServer_All]
TO FILE
( FILEPATH = N''C:\Audit\AuditServer_All\'' ----文件路径
,MAXSIZE = 2 GB ----文件最大大小,单位可以是MB、GB、TB
,MAX_FILES = 2147483647 ----最大文件数,最大2147483647也就是无限制
-----,MAX_ROLLOVER_FILES = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和MAX_FILES一起配置
,RESERVE_DISK_SPACE = ON ----保留磁盘空间
)
WITH
( QUEUE_DELAY = 1000 ----队列延时,默认1S
,ON_FAILURE = CONTINUE ----审核失败继续,还可以指定SHUTDOWN关闭数据库服务器,但是必须有相关权限
)
GO
---启用服务器审核
USE [master]
GO
ALTER SERVER AUDIT AuditServer_All WITH(STATE=ON);
---------================创建服务器审核规范====================
USE [master]
GO
CREATE SERVER AUDIT SPECIFICATION AuditSpecification_All
FOR SERVER AUDIT AuditServer_All
ADD (FAILED_LOGIN_GROUP),
ADD (SERVER_OBJECT_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_CHANGE_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
ADD (AUDIT_CHANGE_GROUP)
GO
--启用
GO
ALTER SERVER AUDIT SPECIFICATION AuditSpecification_All WITH(STATE=ON);
GO
------------============================创建数据库基本审核规范=====================================================
USE [master]
GO
----创建审核,审核只能创建在服务器级别,命名规范AuditDatabase_数据库名_描述
CREATE SERVER AUDIT [AuditDatabase_Audit_AllObjectChange]
TO FILE
( FILEPATH = N''C:\Audit\AuditDatabase_Audit_AllObjectChange'' ----文件路径
,MAXSIZE = 2 GB ----文件最大大小,单位可以是MB、GB、TB
,MAX_FILES = 2147483647 ----最大文件数,最大2147483647也就是无限制
-----,MAX_ROLLOVER_FILES = 2147483647 ----最大滚动更新文件数,最大2147483647也就是无限制,不能和MAX_FILES一起配置
,RESERVE_DISK_SPACE = ON ----保留磁盘空间
)
WITH
( QUEUE_DELAY = 1000 ----队列延时,默认1S
,ON_FAILURE = CONTINUE ----审核失败继续,还可以指定SHUTDOWN关闭数据库服务器,但是必须有相关权限
)
GO
---启用
USE [master]
GO
ALTER SERVER AUDIT AuditDatabase_Audit_AllObjectChange WITH(STATE=ON);
-----===============关联数据库审核规范与服务器审核====================
USE [audit]
GO
----禁用数据库审核规范
ALTER DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange WITH(STATE=OFF);
GO
---将数据库审核规范关联服务器审核
ALTER DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange
FOR SERVER AUDIT AuditDatabase_Audit_AllObjectChange
WITH (STATE =ON)
GO
----启用数据库审核规范
ALTER DATABASE AUDIT SPECIFICATION AuditSpecification_AllObjectChange WITH(STATE=ON);
八、总结
审核是数据库规范的一部分,在安全审计方面也非常的重要,建议生产系统都必须创建审核。
参考:https://docs.microsoft.com/zh-cn/sql/relational-databases/system-functions/sys-fn-get-audit-file-transact-sql
备注:
作者:pursuer.chen
博客:http://www.cnblogs.com/chenmh
本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。
《欢迎交流讨论》
关于sqlserver创建服务器连接,及同构数据库同步问题的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于MSSQLSERVER跨服务器连接、SQL SERVER 2000 数据库同步详细步骤[两台服务器]、SQL Server 2000数据库同步 同步两个SQLServer数据库的内容、SQL Server 创建服务器和数据库级别审计的相关信息,请在本站寻找。
本文标签: