[原创]SQL Server 2005 镜像构建手册

一、 镜像简介

1、 简介

数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像不能直接访问;它只用在错误恢复的情况下才可以被访问。

要进行数据库镜像所需的最小需求包括了两个不同的SQL Server运行环境。主服务器被称为“主机”,第二个服务器被称作“备机”。主机数据库就是你实际用着的数据库,镜像数据库就是你的数据库的备用拷贝。当事务写入你的基本服务器的时候,他们也同样被传送到并写入你的镜像数据库中。

除了基本和镜像之外,你还可以引入另一个可选的组件,名为“见证”。见证服务器是第三个SQL Server 2005运行实例,它是在判断什么时候进行错误恢复的时候,用于基本和镜像之间内部交流。只有当你想实现自动错误恢复的时候用到这个选项。它实现了2比1投票的能力,当我的一个组件不可达,并因此需要进行错误恢复的时候。见证服务器只有在你想实现自动错误恢复的时候才需要用到。

2、 优点

下表是SQL Server可用性官方解决方案的一个对照表,现时我中心使用的恢复模式是“冷备份”中的“备份/恢复”,通常来说“热备份”比“冷备份”的可用性更高,恢复更快,更适合我中心现时的实际情况。如果不从成本考虑的话,“热备份”中的“故障转移群集”的可用性是最高的,但是故障转移群集需要借助磁盘阵列而且建设本身复杂性较高。数据库镜像的建立并没有太多的硬件要求,最起码没有像“故障转移群集”需要共享存储这么高的要求。

clip_image002

 

2、 缺点

(1)由于SQL Server是一个实例多个数据库的产品,数据库镜像技术是基于数据库级别的,因此每次主数据库新增数据库都必须为备机增加数据库并且为新增的数据库建立镜像关系。

(2)数据库的登录名和用户是存储在master数据库,master数据库是不能做镜像的,所以每次操作数据库的登录名和用户也是需要多维护一份,

(3)数据库作业不能得到相应的维护。

(4)微软号称镜像可以让客户端对故障透明,但是实际测试中发现只有满足特定的条件才能实现透明化,而且透明化得客户端支持才可行(.net Framework 2.0以上,Microsoft jdbc驱动 1.1以上)。

(5)跨数据库事务和分布式事务均不支持数据库镜像。

纵观其他几种方式,仅有“热备份”的“故障转移群集”没有这些问题。

一、配置主备机

1、 物理连接

将主备数据库按照如图所示连接:

clip_image004

 

2、 检查SQL Server 2005数据库

只有SQL Server 2005 标准版、企业版和开发版才可以建立数据镜像。其他版本即Express只能作为见证服务器。如果实在不清楚什么版本,执行如下语句查看:

1select @@version;

若要对此数据库进行数据库镜像,必须将它更改为使用完整恢复模式。若要用 Transact-SQL 实现此目的,请使用 ALTER DATABASE 语句:

1 USE master;
2 ALTER DATABASE <DatabaeName> 
3 SET RECOVERY FULL;
4 

 

二、主备实例互通

实现互通可以使用域或证书来实现,考虑实现的简单,以下选取证书的方式实现。注意:实现“主备数据库实例互通”的操作只需要做一次,例如为了将两个SQL Server 2005的实例中的5个数据库建成镜像关系,则只需要做一次以下操作就可以了;或者这样理解:每一对主备实例(不是数据库)做一次互通。

1、创建证书(主备可并行执行)

--主机执行:

1USE master;
2CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'killkill';
3CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' , 
4START_DATE = '01/01/2008';
5

--备机执行:

1USE master;
2CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'killkill';
3CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate'
4START_DATE = '01/01/2008';
5

 

2、创建连接的端点(主备可并行执行)

--主机执行:

1CREATE ENDPOINT Endpoint_Mirroring 
2STATE = STARTED 
3AS 
4TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 
5FOR 
6DATABASE_MIRRORING 
7( AUTHENTICATION = CERTIFICATE HOST_A_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
8

--备机执行:

1CREATE ENDPOINT Endpoint_Mirroring 
2STATE = STARTED 
3AS 
4TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 
5FOR 
6DATABASE_MIRRORING 
7( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
8

 

3、备份证书以备建立互联(主备可并行执行)

--主机执行:

1BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:\SQLBackup\HOST_A_cert.cer';

 --备机执行:

1BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\SQLBackup\HOST_B_cert.cer';

 

4、互换证书

将备份到D:\SQLBackup\的证书进行互换,即HOST_A_cert.cer复制到备机的D:\SQLBackup\。HOST_B_cert.cer复制到主机的D:\SQLBackup\

5、添加登陆名、用户(主备可并行执行)

以下操作只能通过命令行运行,通过图形界面无法完成。(截至文档编写结束,SQL Server2005的不定号为SP2)

--主机执行:

1CREATE LOGIN HOST_B_login WITH PASSWORD = 'killkill';
2CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
3CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:\SQLBackup\HOST_B_cert.cer';
4GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
5

--备机执行:

1CREATE LOGIN HOST_A_login WITH PASSWORD = 'killkill';
2CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
3CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\SQLBackup\HOST_A_cert.cer';
4GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
5

 

三、建立镜像关系

以下步骤是针对每个数据库进行的,例如:现有主机中有5个数据库以下过程就要执行5次。

1、 手工同步登录名和密码

在第一章中提到数据库镜像的缺点之一是无法维护登录名,所以需要我们手工维护登录。

通常来说数据库都将会有若干个用户作为访问数据库的用户,并且数据库会有相应的登录名,但是在备机中缺少与之相对应的登录名,例如某业务系统使用’myuser’作为登录名访问数据库,但是在备机中没有’myuser’这个登录名,因此一旦主备切换,业务系统就无法登录数据库了,这种情况称为"孤立用户"

在主数据库中执行如下语句:

1USE master;
2select sid,name from syslogins;
3

查找出相应的用户名和sid,例如:上述的’myuser’

在备数据库中执行如下语句:

1USE master;
2exec sp_addlogin 
3@loginame = '<LoginName>'
4@passwd = '<Password>'
5@sid = <sid> ;
6

这里的’LoginName’即主数据库中的登录名,sid即是上述通过SQL语句查找出的sid。

例如,查询得到的sid和name如下所示。

 

 

1sid name
2
3---------------------------------- -----------------
4
50x074477739DCA0E499C29394FFFC4ADE4 cz_account
6
7


则建立登录名的SQL语句:

1USE master;
2exec sp_addlogin 
3@loginame = 'cz_account'
4@passwd = 'password'
5@sid = 0x074477739DCA0E499C29394FFFC4ADE4;
6

到此为止可以认为备机数据库的环境已经与主机同步了,还差数据库内的数据未同步。

2、 准备备机数据库

承接上文,该节是描述如何同步主备数据库内的数据。

可以尝试从刚刚使用的全备文件进行还原,在还原数据的时候需要使用选上“with non recover”。如图所示:

clip_image006

 

如果执行成功数据库将会变成这个样子:clip_image008

3、 建立镜像

由于是实验,没有为服务器配置双网卡,IP地址与图有点不一样,但是原理一样。

--主机执行:

1ALTER DATABASE shishan SET PARTNER = 'TCP://10.168.6.45:5022';

--如果主体执行不成功,尝试在备机中执行如下语句:

1ALTER DATABASE shishan SET PARTNER = 'TCP://10.168.6.49:5022';

clip_image009

 

 

如果执行成功,则主备数据库将会呈现如上图所示的图标。

如果建立失败,提示类似数据库事务日志未同步,则说主备数据库的数据(日志)未同步,为保证主备数据库内的数据一致,应在主数据库中实施一次“事务日志”备份,并还原到备数据库上。备份“事务日志”如图所示:

clip_image011

 

还原事务日志时需在选项中选择“restore with norecovery”,如图所示:

clip_image013

 

clip_image015

 

成功还原以后再执行建立镜像的SQL语句。

四、测试操作

1、主备互换

--主机执行:

1USE master;
2ALTER DATABASE <DatabaseName> SET PARTNER FAILOVER;
3

2、主服务器Down掉,备机紧急启动并且开始服务

--备机执行:

1USE master;
2ALTER DATABASE <DatabaseName> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
3

3、原来的主服务器恢复,可以继续工作,需要重新设定镜像

1--备机执行:
2USE master;
3ALTER DATABASE <DatabaseName> SET PARTNER RESUME; --恢复镜像
4ALTER DATABASE <DatabaseName> SET PARTNER FAILOVER; --切换主备
5

4、原来的主服务器恢复,可以继续工作

--默认情况下,事务安全级别的设置为 FULL,即同步运行模式,而且SQL Server 2005 标准版只支持同步模式。

--关闭事务安全可将会话切换到异步运行模式,该模式可使性能达到最佳。

1USE master;
2ALTER DATABASE <DatabaseName> SET PARTNER SAFETY FULL--事务安全,同步模式
3ALTER DATABASE <DatabaseName> SET PARTNER SAFETY OFF--事务不安全,异步模式
4

 

posted @ 2008-05-23 14:47 killkill 阅读(18707) 评论(116) 编辑 收藏

评论共2页: 上一页 1 2 
 回复 引用   
#17楼 2008-06-17 20:47 用户[未注册用户]
@killkill
楼主你好,我已经将三个实例的证书都进行交换了,用户名和密码都相同了,甚至是操作系统的用户也相同了,主机和见证服务器可以互联,(通过镜象管理器上面可以刷新看到),主机和见证服务器都是绿色打勾,主机和镜象服务器也是两个都绿色打勾,但镜象机器同见证服务器红色打杈!我是3台物理服务器作测试的,作了很多次了,单单两个机器可以,但加上见证服务器,镜象机就连不上了!楼主研究下啊谢谢.

 回复 引用   
#18楼 2008-06-30 14:49 @疑问[未注册用户]
想问下,我两台机器都是自动获取IP的,那IP怎么写?也写TCP://10.168.6.45:5022';????不知道为什么老是报错,说TCPIP不对,叫我检查网络命名
 回复 引用 查看   
#19楼[楼主] 2008-06-30 20:22 killkill      
@@疑问
如果服务器都是自动获取IP的话,应用也连不到数据库的啊。

 回复 引用   
#20楼 2008-07-16 11:08 TomFang[未注册用户]
不交换证书 是不是就不能相互构建吗?
 回复 引用 查看   
#21楼[楼主] 2008-07-16 11:54 killkill      
@TomFang
要看情况了,
如果这主备服务器都被加同一个域中就不用交换证书,双机可以互联。
如果是为了测试,一台机器装两个SQL Server的实例,两个实例的互联也不用证书互换(可以理解为在同一个域中)

不交换证书的话,两个服务器是不能互联的,好像提示“网络名不可用”,具体字眼忘记了

 回复 引用 查看   
#22楼 2008-08-15 21:00 小龙3      
"第二个问题:
客户端的正确连接要满足以下条件:
.net : Framework 2.0 以上,连接字符串加入一个备机IP的参数。 "


具体如何写???

 回复 引用 查看   
#23楼[楼主] 2008-08-16 22:08 killkill      
@小龙3
与普通的连接字符串的写法一样,然后多一个参数:
Failover Partner=myMirrorServer;

 回复 引用   
#24楼 2008-10-21 12:09 kicker0609[未注册用户]
太感谢了,拨云见日啊
 回复 引用   
#25楼 2008-12-24 16:06 ico[未注册用户]
建立鏡像可以不在同一個局域網內嗎?
如果可以又怎麼樣做?謝謝!!

 回复 引用   
#26楼 2008-12-26 15:52 jerry_yuan[未注册用户]
简直就是冬天的一把火啊,让我解决了孤立用户的问题
 回复 引用 查看   
#27楼[楼主] 2008-12-26 16:33 killkill      
@ico
可以的,但是你要能互ping通IP地址。

 回复 引用 查看   
#28楼[楼主] 2008-12-26 16:33 killkill      
@jerry_yuan
能对您有帮助,我很高兴。

 回复 引用 查看   
#29楼 2008-12-29 20:46 mantech      
1请问手工同步登录名密码当中,myuser指的是哪一个用户?我执行了查询语句 后有好多用户及sid;
2在准备倍机数据库这个步骤上,“可以尝试从刚刚使用的全备份文件还原”,这个全备份文件是哪个? 不太明白特请教。

 回复 引用 查看   
#30楼[楼主] 2008-12-30 13:39 killkill      
@mantech
1.
通常来说数据库都将会有若干个用户作为访问数据库的用户,并且数据库会有相应的登录名,但是在备机中缺少与之相对应的登录名,例如某业务系统使用’myuser’作为登录名访问数据库,但是在备机中没有’myuser’这个登录名,因此一旦主备切换,业务系统就无法登录数据库了,这种情况称为"孤立用户"

2.
在主数据库中做一次全备,就可以获得备份文件。

 回复 引用   
#31楼 2008-12-30 17:39 HappYstaR[未注册用户]
你好,
如果备机Down掉了,怎样让主机发出个通知?

 回复 引用   
#32楼 2008-12-30 17:40 HappYstaR[未注册用户]
就像警报那样发个通知给管理员。
谢谢

 回复 引用 查看   
#33楼[楼主] 2008-12-31 08:48 killkill      
@HappYstaR
这个就还没有研究过,不过实现起来应该不难。

 回复 引用   
#34楼 2009-01-19 23:11 drifer[未注册用户]
我想问一下,
1。如果主服务器DOWN掉,备机执行:
USE MASTER
ALTER DATABASE DB SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
但却显示:消息 1455,级别 16,状态 106,第 1 行
无法对数据库 "DB" 强制执行数据库镜像服务,因为该数据库未处于要成为主体数据库的正确状态。
这怎么办?
这个问题解决后还有以下问题
2。“原来的主服务器恢复,可以继续工作,需要重新设定镜像”
这个镜像是以备机数据库为准再备份出来还原主服务器吗?因为在主机DOWN掉期间备机的数据又有变化。

 回复 引用 查看   
#35楼[楼主] 2009-01-20 14:28 killkill      
@drifer
1.我没有遇到这个情况,能告诉我你是怎么解决的呢。
2.不需要重新设定镜像,你可以看看:四、测试操作 这一点的内容

 回复 引用   
#36楼 2009-02-12 10:50 jkkj[未注册用户]
我用的两台服务器,由于条件有限用的是虚拟机,但是在虚拟机上运行创建端点的时候出错,报错为:
Msg 1498, Level 16, State 2, Line 5
Database mirroring is disabled by default. Database mirroring is currently provided for evaluation purposes only and is not to be used in production environments. To enable database mirroring for evaluation purposes, use trace flag 1400 during startup. For more information about trace flags and startup options, see SQL Server Books Online.


创建端点的语句是:
create endpoint Endpoint_Mirroring
STATE = STARTED
AS
tcp (listener_port = 5022)
for database_Mirroring (role = partner,encryption=supported);
go

请问下这是什么原因啊

 回复 引用 查看   
#37楼[楼主] 2009-02-12 11:40 killkill      
@jkkj
这个是因为你没有打SP2及以上的补丁包所致。


 回复 引用 查看   
#38楼 2009-02-21 19:29 zeus2      
SQL Server 2008的双机热备 支持没有见证服务器的情况下自动切换了没
 回复 引用 查看   
#39楼[楼主] 2009-02-22 08:56 killkill      
@zeus2
SQL 2008 还是不“支持”你说的做法。
其实这并不是不支持,而是不允许这么做,防止两台服务器都成为主节点,如果你了解集群的话,就明白“裂脑”的危险了。

 回复 引用   
#40楼 2009-02-26 14:47 镜像[未注册用户]
我用你文中所讲的方法成功设置了数据库的镜像,它们工作得很好。问题是我加了一个见证服务器却无法工作。添加见证服务器的过程都一切正常,没有出错。但是在数据库镜像管理器中却显示见证服务器“无法连接”。
 回复 引用   
#41楼 2009-03-02 16:23 windsand[未注册用户]
请问怎么模拟主机数据库宕机,是关机吗
 回复 引用 查看   
#42楼[楼主] 2009-03-02 18:36 killkill      
@windsand
我测试的时候就是直接把电源拔掉。然后手工启动备机。

 回复 引用 查看   
#43楼[楼主] 2009-03-02 18:38 killkill      
@镜像
这个问题我没有遇到过,我没有试过加入见证服务器。

 回复 引用   
#44楼 2009-03-11 17:12 vhnuuh
谢谢lz,按你的步骤已经做好了同步。
生成证书时发现不受信任,有效启始日期为一年,这个一年后会有问题吗?

 回复 引用 查看   
#45楼[楼主] 2009-03-11 21:11 killkill      
@vhnuuh
我记得创建证书的时候可以指定有效期的,而MS的教程和几位大牛的教程中都引入了这个有效期(而且貌似都为一年)。
我这篇里创建证书的时候就故意不写这个有效期,我的SQL Server镜像都现在还没有出问题。

 回复 引用   
#46楼 2009-03-13 21:29 vhnuuh
谢谢lz,证书日期在msdn中查到了
再次谢谢啊,太热心了

 回复 引用   
#47楼 2009-03-25 09:23 sxzxwxf22[未注册用户]
你好,我在做镜像的最后一步时出现了下面的错误,请问该怎么办,谢谢

我是先在备机上执行SET PARTNER ,
再在主机上执行ALTER DATABASE BizTest SET PARTNER = 'TCP://192.168.0.22:5022';
这时候就报出下面的错误:
数据库镜像尚未完全启动,与远程服务器实例 'TCP://192.168.0.22:5022' 的通信失败。ALTER DATABASE 命令失败。请在远程数据库启动后重试该命令。

 回复 引用 查看   
#48楼[楼主] 2009-03-28 11:51 killkill      
@sxzxwxf22
在主机或者备机执行一次就OK了,不用都执行。

 回复 引用   
#49楼 2009-04-12 11:22 jianyue001[未注册用户]
楼主,你好!
‘‘如果人工干预的话,切换(执行语句)还是挺快,具体时间我没有测量过。
如果架构使用了文中所说的引入了仲裁服务器,根据MS的说法是10秒内就可以切换,而且这个时间是可调。’’
看过之后有几个地方不明白:
1:具体执行语句是什么?在哪台服务器上执行?
2引入仲裁服务器,是不是要再额外添加一台服务器专门用来做仲裁?

 回复 引用 查看   
#50楼[楼主] 2009-04-12 14:04 killkill      
1。引入仲裁服务器后,语句的发出者将是仲裁服务器,即所谓的非人工干预。
2。建议是引入另一台新的服务器。

 回复 引用   
#51楼 2009-04-13 13:00 匿名[未注册用户]
楼主,你好!
我这边有个迫切需要解决的问题,希望能够资讯你一下.
就是我做数据库镜像的时候,没问题,后来测试发现报错,错误原因是镜像服务器没有添加应有账户。但我添加账户,又遇到一个很奇怪的问题,
我主数据库里有我自己手动创建的两个域用户(DBTEST\otcadmin、DBTEST\tfsadmin),但是还有两个自动生成的账户(DBTEST\APP$、DBTEST\TFS$),两个手动创建的账户可以在镜像服务器添加成功,但是自动生成的添加失败。不知道什么原因,DBTEST是我的域名,自动生成的账户,是我另外2台服务器的机器名+$,我也不清楚,是怎么生成的。
主要想问一下,楼主有没有遇到过这种情况,怎么解决的。谢谢了。可以加我QQ715276240通知我一下,不胜感激!!

 回复 引用 查看   
#52楼 2009-05-14 20:47 Jerry Qian      
为什么B机子一直显示正在还原呢。
 回复 引用 查看   
#53楼[楼主] 2009-05-14 22:49 killkill      
@Jerry Qian
主库不停地将事务日志传送到备库中,所以备库一直处于还原状态。

 回复 引用 查看   
#54楼 2009-05-15 11:10 Jerry Qian      
@killkill
不会吧。都一夜了。今天还是

 回复 引用 查看   
#55楼 2009-05-15 11:18 Jerry Qian      
楼主烦请加我msn:jciwolf@hotmail.com,谢谢。
 回复 引用 查看   
#56楼[楼主] 2009-05-15 11:31 killkill      
@Jerry Qian
已加

 回复 引用   
#57楼 2009-05-15 17:41 xuxuxu
楼主的文章不错.
赞!

有个问题请教,当用见证服务器时,证书如何exchange.

当在见证服务器添加登陆名、用户时,用主/备那个机器的证书呢?

谢谢!

 回复 引用   
#58楼 2009-09-14 14:56 丁丁0302[未注册用户]
请问“镜像不能直接访问;它只用在错误恢复的情况下才可以被访问。”这个怎么理解?我想给主机数据库做一个镜像,然后系统的查询和报表统计连接镜像数据进行操作,以减少主数据库的负担。这样不能操作吗?
 回复 引用 查看   
#59楼[楼主] 2009-09-14 17:20 killkill      
@丁丁0302
这样做是不行的,处在镜像关系的数据库是不能访问的,你可以考虑一下使用数据库快照的方式进行读写分离。

 回复 引用   
#60楼 2009-09-16 20:10 HappYstaR[未注册用户]
你好,数据库用镜像已经有一段时间了,
现在日志文件很大,我现在想把日志文件删掉,
不知道能不能删,删的话对镜像会有什么影响?
谢谢

 回复 引用 查看   
#61楼[楼主] 2009-09-16 22:11 killkill      
@HappYstaR
我不建议这样做,毕竟删除日志文件是一个比较危险的操作,而且不是没有替代的办法。

使日志文件不断增大的原因是:
1。数据库恢复模式设置为“完全恢复”模式。
2。数据库的事务日志没有备份。

只要做好事务日志的备份这个问题就可以解决的了。

我推荐这样做:
1。数据库配置好自动收缩。
2。数据库配置好自动备份(全备)。
3。数据库配置好事务日志备份(事务日志备份)。
4。依据自己的磁盘空间设置好备份窗口。
SQL Server 2005中具体如何操作可以搜索一下,很多方法的。



 回复 引用   
#62楼 2009-10-12 20:35 cong[未注册用户]
你好:
当我执行完
ALTER DATABASE expo SET PARTNER = 'TCP://203.175.254.138:5022';
这句后,数据库expo就一直显示正在恢复,好长时间都没反应
这个会是什么问题引起的?

 回复 引用 查看   
#63楼[楼主] 2009-10-12 22:35 killkill      
@cong
您好,请问有没有提示什么信息呢。

 回复 引用   
#64楼 2009-10-13 18:07 cong[未注册用户]
实际我用netstat看了,并没有建立5022的连接,就是四个字正在恢复...
 回复 引用 查看   
#65楼[楼主] 2009-10-13 19:51 killkill      
@cong
哦,这证明镜像没有做成功。
你可以这样,用最近的一次全备+事务日志备份,在备库中重新构建。
然后,在备库中执行
ALTER DATABASE expo SET PARTNER = 'TCP://主库IP:5022';
如果,不成功,则在主库中执行:
ALTER DATABASE expo SET PARTNER = 'TCP://备库IP:5022';

根据经验,全备再加事务日志全备的成功率会大大提高。

 回复 引用 查看   
#66楼[楼主] 2009-10-16 23:08 killkill      
@nfocus
通常来说,数据库只要不是太多事务,主备库差几分钟问题都不大,您能否确认一下您备机还原的完整备份和事务日志备份是否真的由主库生成的。

 回复 引用 查看   
#67楼 2009-10-17 17:21 nfocus      
@killkill
谢谢,你的回复!我重新测试了一次,发现其实不需要停止主库的应用,只需要进行完整备份及事务日志的备份,就可以了,之前的理解有问题,有可能在操作的时候出现了偏差.
顺便请教一下
1.在完整备份后,事务日志是否是从完整备份时的时间开始的?
2.做镜像测试的时候,建立镜像连接,为什么有的库不需要还原事务日志都可以,而有的库一定要呢?

 回复 引用 查看   
#68楼[楼主] 2009-10-17 21:40 killkill      
@nfocus
1。应该说是保存在*.log里面的日志信息,当然有用的是从全备开始到您能备份出来的那些。
2。这个问题也一直困扰我,我做的几乎是全备就搞定,而我同事做的基本上都要全备+事务日志全备。

 回复 引用   
#69楼 2009-10-20 22:13 lome1[未注册用户]
我是在两台服务器上部署,两台服务器在不同的机房,不在同一域中。
前面几步按照上面的步骤一步一步执行下列都成功了没有问题,但是到了
在主体服务器上执行执行"ALTER DATABASE shishan SET PARTNER = 'TCP://10.168.6.45:5022';"
的时候

消息 1418,级别 16,状态 1,第 1 行
服务器网络地址 "TCP://10.168.6.45:5022" 无法访问或不存在。请检查网络地址名称,并检查本地和远程端点的端口是否正常运行。

镜像服务器执行“ALTER DATABASE shishan SET PARTNER = 'TCP://10.168.6.49:5022';”

消息 1405,级别 16,状态 1,第 1 行
已为数据库镜像启用数据库 "db"。
请教一下博主,这是什么原因

 回复 引用 查看   
#70楼[楼主] 2009-10-20 23:15 killkill      
@lome1
您好,10.168.6.45/49是我演示的数据库IP地址,估计与您那边的地址不一样,这个请注意,希望您只是引用我的步骤而不是盲目发出指令 :) 。

如果您看到报:
已为数据库镜像启用数据库 "db"。
证明 “DB” 数据库已经成功建立镜像了。

最好把问题描述的清楚一点,您的问题,我也是看得云里雾里的。

 回复 引用   
#71楼 2009-10-21 08:11 lome1[未注册用户]
博主您好,谢谢您这么晚了还给我回复.是这样的,ip地址肯定没有问题,问的时候我特意把真实的ip替换成您文章中使用的ip了。
不好意思,可能问题没有描述清楚,问题是这样的,前面的几个步骤都没有问题,到了3.开启镜像这一步,在主体服务器和镜像服务器执行类似于“ALTER DATABASE shishan SET PARTNER =...”这条SQL语句的时候一直报错,错误就是上面提到的错误。
在镜像服务器上报的错“已为数据库镜像启用数据库 "db"”照道理说应该是成功建立镜像了,但是数据库还显示为 "db(正在还原.....)"

 回复 引用   
#72楼 2009-10-21 08:14 lome1[未注册用户]
博主,不好意思,看错了,镜像服务器的数据显示是这样的 DB(正在恢复)
 回复 引用 查看   
#73楼[楼主] 2009-10-21 08:46 killkill      
@lome1
您在备机上面刷新以下SSMS,看看是否还是这样,如果还是 “DB(正在恢复)”的话,在备机中执行
alter database db set partner="TCP://主机IP:5022" 试一下。

如果执行错误,建议这样,把备库删除重建,然后,在备库中执行:
alter database db set partner="TCP://主机IP:5022" 看看效果。

貌似SQL Server 2005 Mirror并不是每次都能成功做出来的,不要灰心。

 回复 引用   
#74楼 2009-10-21 09:39 lome1[未注册用户]
博主,您好,能不能给我一个联系方式。我这边还是有问题,在镜像服务器上删不掉数据库,提示“已启用数据库 'DB' 用于数据库镜像,因此必须首先删除数据库镜像,才能删除该数据库。”
 回复 引用   
#75楼 2009-10-21 09:57 lome1[未注册用户]
刚才我将服务器实例重启了一下就可以删除了,然后按照您的步骤来做,在镜像服务器上是已经可以配置成功了,那就是原来在镜像服务器上报那个错误是表示镜像服务器已经配置成功了(可能我连续执行了两次建立镜像的sql导致)。现在唯一的问题就是在主体服务器上配置不成功。
 回复 引用 查看   
#76楼[楼主] 2009-10-21 11:07 killkill      
@lome1
这个不用在意,我做实验的时候也是这样的。

 回复 引用   
#77楼 2009-11-04 12:23 E米月光[未注册用户]
您好,博主,我在做到
alter database test set partner='TCP://镜像IP:port'的时候出现了“服务器网络地址"TCP://镜像IP:port"无法访问或不存在。请检查地址名称,并检查本地和远程端点的端口是否正常”,我用TCP调试工具链接镜像的IP与端口,是成功链接,并可以发送数据过去的,我在“服务和连接的外围应用配置器”中也设置了可以远程连接“本地连接和远程连接 --> 仅使用TCP/IP”,而且我也将主体服务器与镜像服务器重启过了,可是还是出现上面的那种情况,能帮我分析一下是什么缘因么,谢谢了

 回复 引用 查看   
#78楼 2009-11-10 11:15 不常在      
按照上面的操作。。。 失败后 怎么恢复到最原始状态呢?

备机始终显示的是 正在备份无法删除数据库...

 回复 引用 查看   
#79楼[楼主] 2009-11-10 11:40 killkill      
@不常在
重启备库的SQL Server

 回复 引用 查看   
#80楼 2009-11-10 19:06 不常在      
@killkill

谢了 重启后可以删除
但是...那些配置还在。
需要一步步 DROP掉吗?

 回复 引用 查看   
#81楼[楼主] 2009-11-10 21:07 killkill      
不用的,可以留着,貌似没有什么影响
 回复 引用   
#82楼 2009-11-11 12:27 刷刷刷[未注册用户]
@killkill
执行 这句时 ALTER DATABASE TEST SET PARTNER = 'TCP://192.168.0.121:5022';
报错:已为数据库镜像启用数据库 "TEST"。

 回复 引用 查看   
#83楼[楼主] 2009-11-11 12:36 killkill      
@刷刷刷
请从第70楼看起
^_^

 回复 引用   
#84楼 2009-11-11 13:04 刷刷刷[未注册用户]
@killkill
不用在数据库属性--镜像配置吗(界面)
没有为数据库镜像配置数据库 "TEST"。
MSN:xindongfangit@163.com

 回复 引用 查看   
#85楼[楼主] 2009-11-11 13:23 killkill      
@ 刷刷刷
在 2005 里,那个界面有很多操作都做不了 。

 回复 引用   
#86楼 2009-11-11 13:33 刷刷刷[未注册用户]
@killkill
楼主
没有为数据库镜像配置数据库 "TEST"。
怎么办啊?

 回复 引用   
#87楼 2009-11-11 13:35 刷刷刷[未注册用户]
@killkill
msn上一下线,行吗

 回复 引用 查看   
#88楼[楼主] 2009-11-11 14:08 killkill      
@刷刷刷
我已经加你了,从你的描述来看:
没有在备库中还原数据库,或者还原的时候没有选上 with non recover

 回复 引用   
#89楼 2009-11-11 14:27 刷刷刷[未注册用户]
@killkill
麻烦再加一下

 回复 引用 查看   
#90楼 2009-11-16 15:50 不常在      
很诡异的问题,有见证服务器的
备份时候:

USE master;
ALTER DATABASE TESTMirror
SET RECOVERY FULL;

backup database TESTMirror
to disk = 'c:\mirror\TESTMirror.bak'
WITH FORMAT
-------------------
执行到在备机运行:
ALTER DATABASE TESTMirror
SET PARTNER = 'TCP://192.168.25.192:5022';
GO //运行成功
在主机运行
ALTER DATABASE TESTMirror
SET PARTNER = 'TCP://192.168.25.193:5022';
GO
--
报错:
The mirror database, "TESTMirror", has insufficient transaction log data to preserve the log backup chain of the principal database. This may happen if a log backup from the principal database has not been taken or has not been restored on the mirror database.

--继续在主机执行
ALTER DATABASE TESTMirror
SET PARTNER = 'TCP://192.168.25.193:5022';
GO
Database "TESTMirror" is not configured for database mirroring.

--然后备机有可以执行
ALTER DATABASE TESTMirror
SET PARTNER = 'TCP://192.168.25.192:5022';
GO 然后再主机执行再报错....

 回复 引用 查看   
#91楼[楼主] 2009-11-16 16:50 killkill      
1.删除备库
2.主库做一次事务日志备份。
3.备库做一次全备份non recovery还原。
4.将刚才那个备份出来的事务日志做 non recovery 的还原。
5.在主机/备机中执行 ALTER DATABASE TESTMirror SET PARTNER = 'xxxxxxxxxxxxxxxxxxxx' ;

 回复 引用 查看   
#92楼 2009-11-16 18:57 不常在      
@killkill

谢谢,但是执行到最后一步的时候出问题了,设置见证服务器

参考了:http://support.microsoft.com/kb/940254
但是我是在使用的IP 应该不需要这样设置吧....
还有就是我的见证服务器上,有一个标准版和一个Express,我使用的是Express做为见证服务器,不知道会不会有影响


The ALTER DATABASE command could not be sent to the remote server instance 'TCP://192.168.25.105:5022'.
The database mirroring configuration was not changed. Verify that the server is connected, and try again.

 回复 引用 查看   
#93楼[楼主] 2009-11-16 21:06 killkill      
这个就不清楚了,没有设置过镜像服务器。
 回复 引用 查看   
#94楼 2009-11-17 09:56 不常在      
@killkill
谢谢了

 回复 引用   
#95楼 2009-11-17 16:45 E米月光[未注册用户]
您好 博主
向您请教一下,主体服务器宕机的情况下怎么使用镜像数据库呢?我在数据库链接字符中写了主体服务器与镜像服务器,就是想在主体服务器死了的时候,镜像服务器可以上,如果我在主体服务器上面执行alter database test set partner failover 语句,主体服务器与镜像服务器交换过来了,程序也可以正常的使用,可是当我把主体服务器关了的时候,程序就运行不起来了,请教一下,如果是主体服务器的系统崩溃了,或者是一些别的原因导致主体服务器不能再用了,那么,怎么使用镜像服务器呢?谢谢了

 回复 引用 查看   
#96楼[楼主] 2009-11-17 17:12 killkill      
@E米月光
您好,在没有见证服务器的情况下,SQL Server是不能自己切换的。
您可以通过自己写个小程序,监控服务器的情况,然后发出
ALTER DATABASE <DatabaseName> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;

 回复 引用   
#97楼 2009-11-17 18:25 E米月光[未注册用户]
@killkill
您好,使用ALTER DATABASE <DatabaseName> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS; 是不是在主服务器宕机的那个时间点之前的所有数据镜像服务器上面都可以完整的保存呢?如果主体服务器维修好了,再将以前的主体服务器做成镜像服务器,是不是就和前面讲的一样,做一下镜像就行了呢?

 回复 引用 查看   
#98楼[楼主] 2009-11-17 21:57 killkill      
@E米月光
1。这个得看你主服务器的维修时间了。
2。我记得好像要撤销镜像关系,然后再做一次镜像就可以了

 回复 引用   
#99楼 2009-11-18 09:34 E米月光[未注册用户]
@killkill
真是雪中之碳啊,太谢谢博主您了

 回复 引用 查看   
#100楼 2009-11-25 15:16 zjiizj      
请问楼主一个MSCS集群的问题,是不是只有Windows 2003 Server enterprise edition或Windows 2003 Server Datacenter这两个版本的操作系统才支持MSCS集群?
 回复 引用 查看   
#101楼[楼主] 2009-11-25 19:16 killkill      
嗯,这个问题,最好查一下MS的帮助吧。
 回复 引用 查看   
#102楼 2010-04-21 14:02 侯唯      
请问楼主,这样子配置之后,在局域网内使用数据库,要连接到哪一台电脑?哪个实例名?
 回复 引用 查看   
#103楼[楼主] 2010-04-21 14:08 killkill      
@侯唯
SQL Server 镜像是一主一备架构,因此,只能连接到主那台数据库。

 回复 引用 查看   
#104楼 2010-04-21 14:10 侯唯      
@killkill
不用见证服务器的话,如果主数据库的电脑有问题,就需要手动连接到备用电脑上,是吗?如果有见证服务器呢,是连接到见证服务器上吗?

 回复 引用 查看   
#105楼[楼主] 2010-04-21 15:11 killkill      
引用侯唯:
@killkill
不用见证服务器的话,如果主数据库的电脑有问题,就需要手动连接到备用电脑上,是吗?如果有见证服务器呢,是连接到见证服务器上吗?


第一点:是的。
第二点:还是手动连接到备库上

见证服务器仅起一个判断作用,任何时候都不会作为转发服务器。

 回复 引用 查看   
#106楼 2010-09-09 17:02 chenhaoying      
在主机运行
ALTER DATABASE TESTMirror
SET PARTNER = 'TCP://192.168.25.193:5022';
GO

提示错误:没有为数据库镜像配置数据库 "db"。

 回复 引用 查看   
#107楼[楼主] 2010-09-09 17:36 killkill      
引用chenhaoying:
在主机运行
ALTER DATABASE TESTMirror
SET PARTNER = 'TCP://192.168.25.193:5022';
GO

提示错误:没有为数据库镜像配置数据库 "db"。


检查:
1。备机上的数据库是否已经处于“正在还原”的状态。

 回复 引用 查看   
#108楼 2010-09-10 09:08 chenhaoying      
引用killkill:
引用chenhaoying:
在主机运行
ALTER DATABASE TESTMirror
SET PARTNER = 'TCP://192.168.25.193:5022';
GO

提示错误:没有为数据库镜像配置数据库 "db"。


检查:
1。备机上的数据库是否已经处于“正在还原”的状态。

没有。备份机执行那个sql也是那个错误。从数据库--属性--镜像那里打开,“服务器网络地址”那里的几个项都是灰色的。“主体服务器”那一栏显示的是TCP://le:5022,也就是机器名+端口。“通过配置安全性”那里进入也查看不到备份机。

 回复 引用 查看   
#109楼[楼主] 2010-09-10 13:55 killkill      
引用chenhaoying:
没有。备份机执行那个sql也是那个错误。从数据库--属性--镜像那里打开,“服务器网络地址”那里的几个项都是灰色的。“主体服务器”那一栏显示的是TCP://le:5022,也就是机器名+端口。“通过配置安全性”那里进入也查看不到备份机。


SQL Server 2005 适用GUI界面管理Mirror还不是太完善。
你再看看“2、 准备备机数据库” 这一步做了没有,只有备机的数据库处于“正在还原...” 的状态下 alter database xxx set PARTNER ='xxxx' 才会有效的。

 回复 引用 查看   
#110楼 2011-02-13 15:50 汪勇      
你好,问你一个问题,假如主机当掉的情况,有可能主机已经完成没办法打开,这时候向备机发出ALTER DATABASE DB SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
备机会执行出错,抛出“无法对数据库 "DB" 强制执行数据库镜像服务,因为该数据库未处于要成为主体数据库的正确状态。”,这个问题要怎么处理?

 回复 引用 查看   
#111楼 2011-02-16 15:02 火爆咖啡      
请教个问题,“连接字符串加入一个备机IP的参数。”这个怎么写呢?网上没有代码啊。。。
 回复 引用 查看   
#112楼[楼主] 2011-02-16 15:53 killkill      
引用火爆咖啡:请教个问题,“连接字符串加入一个备机IP的参数。”这个怎么写呢?网上没有代码啊。。。

详细可看这个网页:http://www.connectionstrings.com/sql-server-2005
的Database mirroring一项。

 回复 引用 查看   
#113楼 2011-04-02 14:56 果酱o      
您好,博主,我在做到
alter database test set partner='TCP://镜像IP:port'的时候出现了“服务器网络地址"TCP://镜像IP:port"无法访问或不存在。请检查地址名称,并检查本地和远程端点的端口是否正常”,我用TCP调试工具链接镜像的IP与端口,是成功链接,并可以发送数据过去的,我在“服务和连接的外围应用配置器”中也设置了可以远程连接“本地连接和远程连接 --> 仅使用TCP/IP”,而且我也将主体服务器与镜像服务器重启过了,可是还是出现上面的那种情况,能帮我分析一下是什么缘因么,谢谢了!!

 回复 引用 查看   
#114楼 2011-11-22 21:33 mqh1968      
证书也生成好了
在主机执行出错
ALTER DATABASE MirTest SET PARTNER = 'TCP://192.168.0.211:5022'
出现如下的错误域名啊!能留下你的联系方式吗?
迫切需要你的帮助。
消息 1418,级别 16,状态 1,第 1 行
服务器网络地址 "TCP://192.168.0.211:5022" 无法访问或不存在。请检查网络地址名称,并检查本地和远程端点的端口是否正常运行。

 回复 引用 查看   
#115楼 2012-01-10 17:27 桦仔      
引用才子£鸣:三個問題:
<br> 如果主機掛了,那麼多長時間內會自動切換到備機?
<br> 怎樣才能保証 客戶端能夠正確連接到備機?
<br> 兩台做鏡像是什麼原理?是同時寫數據到兩個Server?還是異步的?
<br>期待解答!!

连接字符串还是不知道怎麽写两台机器在内网,在公网怎麽访问啊?

 回复 引用 查看   
#116楼 2012-01-10 17:27 桦仔      
连接字符串还是不知道怎麽写两台机器在内网,在公网怎麽访问啊?
评论共2页: 上一页 1 2