SQLServer2005+ArcSDE空间数据库备份恢复
注:此简要说明仅适合于ArcSDE同版本之间的数据库恢复;
先决条件:已备份了原有SDE空间数据库。如备份SqlServer2005下ArcSDE9.2版本的SDE数据库文件(sdedata.mdf、sdelog.ldf)。
重装ArcSDEforSQLServer后,需将它恢复过来。操作步骤如下:
1、分离SDE数据库:
2、附加SDE数据库:
选择备份的数据文件,如先前备份的sdedata.mdf、sdelog.ldf,指定数据库所有者为sa。
3、统一SDE用户登录映射:
A.两个服务器上都有SDE用户,但是两者的SDE用户具有不同的标识
当恢复SDE数据库至新的服务器后,sde数据库中的sde用户的SID与master数据库中dbo.syslogins视图中的sde登录名的SID不同,比如:
Usesde
go
SelectSIDfromsysuserswherename='sde'
Usemaster
go
selectSIDfromsysloginswherename='sde'
SID
-----------------------------------------------------------
0x76695419BFAED41184FD00C04F8D0451
(1row(s)affected)
SID
-----------------------------------------------------------
0xEDDFCA8E56B0D411850000C04F8D0451
(1row(s)affected)
此时必须统一两个表中sde用户的SID标识,运行"sp_change_users_login"存储过程,示例如下:
Usesde
go
sp_change_users_login'update_one','sde','sde'
运行上述的SID查询来验证修改结果:
0xEDDFCA8E56B0D411850000C04F8D0451
0xEDDFCA8E56B0D411850000C04F8D0451
可以看出修改后两个表中sde用户的SID标识完全一致,此时就可以启动ArcSDEforSQLServer的服务来使用了。
B.目标服务器上还没有SDE用户
这种情形是指目标服务器上还没有sde登录用户,此时执行上述的SID查询,结果如下:
Usesde
go
SelectSIDfromsysuserswherename='sde'
Usemaster
go
selectSIDfromsysloginswherename='sde'
SID
-----------------------------------------------------------
0x76695419BFAED41184FD00C04F8D0451
(1row(s)affected)
SID
-----------------------------------------------------------
(0row(s)affected)
要矫正这种情况,需要首先到目标服务器中添加sde登录用户,但是不要将sde数据库的权限授予sde用户。添加登录用户,使用"sp_addlogin"存储过程和在企业管理器中使用登录管理工具。比如:
sp_addlogin'sde','go','sde'
然后需要运行"sp_change_users_login"存储过程来统一master内dbo.syslogins表和恢复后用户数据库内sysusers表中的sde用户SID标识。
usesde
go
sp_change_users_login'update_one','sde','sde'
最后,可以执行SID查询来验证SID的一致性:
Usesde
Go
SelectSIDfromsysuserswherename='sde'
Usemaster
Go
selectSIDfromsysloginswherename='sde'
SID
-----------------------------------------------------------
0xF6DFCA8E56B0D411850000C04F8D0451
(1row(s)affected)
SID
-----------------------------------------------------------
0xF6DFCA8E56B0D411850000C04F8D0451
(1row(s)affected)
经过SDE用户的SID的统一之后,就可以启动ArcSDE服务或者使用直接连接(directconnection)方式使用恢复后的空间数据了。