SQL对象名无效的解决

SQL对象名无效的解决方法

产生SQL对象名无效的问题大多原因是由于数据迁移导致的,下面我们给出解决方法. 在使用数据库的过程中,经常会遇到数据库迁移或者数据迁移的问题,或者有突然的数据库损坏,这时需要从数据库的备份中直接恢复。但是,此时会出现问题,这里说明几种常见问题的解决方法。

一、孤立用户的问题 比如,以前的数据库的很多表是用户test建立的,但是当我们恢复数据库后,test用户此时就成了孤立用户,没有与之对应的登陆用户名,哪怕你建立了一个test登录用户名,而且是以前的用户密码,用该用户登录后同样没办法操作以前属于test的用户表。

这个问题有两种办法解决。 先说解决的前提条件。 首先,要用备份文件还原数据库,我们这里的数据库名为testdb,里面有属于用户test的用户表。这个很容易了操作了,不多讲了,在企业管理器中很方便可以恢复。恢复后,就产生了孤立用户test。然后,用sa用户或者具有DBA权限的用户登录,创建一个test数据库登录用户,密码随便设置了,也可以和以前的保持一致。我们用它来对应孤立的test用户。

使登录用户和数据库的孤立用户对应起来 其实我们建立了同样名称的数据库登录用户后,数据库中的表我们照样不能使用时因为sid的不同,就是系统登录表和数据库用户表中的用户名相同,单是sid字段,数据库中的还是以前旧系统的sid值,所以我们就要把它对应成我们新建的,数据库靠sid来识别用户。 这里可以使用存储过程sp_change_users_login。它有三种动作,分别是report,update_one和auto_fix。

运行sp_change_users_login ‘report‘,系统会列出当前数据库的孤立用户数。

我们只需要选择当前数据库为testdb,然后运行 sp_change_users_login ‘update_one‘,‘test‘,‘test‘ --系统就会提示修复了一个孤立用户。

如果没有建立test的登录用户,还可以用 sp_change_users_login ‘Auto_Fix‘, ‘test‘, NULL, ‘testpassword‘ --来创建一个登录用户名为test,密码为testpassword的用户与之对应。 好了,到这里通常情况下,数据库对象得到访问问题已经解决了。如果有多个数据库中有同一个用户的数据表,只需要选择不同的数据库,执行update_one的那个就行了。

二、对象名 ‘tablename’ 无效的问题 这里可能会有人遇到对象名 ‘tablename’无效的问题。系统表却不会产生这个问题,而用户表还要加上用户名,然后是表明才能访问,比如select * from author,会说对象名 author 无效,而用select * from test.author就可以访问,这个是用户首选身份的问题。

方法一: 解决很简单,就是察看test登录用户是否具有dbo的权限或者系统管理的权限,有的话去掉就行了。 因为如果用户有dbo身份,那么它登陆后的默认表空间是dbo的系统表空间,所以去掉了之后,就会以正常的test表空间访问数据表了。

方法二: 将所有test所有表设置为dbo就OK了

执行语句:exec sp_msforeachtable "sp_changeobjectowner ‘?‘,‘dbo‘"

孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的记录。

孤立帐户的产生一般是一下两种:
1.将备份的数据库在其它机器上还原;
2.重装系统或SQL SERVER之后只还原了用户库

解决方法是使用sp_change_users_login来修复。

sp_change_users_login的用法有三种

用法1:
exec sp_change_users_login ‘REPORT‘

列出当前数据库的孤立用户

用法2:
exec sp_change_users_login ‘AUTO_FIX‘,‘用户名‘

可以自动将用户名所对应的同名登录添加到syslogins中

用法3:
exec sp_change_users_login ‘UPDATE_ONE‘,‘用户名‘,‘登录名‘
将用户名映射为指定的登录名。

时间: 2024-10-24 02:49:56

SQL对象名无效的解决的相关文章

NHibernate could not get or update next value[SQL: ] 对象名 'hibernate_unique_key' 无效。

错误信息: --------------------------- --------------------------- NHibernate.Exceptions.GenericADOException: could not get or update next value[SQL: ] ---> System.Data.SqlClient.SqlException: 对象名 'hibernate_unique_key' 无效. 在 System.Data.SqlClient.SqlConn

数据库对象名无效

对象名 ‘tablename’ 无效的问题 这里可能会有人遇到对象名 ‘tablename’无效的问题.系统表却不会产生这个问题,而用户表还要加上用户名,然后是表明才能访问,比如select * from author,会说对象名 author 无效,而用select * from test.author就可以访问,这个是用户首选身份的问题. 方法一: 解决很简单,就是察看test登录用户是否具有dba的权限或者系统管理的权限,有的话去掉就行了. 因为如果用户有dba身份,那么它登陆后的默认表空

使用Hibarnate: 出现 java.sql.SQLException: ORA-00911: 无效字符, 解决思路

1. 查看到: Hibernat自动生成的sql查询语句 Hibernate: select * from ( select module0_.MODULE_ID as MODULE_ID1_1_, module0_.CREATE_BY as CREATE_BY2_1_, module0_.CREATE_DEPT as CREATE_DEPT3_1_, module0_.CREATE_TIME as CREATE_TIME4_1_, module0_.UPDATE_BY as UPDATE_BY

cmd中输入net start mysql 提示:服务名无效常见解决办法

解决方法:请进入MySQL的bin目录,并在bin目录打开命令行窗口,在命令行窗口输入:mysqld --install,回车,提示:Service successfully installed.表示安装MySQL服务成功,命令行窗口输入:net start mysql ,可以正常启动 原文地址:https://www.cnblogs.com/ruan-ruan/p/11626192.html

SqlSever基础 sysdatabases对象名无效

1 2

关于Excel无法打开,因为文件格式或文件扩展名无效的解决方法

可能有网友也遇到过跟我一样的情况,新建的excel一打开就弹出 这样的错误. 这是因为excel打开的时候会去指定的文件夹找一个模板,以这个模板的样式打开新建的ecxel.所以如果excel打开的时候在指定的地址没有找到模板就会报上述错误. 那这个指定的地址是配置在哪里的呢? win+R,在弹出的输入框里输入regedit 打开注册表 在HKEY_CLASSES_ROOT  ->  .xlsx ->ShellNew下面找到FileName 这个地址就是模板的地址. (备注:模板就是一个正常的.

PowerDesigner16 生成的备注脚本,在sql server 2008 中报“对象名 'sysproperties' 无效”的错误的解决办法

主要是在建模时我们对表.列增加了些说明注释,而Sql2005之后系统表sysproperties已废弃删除而改用sys.extended_properties所致. 1.修改Table TableComment 部分 菜单Database -> Edit Current DBMS 窗体 General 选项卡 下 Script -> Objects -> Table –> TableComment 在开头部分替换如下: [if exists (select 1           

[Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)

原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点:比如:begin  update  某个sqlserver的表@dblink名字 .....;  update 某个oracle的表...;end; 这段pl/sql执行会报错:错误信息是:-----------------------------------------------------------------执行失败:ORA-02054: 事务处理 2.12.27634 有问题

对象名master.dbo.spt_values无效解决办法

找到sql server安装目录下的u_tables.sql,例如:E:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Install 在出现 对象名master.dbo.spt_values无效解决办法错误的执行一下脚本就可以修复 原文地址:https://www.cnblogs.com/yy981420974/p/8297422.html