2009-10-06 6 views
1

J'ai une base de données SQL Server. Une des tables a une colonne qui, à défaut d'un meilleur mot, est corrompue. Je peux sélectionner * ou même sélectionner cette colonne spécifique et cela fonctionne très bien. Je peux effectuer des fonctions comme le compte, l'ordre et le groupe sur toutes les autres colonnes sans problèmes. Mais si j'essaie de faire l'une de ces fonctions sur cette colonne, elle sort avec le message suivant: Erreur: (Etat: S1000, Code natif: E28)Colonne endommagée dans la base de données

De plus, je suis connecté à la base de données en utilisant winsql.

Quelqu'un a déjà vu ce genre de comportement avant?

Informations complémentaires:

select colname from tablename

fonctionne très bien

select colname from tablename order by colname

produit l'erreur

+0

Pouvez-vous poster du code? –

+1

quelle est l'erreur? –

+0

Cela ressemble à une question de panne de serveur, mais je suis réticent à la migrer car c'est aussi lié à la programmation. Vous pouvez le demander ici (serverfault.com) pour voir si quelqu'un chez SF peut vous aider. S'il vous plaît donner une réponse ici si vous en obtenez un sur SF. –

Répondre

2

Essayez la reconstruction d'index. J'ai eu un problème similaire et les index de reconstruction l'ont corrigé. Dans un autre cas, la reconstruction des index ne fonctionnait pas, j'ai donc dû restaurer la sauvegarde nocturne. Dieu merci, nous avions des sauvegardes nocturnes pour la base de données de développement.

1

Si la base de données SQL signale une corruption/c'est vraiment une corruption - commencez par être très prudent. La corruption pourrait commencer à se manifester avec 823/824 et d'autres erreurs de gravité élevée. Gardez votre sang-froid et exécutez DBCC CheckDB - découvrez l'étendue de la corruption. Ne le détachez pas et ne commencez pas à effectuer des actions aléatoires.

Vous devriez faire une queue de sauvegarde de journal du journal des transactions avant de continuer - vous pourriez en avoir besoin si vous êtes obligé de restaurer. Je prendrais probablement ceci avec une option COPY_ONLY. CheckDB peut prendre un certain temps, mais laissez-le finir et voir combien de corruptions sont signalées, et sur quels objets ils sont rapportés.

Corruptions sur les index CN peuvent être résolues facilement grâce à une reconstruction d'index, corruptions avec des pages déchirées vont être plus difficiles.

Si CheckDB refuse de terminer et que l'erreur elle-même, vous avez un réel problème et exportera les données que vous pouvez/restaurer à partir d'une sauvegarde.

L'un des meilleurs endroits pour lire sur les corruptions et trouver/réparer/quand c'est fini est le blog de Paul S. Randal. http://www.sqlskills.com/blogs/paul/

Cela ne s'applique que si vous cherchez vraiment la corruption au lieu d'un morceau de SQL douteux.

+0

Est-ce que "select * from nom_table par nom_colonne" compte comme dodgy sql? – Kevin

+0

Il ne devrait pas l'être, mais exécutez-le via SQL mgmt studio pour vous assurer que rien ne l'interfère avant d'être exécuté sur le serveur. Si cela échoue, prenez note du message d'erreur et commencez à agir avec précaution. – Andrew