改变WID的位置
改变wid的位置
一、把 \windows\wid 目录移动到 e:\wid。
要在安全模式下进行。
以后的所有工作都可以在正常模式下进行。
二、修改注册表中的有关内容,共有 7 个地方,分成 4 个方面。
1、关于类注册,有两个。这两个的修改需要先取得对键值的控制权。
[hklm\software\classes\clsid\{a6f16b19-0040-4947-8d3f-52de129bb615}]
@="microsoft wid server virtual device interface for server"
[hklm\software\classes\clsid\{a9a3fe12-61c7-496e-aabf-b83e3287ab82}]
@="microsoft wid server virtual device interface for client"
2、关于服务,有两个。
[hklm\system\currentcontrolset\services\mssql$microsoft##wid]
[hklm\system\currentcontrolset\services\widwriter]
displayname 和 description,要注意前面的 @ 不能省略。
3、关于 sql server 的有一个。
[hklm\software\microsoft\microsoft sql server]
4、关于事件日志的有两个。
[hklm\system\currentcontrolset\services\eventlog\application\mssql$microsoft##wid]
[hklm\system\currentcontrolset\services\eventlog\application\widvdi]
经过这两步,widwriter 服务已经可以启动了,但是,sql server 服务还是不能启动。后来,发现,是由于权限的问题。
这个权限的设置就有点难度了。是要求 mssql$microsoft##wid 用户必须对 data 和 log 目录有写入的权限。而这个用户是无法添加的。因此,只能从正常的服务器上把权限复制过来。
三、设置 wid 目录的权限。
1、复制原来的权限:
cacls c:\windows\wid\log /s
下面的是输出:
c:\windows\wid\log "d:pai(a;oici;fa;;;ba)(a;oici;fa;;;sy)(a;;0x13019f;;;s-1-5-80-1184457765-4068085190-3456807688-2200952327-3769537534)(a;oiciio;sdgwgr;;;s-1-5-80-1184457765-4068085190-3456807688-2200952327-3769537534)"
2、设置新目录的权限:
cacls e:\wid\log /s:"d:pai(a;oici;fa;;;ba)(a;oici;fa;;;sy)(a;;0x13019f;;;s-1-5-80-1184457765-4068085190-3456807688-2200952327-3769537534)(a;oiciio;sdgwgr;;;s-1-5-80-1184457765-4068085190-3456807688-2200952327-3769537534)"
用同样的方法设置 data 的权限。binn 的权限可能不设置也行。
四、改变数据文件的位置。
实际上,文件才只有 100 多兆,不一定真有移动的必要。
因此,前面的操作意义并不好,仅在于学习而已。
真正需要移动的是数据文件,因为数据文件可能会很大,并且在系统盘上进行频繁访问也对性能有影响。
这就需要安装工具 sql management studio 了,有 600 多兆。
连接时,服务器名填写 \\.\pipe\microsoft##wid\tsql\query。余下的操作就没有什么难度了,分离、附加就好了。
五、出现的问题。
大概会有两个:
1、3417 错误
这是 sql 错误,是由于在 sql server 运行状态下复制的 master 等造成的。停止 sql server 服务后再复制数据库文件就可以了。
2、1067 错误
这是 windows 错误,说是进行意外终止。上,就是前面说的,mssql$microsoft##wid 用户对数据库目录没有读写权限造成的。
3、3605 错误
这是 sql 错误,说是验证数据库 susdb 架构失败。当把 wsus 3.0 的 susdb 附加到 windows 2012 中的 wid 时发生。
在 sql 日志中,具体表现为:
错误 50000, 严重性 16, 状态 1
detected an authorized object in schema
database verification script failed for database
%programfiles%\update services\tools\wsusutil postinstall [sql parameter] [content parameter]
两个参数分别指定 sql 服务器和升级补丁的位置,对于 wid, sql 就不必指定了。实际上,content 也不必指定,因为在安装时指定过了。如果不放心,就指定一焉,比如:f:\wsus
静静地等上 5、6 分钟,就好了。
六、说明。
微软是说通过备份与恢复的办法,实现数据库的迁移。
备份就不用多说了。
恢复的过程是这样的:
use master
go
alter database susdb set single_user with rollback immediate
go
drop database susdb
go
restore database [susdb] from disk = n'c:\susdb.bak' with file = 1, move n'susdb' to n'c:\windows\wid\data\susdb.mdf', move n'susdb_log' to n'c:\windows\wid\data\susdb_log.ldf', nounload, stats = 10
不过,即使这样,也一样出现 3605 的错误。