2010-05-12 13 views
2

Contexte:
J'ai un site construit en ASP.NET avec Sql Server 2005 comme base de données. Le site est le seul site sur une boîte Windows Server 2003 assis dans la salle des serveurs de mon client. Le client est un district scolaire local, donc pour des raisons de sécurité des données il n'y a pas d'accès au bureau distant et pas de connexion Sql Server distante, donc si je dois entretenir la base de données, je dois être au terminal. J'ai un accès FTP pour mettre à jour le code ASP.Strange Sql Server 2005 comportement

Problème:
J'ai été contacté hier au sujet d'un problème avec le système. Quand j'ai regardé dedans, il semble qu'un bug que j'avais résolu il y a presque un an était revenu. J'ai une procédure stockée qui prenait un int en tant que paramètre mais il y a un an nous avons changé la structure du système et mis à jour la procédure stockée pour prendre un nvarchar (10). La procédure stockée est en quelque sorte revenue à prendre un int au lieu d'un nvarchar.

Un disque dur externe connecté au serveur copie régulièrement les données et a la capacité de restaurer le serveur en cas de panne. J'aurais supposé que d'une façon ou d'une autre une ancienne version de la base de données avait été restaurée, mais les données que je sais avoir été insérées 7 jours et 1 jour avant que le bogue ne se produise sont toujours dans la base de données.

Question:
Y at-il de toute façon que la structure d'une base de données Sql Server 2005 peut revenir à une version précédente ou être restaurée à une version précédente sans toucher les données réelles? Personne d'autre ne devrait avoir accès au serveur, alors je deviens un peu fou en essayant de comprendre comment cela est arrivé.

Des idées?

Répondre

0

Grâce aux services de transformation de données (DTS)? ou si les scripts qui configurent la base de données sont disponibles quelque part.

+0

Gaby - J'ai initialement créé la base de données directement sur le serveur et j'ai fait toutes les mises à jour à la main. Je n'ai utilisé que des scripts pour copier une sauvegarde de temps en temps pour la ramener dans mon bureau afin de garder les environnements de production à jour. –

2

En utilisant le mécanisme de sauvegarde et de restauration intégré de SQL Server, il n'y a aucun moyen de sélectionner uniquement certains objets à restaurer. Avec les sauvegardes du journal des transactions, vous pouvez restaurer à un moment donné avant qu'une certaine transaction ou une instruction ALTER ait été créée, mais c'est ce que vous obtenez le plus près. Il existe des outils qui vous permettent de sélectionner certains objets à restaurer, quel que soit leur mode de fonctionnement, en restaurant la base de données sur une copie et en copiant les objets souhaités ou en lisant directement la sauvegarde et en copiant ces objets. En d'autres termes, ce n'est pas quelque chose qui aurait pu arriver en utilisant accidentellement les outils intégrés. Ma conjecture est que quelqu'un a couru accidentellement un vieux script du proc (s) stocké (s) qui l'a inversé.

+0

"... quelqu'un a accidentellement couru un vieux script ..." serait ma conjecture aussi. Mais il * semble * qu'il y a une forte sécurité sur ce système ...? –

+0

@Philip Kelley - Il devait être exécuté par un compte disposant d'autorisations même s'il s'agissait d'une restauration. Ce qui signifie que quelque chose ou quelqu'un devait avoir accès. S'il existe un nombre limité de comptes avec des autorisations ALTER, il devrait être facile d'affiner la source de la modification. – Thomas

+0

Le compte auquel ASP se connecte est très limité. Le seul compte avec n'importe quel type de privilèges d'altération sur des choses comme les procédures stockées est le compte d'administrateur local. –

2

Il serait trivial de modifier une procédure stockée sans toucher aucune donnée, ou toute autre procédure stockée. Comment qui, quand, c'est le problème.

Une suggestion, exécutez

select * from sys.procedures 

et vérifiez la create_date et les colonnes MODIFY_DATE, tant pour votre procédure de problème et toutes les autres procédures dans la base de données.

+0

Merci pour l'idée. C'est une commande que je ne pourrai exécuter qu'à partir du terminal, donc je devrai attendre la prochaine fois que je pourrai sortir de mon bureau pour aller chez eux. –

1

J'ai été témoin de choses similaires avec une application que j'ai installée chez un client. De temps en temps, les s'procs reviennent à une version plus ancienne.

C'est juste un client, l'application est installée chez plusieurs autres qui n'ont jamais eu ce problème, et ils se trouvent être aussi un district scolaire. Cela arrive une fois tous les trois mois et personne ne devrait toucher cette machine. Je ne suis même pas sûr qu'ils ont quelqu'un dans la maison qui sauraient comment ouvrir le gestionnaire de l'entreprise. Par curiosité, quel logiciel de sauvegarde votre client utilise-t-il?et, après avoir vérifié les dates de création/modification sur les procédures, un redémarrage du serveur s'est-il produit à ce moment-là?

La raison pour laquelle je demande est que mon client a un logiciel de sauvegarde qui fait des choses vraiment bizarres sur ce serveur. Par exemple, au redémarrage, il doit "lire" les modifications, y compris les opérations sur les fichiers, depuis la dernière sauvegarde réussie. Aussi, est-il installé dans une machine virtuelle?

+0

Incidemment, j'ai renoncé à essayer de comprendre cela et au lieu de garder un script de ce que les s'procs actuels sont que je peux réappliquer quand cela arrive. Mais je suis toujours curieux de savoir quelle solution de sauvegarde ils ont en place. Depuis que vous en avez parlé, j'ai l'esprit tourné. – NotMe