2010-10-19 91 views
17

Estoy haciendo algo de programación de mantenimiento en un proyecto bastante grande, que fue iniciado por alguien que ahora se fue de la compañía ...Causa raíz de un error "Nombre de objeto no válido: dbo.etc"?

Acabo de hacer una copia de seguridad de una de las bases de datos de la empresa y luego volver a adjuntarla a nuestro servidor de prueba. Parece que todo está funcionando bien.

Luego reviso el procedimiento de inicio de sesión habitual del programa, y ​​esa parte también parece funcionar.

Sin embargo, una vez que llego a un punto en el programa donde se necesita ejecutar un procedimiento almacenado, me aparece un error al decirme Invalid object name 'Informix.dbo.customer'.

La ejecución de la misma función en la base de datos original funciona bien y devuelve los datos que espero ver.

Las explicaciones de errores similares que he encontrado parecen referirse a Schemas, pero ahí es donde las cosas se ponen un poco raras. La base de datos original obviamente no tiene tiene ningún esquema; En su carpeta "Seguridad" solo tiene una carpeta "Usuarios", que contiene dbo, y una carpeta "Roles", que contiene la carpeta "Roles de base de datos", con el elemento habitual db_owner, etc. y una carpeta vacía llamada "Roles de aplicación" ".

La carpeta de seguridad en la base de datos copiada y restaurada está llena de todo tipo de basura. Tres usuarios además de dbo, una carpeta "Esquemas", una carpeta "Certificados", dos carpetas de claves de cifrado ... No puedo eliminar ninguno de estos.

Desde mi conocimiento limitado del sistema de inicio de sesión de SQL, el usuario que estoy iniciando está obteniendo permisos no-dbo de esta colección de basura aleatoria, por lo que se niega el acceso a las partes de la base de datos propiedad de dbo.

Para mi propio entender, ¿cuál es el núcleo del problema que está arrojando estos errores Invalid object name? Y para cuestiones prácticas, ¿qué puedo hacer para rectificar esta situación y hacer que el programa que estoy usando funcione en la base de datos de prueba de la misma forma que lo hace en la versión en vivo?

+1

¿La base de datos restaurada tiene el mismo nombre que la de producción? ¿Es posible que el nombre de la base de datos esté codificado en la aplicación? –

+0

Lo siento, fue para hacer ese punto y luego lo olvidé. Probé el procedimiento almacenado desde SQL Server Management Studio utilizando la función Ejecutar procedimiento almacenado y el procedimiento almacenado funciona en la base de datos original, y no en la nueva. El nombre de la base de datos es el mismo, sin embargo. – Frosty840

Respuesta

9

Si entiendo correctamente, está ejecutando un procedimiento (SomeProc) en una base de datos (SomeDB) y está dando el error Invalid object name 'Informix.dbo.customer'? Eso simplemente significa que SomeProc no puede encontrar un objeto llamado "cliente" en un esquema llamado "dbo" en una base de datos llamada "Informix". Hay varias razones posibles para esto:

  1. El objeto no existe, posiblemente debido a que el esquema y/o base de datos no existen
  2. El objeto existe, pero el usuario que ejecuta el procedimiento no tiene incluso permiso para ver que
  3. el objeto existe, pero la base de datos es sensible a mayúsculas y alguna parte del nombre no coincide con el nombre en código

tendrá que investigar más para averiguar cuál es la causa en su caso, pero como una conjetura completa, su servidor de producción tiene tanto Bases de datos Informix y SomeDB, pero su servidor de prueba solo tiene SomeDB?

Finalmente, cuando publique preguntas, siempre incluya su versión de SQL Server (2000/2005/2008) y su edición (Express, Standard, Enterprise); pueden ser muy importantes cuando se habla de esquemas y permisos, porque las características y el comportamiento pueden ser diferentes.

+0

Bueno, mi comprensión no es tan mala, pero prefiero tener todo dispuesto para mí para una mejor comprensión de dónde estoy teniendo un problema. El problema resultó ser que pensé que Informix era un método de conexión de base de datos en lugar de una base de datos específica y, por lo tanto, tenía ideas erróneas * extrañas * sobre la información que recibía. Debería estar todo bien ahora, gracias. – Frosty840

1

Podría ser un problema con el propietario del objeto (SP en su caso). Compruebe el propietario en el estudio de administración SQL

Cuestiones relacionadas