导致``无效的对象名称:dbo.etc''错误的根本原因是什么?
技术问答
220 人阅读
|
0 人回复
|
2023-09-14
|
我正在一个相当大的项目上进行一些维护编程,该项目是由一个已经离开公司的人启动的。/ b* w$ m6 r" w% e$ ?( b
我刚刚备份了公司的数据库之一,然后将其重新连接到我们的测试服务器。看起来似乎一切正常。 v7 \, w. O7 Q
然后,我通过该程序的常规登录过程,该部分似乎也可以正常工作。$ p5 R6 C5 @) J( x/ A
但是,一旦到达程序中需要执行存储过程的位置,我就会得到一条错误消息,告诉我Invalid object name, o, F) t9 X/ z7 l0 r/ V9 c% i
'Informix.dbo.customer'。
9 U5 e/ i ?* d: ^1 V1 m- @8 Z在原始数据库上运行相同的功能可以正常工作,并返回我希望看到的数据。7 @+ [+ j1 r4 M4 O6 `# L
我发现的类似错误的解释似乎是指架构,但这是事情变得有些奇怪的地方。原始数据库显然 没有6 y; R; ~. g3 Y
任何架构;在其“安全”文件夹中,只有一个“用户”文件夹(包含dbo)和一个“角色”文件夹,其中包含“数据库角色”文件夹,其中包含通常的db_owner等内容,还有一个名为“应用程序角色”的空文件夹。
; t! N8 B3 S& g& Q! ?2 ?”。6 ?" y) u4 Y& c0 m X1 W
备份和还原的数据库上的“安全性”文件夹中充满了各种废话。除了dbo之外,还有三个用户,“架构”文件夹,“证书”文件夹,两个加密密钥文件夹……我无法删除其中的任何一个。/ [0 H$ _+ z; ^
从我对SQL登录系统的有限了解来看,我正在登录的用户正从这种随机垃圾收集中获得非dbo许可,因此被拒绝访问dbo拥有的数据库部分。9 F4 h2 H2 V0 F: ?5 v0 ]
以我自己的理解,引发这些Invalid object
& Y" l+ ]6 D8 N% M7 ^name错误的问题的核心是什么?对于实际问题,我该怎么做才能纠正这种情况,并让我正在使用的程序实际上像在实时数据库上一样在测试数据库上工作?
B2 w& m! ^& r 6 G1 Z( |6 D6 L# r) Z; T
解决方案:
5 ?+ f+ w8 d. W4 e 5 e; P4 {1 q/ e8 f1 c8 y
$ W& m1 ~( C! H `% j& E" G
" z: a0 ]7 C5 ~ J5 S$ y3 i0 M 如果我理解正确,则说明您正在数据库(SomeDB)中执行过程(SomeProc),并且出现错误Invalid object name+ C; `# Q- c4 D5 Q; H
'Informix.dbo.customer'?这只是意味着SomeProc无法在名为“ Informix”的数据库中的名为“ dbo”的架构中找到名为“customer”的对象。可能有以下几种原因:
# X, G7 z) m8 O$ y[ol]对象不存在,可能是因为架构和/或数据库不存在9 z5 W' p) `7 t% N; F
该对象存在,但是运行该过程的用户甚至没有权限查看它
) w8 Q8 {8 x& ]* k# s该对象存在,但数据库区分大小写,并且名称的某些部分与代码中的名称不匹配
4 u" |6 w) H4 X( R[/ol]
( r( g( |1 ^2 t9 r7 E9 `; t您需要进行更多调查以找出造成这种情况的原因,但是作为一个完整的猜测,您的生产服务器同时具有Informix和SomeDB数据库,而测试服务器仅具有SomeDB?0 ~2 W. K2 S; b2 [. E; R
最后,在发布问题时,请始终包含您的SQL
: m% @, w7 m# g! XServer版本(2000/2005/2008)和版本(Express,Standard,Enterprise);在谈论架构和权限时,它们可能非常重要,因为功能和行为可能会有所不同。 |
|
|
|
|
|