咨询热线:4006-75-4006
售前:9:00-23:30 备案:9:00-18:00 技术:7*24h
在进行站点搬迁时,我们通常会把sql server数据库备份成.bak文件,再到新的sql server环境下还原。在网站搭建完成后访问时可能会出现“对象名无效”的错误,如下图:
以下是sql server出现报错的原因以及解决方法:
这其实是sql server孤立用户的问题。
如上图所示,a0805120154为恢复完的数据库。该数据库的很多表是用户a0805120154建立的,但是当我们恢复sql server数据库后,a0805120154用户此时就成了孤立用户。没有与之对应的sql server登录用户名,哪怕你建立了一个a0805120154登录用户名,而且是以前的用户密码,用该用户登录后同样没办法操作以前属于a0805120154的用户表。
比如在sql server查询语句中访问上图中的三个视图时,就会提示“对象名无效”
这个问题有两种办法解决。
先说解决的前提条件。 首先,如上还原sql server数据库a0805120154。
数据库恢复后,就产生了孤立用户a0805120154。 然后,用sa用户或者具有DBA权限的sql server用户登录,创建一个a0805120154数据库登录用户,密码随便设置,也可以和以前的保持一致。
我们用它来对应孤立的a0805120154用户,使登录用户和sql server数据库的孤立用户对应起来,其实我们建立了同样名称的数据库登录用户后,数据库中的表我们照样不能使用,因为sid的不同,就是系统登录表和数据库用户表中的用户名相同, 单是sid字段数据库中的还是以前旧系统的sid值,所以我们就要把它对应成我们新建的。sql server数据库就是靠sid来识别用户的。
这里可以使用sql server存储过程sp_change_users_login。它有三种动作,分别是report,update_one和auto_fix。
运行sp_change_users_login 'report',系统会列出当前数据库的孤立用户数。
我们只需要选择当前数据库为a0805120154,然后运行 sp_change_users_login 'update_one','a0805120154','a0805120154' --系统就会提示修复了一个孤立用户。
重新打开网站,问题就解决了。