导航

服务器管理人员变更,自然少不了增删改windows账户密码。结果一台业务服务器的某个应用无法启动,会报告如下错误。
异常一:
不能向表 'tempdb.dbo.#spdbdesc____________________________________00010002498F' 的'owner'列插入空值。
异常二:
无法将   NULL   值插入列   '',表   ''
经过事件探查器跟踪发现是在执行 ’exec sp_helpdb‘ 时出现的错误。
观察报错和这条语句,直觉告诉我一定是管理员删除了某个账户导致了当前用户没有了某些数据的权限。google,baidu,甚至live都用上了,找到一个办法:sp_changedbowner 'sa' ,执行后系统报错,不能设置sa为管理员,晕!!!
再找,呵呵,终于在csdn找到了这么一篇文章
执行sp_helpdb提示不能向表的'owner'列插入空值 
里面提到,可以通过以下语句来查看没有权限的数据库
    SELECT name
    
FROM master..sysdatabases
    
WHERE SUSER_SNAME(sid) IS NULL
结果出来后,让俺大跌眼镜,这些数据库竟然都丢失了数据库管理员!!!(只剩下一个没有登录名的dbowner),晕,赶紧继续使用“sp_changedbowner 'sa'”命令,结果仍然报错,
嘿嘿,幸亏俺比较聪明,把那些没有了管理员的数据库先分离再附加,果然奏效,嘿嘿。
不过要注意,附加的时候请将登录用户选成sa,如果还虚哟啊其他用户附加上数据库随便加得了。