{"id":2400,"date":"2011-05-30T23:17:34","date_gmt":"2011-05-30T22:17:34","guid":{"rendered":"http:\/\/blog.capdata.fr\/?p=2400"},"modified":"2022-11-21T16:55:09","modified_gmt":"2022-11-21T15:55:09","slug":"error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/","title":{"rendered":"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2400&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2400&#038;title=Error%208976%20%2F%208978%2C%20probl%C3%A8mes%20de%20cha%C3%AEnage%2C%20comment%20r%C3%A9cup%C3%A9rer%20les%20donn%C3%A9es\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Error%208976%20%2F%208978%2C%20probl%C3%A8mes%20de%20cha%C3%AEnage%2C%20comment%20r%C3%A9cup%C3%A9rer%20les%20donn%C3%A9es&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2400\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p>Cet article fait suite \u00e0 une <a href=\"https:\/\/www.developpez.net\/forums\/d1087285\/bases-donnees\/ms-sql-server\/administration\/error-i-o-msg-823-a\/\">question <\/a>post\u00e9e sur <em>developpez.net<\/em> la semaine derni\u00e8re. La personne indique qu&#8217;une erreur 823 est remont\u00e9e sur une base en version SQL Server 2000. On lui demande d&#8217;inspecter les logs syst\u00e8mes \u00e0 la recherche d&#8217;une panne mat\u00e9rielle qui aurait pu \u00eatre \u00e0 l&#8217;origine du probl\u00e8me, puis de retourner le r\u00e9sultat d&#8217;un DBCC CHECKDB sur la base:<\/p>\n<pre><span style=\"color: #008000;\">Msg*8909, Niveau*16, \u00c9tat*1, Ligne*1\r\nErreur de TABLE : Objet ID = 0, INDEX ID*=*0, page ID = (1:22988). ID de page de l'en-t\u00eate\r\nde page = (0:0).\r\nCHECKDB a trouv\u00e9 0 erreurs d'allocation et 1 erreurs de coh\u00e9rence non associ\u00e9es \u00e0 un\r\nquelconque objet UNIQUE.\r\nMsg*8928, Niveau*16, \u00c9tat*1, Ligne*1\r\nObjet ID = 574885365, INDEX ID = 0 : <span style=\"color: #ff0000;\">La page (1:22988) ne peut pas \u00eatre trait\u00e9e<\/span>. Pour\r\nplus d'informations, consultez les autres erreurs.\r\n<span style=\"color: #ff0000;\">Msg*8976, Niveau*16, \u00c9tat*1, Ligne*1<\/span>\r\nErreur de table : Objet ID = 574885365, index ID = 1. <span style=\"color: #ff0000;\">Page (1:22988) n'a pas \u00e9t\u00e9 trouv\u00e9\r\ndans l'analyse bien que ses parents (1:22930) et (1:22987) pr\u00e9c\u00e9dents y font r\u00e9f\u00e9rence<\/span>.\r\nContr\u00f4lez toutes les erreurs pr\u00e9c\u00e9dentes.\r\n<span style=\"color: #ff0000;\">Msg*8978<\/span>, Niveau*16, \u00c9tat*1, Ligne*1\r\nErreur de table : Objet ID = 574885365, index ID = 1. <span style=\"color: #ff0000;\">La page (1:22989) n'a pas de r\u00e9f\u00e9rence\r\ndans la page pr\u00e9c\u00e9dente (1:22988). Possibilit\u00e9 d'un probl\u00e8me de liaison de cha\u00eene.<\/span>\r\nCHECKDB a trouv\u00e9 0 erreurs d'allocation et 3 erreurs de coh\u00e9rence dans la TABLE\r\n'XXXXXXXX' (objet ID = 574885365).\r\nCHECKDB a trouv\u00e9 0 erreurs d'allocation et 4 erreurs de coh\u00e9rence dans la base de\r\ndonn\u00e9es 'xxxxxxx'.\r\n<span style=\"color: #ff0000;\">repair_allow_data_loss <\/span>est le minimum de niveau de r\u00e9paration pour les erreurs trouv\u00e9s\r\npar DBCC CHECKDB (chantier ).<\/span><\/pre>\n<p>Outre le fait qu&#8217;un probl\u00e8me mat\u00e9riel emp\u00eache tout bonnement la lecture d&#8217;une page depuis le disque, le CHECKDB indique deux autres erreurs 8978 et 8976, parlant d&#8217;un probl\u00e8me de liaison de page. On rappelle que chaque page de donn\u00e9es ou d&#8217;index hors pages sp\u00e9ciales (IAM, DBINFO, SGAM, GAM, PFS, ML, DM,&#8230;) est li\u00e9e \u00e0 la page qui la pr\u00e9c\u00e8de et \u00e0 la page qui la suit dans le plan d&#8217;allocation, mais aussi \u00e0 une page parente dans un index.<\/p>\n<p>Lorsqu&#8217;une page parente r\u00e9f\u00e9rence une page \u00e0 un niveau inf\u00e9rieur du B-tree et que cette page n&#8217;est pas trouv\u00e9e, alors DBCC CHECKDB renvoie une erreur 8976. Lorsqu&#8217;une page r\u00e9f\u00e9rence une page Next et que cette page n&#8217;est pas trouv\u00e9e, alors DBCC CHECKDB renvoie une erreur 8978. Mais ces messages n&#8217;indiquent pas s&#8217;il ne s&#8217;agit que d&#8217;une corruption de l&#8217;ent\u00eate de la page, ou aussi des donn\u00e9es.<\/p>\n<p>Ce qui veut dire que les donn\u00e9es peuvent \u00eatre bonnes alors que DBCC CHECKDB nous oriente vers un repair_allow_data_loss comme m\u00e9thode de r\u00e9solution, avec les cons\u00e9quences que l&#8217;on sait (d\u00e9sallocation de la page qui pose probl\u00e8me et perte des donn\u00e9es).<\/p>\n<p>Dans le cas \u00e9voqu\u00e9 sur <em>developpez.net<\/em>, la personne ne dispose pas de backup, la question est de savoir quelles donn\u00e9es il risque de perdre, et si les donn\u00e9es ne sont pas endommag\u00e9es, comment peut-il les r\u00e9cup\u00e9rer.<\/p>\n<h2>Repro pour ce probl\u00e8me<\/h2>\n<p>Nous allons cr\u00e9er une base linkcorrupt et modifier la valeur du pointeur prevPageID dans une page de niveau feuille d&#8217;un index cluster pour forcer des erreurs 8976 et 8978.<\/p>\n<pre><span style=\"color: #0000ff;\">create database linkcorrupt\r\nGO\r\nuse linkcorrupt\r\nGO\r\n<\/span><span style=\"color: #0000ff;\">create table T1(\r\n     a numeric identity,\r\n     b char(4000) default replicate('b',4000),\r\n     c bigint default round(rand()*100,0))\r\nGO\r\ninsert into T1 default values\r\nGO 1000\r\ncreate unique clustered index IDX_T1C on T1(a)<\/span><span style=\"color: #0000ff;\">\r\nGO\r\n<\/span><\/pre>\n<p>On va choisir une page du niveau feuille de l&#8217;index cluster (le dbcc ind a \u00e9t\u00e9 purg\u00e9 de certaines colonnes pour une meilleure lisibilit\u00e9)<\/p>\n<pre><span style=\"color: #0000ff;\">dbcc ind('linkcorrupt','T1',-1)<\/span><\/pre>\n<pre><span style=\"color: #0000ff;\"> PageFID PagePID\u00a0\u00a0\u00a0\u00a0 PageType  IndexLevel NextPageFID NextPagePID PrevPageFID PrevPagePID\r\n ------- ----------- --------  ---------- ----------- ----------- ----------- -----------\r\n<span style=\"color: #808080;\"> 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 90\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 10\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  NULL\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span>\r\n<span style=\"color: #ff6600;\"> 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 110\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 115\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 115\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 110\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 121\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span>\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 672\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 673\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 673\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 674\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 672\r\n<span style=\"color: #ff0000;\"> 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 674\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 675\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 673<\/span>\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 675\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 676\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 674\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 676\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 677\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 675\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 677\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 678\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 676\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 678\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 679\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 677\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 679\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 680\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 678\r\n 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 680\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0  0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 681\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 679\r\n ...\r\n<\/span><\/pre>\n<p>De ce r\u00e9sultat on d\u00e9duit que:<\/p>\n<ul>\n<li>La page 1:90 est la page IAM pour T1.<\/li>\n<li>La page 1:121 est la page racine de l&#8217;index cluster<\/li>\n<li>Les pages 1:110 et 1:115 sont des pages de niveau interm\u00e9diaire pour l&#8217;index cluster (on aura volontairement cas\u00e9 deux lignes par page pour augmenter le feuillage de l&#8217;index).<\/li>\n<li>Les autres pages sont les pages du niveau feuille de l&#8217;index cluster. On choisira de corrompre le pointeur prevPagePID dans la page 1:674. Comme l&#8217;index vient juste d&#8217;\u00eatre construit, il est parfaitement clusteris\u00e9 et les pages avant et apr\u00e8s sont respectivement 1:673 et 1:675. On passe la base hors-ligne et on ouvre le fichier MDF dans <a href=\"https:\/\/www.chmaas.handshake.de\/delphi\/freeware\/xvi32\/xvi32.htm\">xvi32<\/a>.<\/li>\n<\/ul>\n<pre><span style=\"color: #0000ff;\">alter database linkcorrupt set offline<\/span><\/pre>\n<p>La page 1:674 se trouve \u00e0 l&#8217;offset 0x544000 dans le fichier mdf\u00a0 (674*8192). Il est alors ais\u00e9 de rep\u00e9rer les offset o\u00f9 sont stock\u00e9s les pointeurs prev et next:<\/p>\n<p><a href=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-2421\" title=\"linkcorrupt\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt-1024x290.jpg\" alt=\"\" width=\"1024\" height=\"290\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt-1024x290.jpg 1024w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt-300x85.jpg 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt-768x218.jpg 768w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt.jpg 1355w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>Le trait rouge repr\u00e9sente l&#8217;offset 0 de la page 1:674. Les 96 premiers octets constituent l&#8217;ent\u00eate de la page. x86 \u00e9tant en little-endian, l&#8217;octet de poids faible est en premier donc il faut lire \u00e0 l&#8217;envers. 02A1 repr\u00e9sente notre page prev 1:673, 02A3 notre page next 1:675 et 02A2 notre PageID. On d\u00e9cide de z\u00e9ro-initialiser l&#8217;octet de poids faible de 673 :<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2426 aligncenter\" title=\"linkcorrupt2\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt2.jpg\" alt=\"\" width=\"251\" height=\"78\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt2.jpg 251w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/linkcorrupt2-250x78.jpg 250w\" sizes=\"auto, (max-width: 251px) 100vw, 251px\" \/><\/a><\/p>\n<p>On repasse alors la base en ligne et on contr\u00f4le notre base pour v\u00e9rifier qu&#8217;elle se trouve bien dans l&#8217;\u00e9tat attendu:<\/p>\n<pre><span style=\"color: #0000ff;\">alter database linkcorrupt set online\r\nGO\r\ndbcc checkdb ('linkcorrupt') with no_infomsgs, all_errormsgs\r\nGO\r\n\r\n<span style=\"color: #008000;\">Msg\u00a08928, Niveau\u00a016, \u00c9tat\u00a01, Ligne\u00a01\r\nID d'objet 2073058421, ID d'index 1, ID de partition 72057594038386688,  ID d'unit\u00e9 d'allocation 72057594043367424 (type In-row data)\u00a0:\r\n<span style=\"color: #ff0000;\">impossible de traiter la page (1:674)<\/span>. Pour plus d'informations,  consultez les autres erreurs.\r\nMsg\u00a08939, Niveau\u00a016, \u00c9tat\u00a098, Ligne\u00a01\r\nErreur de table\u00a0: ID d'objet 2073058421, ID d'index 1, ID de partition  72057594038386688, ID d'unit\u00e9 d'allocation 72057594043367424\r\n(type  In-row data), page (1:674). \u00c9chec du test (IS_OFF (BUF_IOERR,  pBUF-&gt;bstat)). Valeurs 12716041 et -4.\r\n<span style=\"color: #ff0000;\">Msg\u00a08976<\/span><span style=\"color: #ff0000;\">, Niveau\u00a016, \u00c9tat\u00a01, Ligne\u00a01<\/span>\r\nErreur de table\u00a0: ID d'objet 2073058421, ID d'index 1, ID de partition  72057594038386688, ID d'unit\u00e9 d'allocation 72057594043367424\r\n(type  In-row data). <span style=\"color: #ff0000;\">La page (1:674) n'a pas \u00e9t\u00e9 d\u00e9tect\u00e9e lors de l'analyse  alors que sa page parent (1:110) et les (1:673) pages pr\u00e9c\u00e9dentes\r\nla  r\u00e9f\u00e9rencent<\/span>. V\u00e9rifiez les erreurs pr\u00e9c\u00e9dentes.\r\n<span style=\"color: #ff0000;\">Msg\u00a08978, Niveau\u00a016, \u00c9tat\u00a01, Ligne\u00a01<\/span>\r\nErreur de table\u00a0: ID d'objet 2073058421, ID d'index 1, ID de partition  72057594038386688, ID d'unit\u00e9 d'allocation 72057594043367424\r\n(type  In-row data). <span style=\"color: #ff0000;\">Une r\u00e9f\u00e9rence de la page pr\u00e9c\u00e9dente (1:674) est manquante \u00e0  la page (1:675)<\/span>. Un probl\u00e8me de liaison de cha\u00eene s'est\r\npeut-\u00eatre  produit.\r\nCHECKDB a trouv\u00e9 0 erreurs d'allocation et 4 erreurs de coh\u00e9rence dans la table 'T1' (ID d'objet 2073058421).\r\nCHECKDB a trouv\u00e9 0 erreurs d'allocation et 4 erreurs de coh\u00e9rence dans la base de donn\u00e9es 'linkcorrupt'.\r\nrepair_allow_data_loss est le niveau minimum de r\u00e9paration pour les erreurs trouv\u00e9es par DBCC CHECKDB (linkcorrupt).<\/span><\/span><\/pre>\n<h2>Identifier les plages de valeurs concern\u00e9es par la corruption:<\/h2>\n<p>Une des questions qu&#8217;on peut se poser, comment savoir ce qu&#8217;il y a \u00e0 r\u00e9cup\u00e9rer (si les donn\u00e9es ne sont pas touch\u00e9es) ou ce qu&#8217;on va potentiellement perdre (si les donn\u00e9es sont touch\u00e9es).<\/p>\n<p>Avant cela, il faut d\u00e9j\u00e0 r\u00e9cup\u00e9rer tout le reste de la table en injectant les donn\u00e9es jusqu&#8217;\u00e0 la page 1:673 comprise et \u00e0 partir de la page 1:675 comprise, puis d&#8217;inspecter la page 1:674 pour voir si les donn\u00e9es qui y sont contenues sont lisibles. On sait que les pages sont class\u00e9es physiquement dans l&#8217;ordre de notre cl\u00e9 clusteris\u00e9e, donc il suffit pour exclure l&#8217;intervalle compris dans la page 1:674, de conna\u00eetre la derni\u00e8re valeur de &#8216;a&#8217; dans la page 1:673 et la premi\u00e8re valeur de &#8216;a&#8217; dans la page 1:675.<\/p>\n<p>On cr\u00e9\u00e9 deux tables temporaires pour stocker le r\u00e9sultat des dbcc page sur les deux pages prev et next:<\/p>\n<pre><span style=\"color: #0000ff;\">CREATE TABLE #recover673 (parentobject varchar(50), Object varchar(100), Field varchar(50), Value varchar(max))\r\nGO\r\nINSERT INTO #recover673\u00a0 exec ('dbcc page(10,1,673,3) with tableresults')\r\nGO<\/span><\/pre>\n<pre><span style=\"color: #0000ff;\">CREATE TABLE #recover675 (parentobject varchar(50), Object varchar(100), Field varchar(50), Value varchar(max))\r\nGO\r\nINSERT INTO #recover675\u00a0 exec ('dbcc page(10,1,675,3) with tableresults')\r\nGO<\/span><\/pre>\n<p>C&#8217;est la table d&#8217;offset de ligne qui permet de retourner les lignes dans l&#8217;ordre, dans les faits les lignes ne sont pas n\u00e9cessairement class\u00e9es physiquement dans la page. On se sert des slots pour conna\u00eetre la derni\u00e8re valeur de &#8216;a&#8217; dans la page 1:673 et la premi\u00e8re dans la page 1:675 (on rappelle qu&#8217;on n&#8217;a que deux lignes par page).<\/p>\n<pre><span style=\"color: #0000ff;\">select Object, Value FROM #recover673 where Field='a'\r\nObject\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Value\r\n--------------------------------------\u00a0 ---------\r\nSlot 0 Column 0 Offset 0x4 Length 9\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a03\r\n<span style=\"color: #ff0000;\">Slot 1 Column 0 Offset 0x4 Length 9\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a04<\/span>\r\n<\/span><\/pre>\n<pre><span style=\"color: #0000ff;\">select Object, Value FROM #recover675 where Field='a'\r\n\r\nObject\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Value\r\n--------------------------------------\u00a0 ---------\r\n<span style=\"color: #ff0000;\">Slot 0 Column 0 Offset 0x4 Length 9\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a07<\/span>\r\nSlot 1 Column 0 Offset 0x4 Length 9\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a08<\/span><\/pre>\n<p>Il s&#8217;agit donc des valeurs de cl\u00e9 5 et 6 qui sont dans la page qui pose probl\u00e8me. On cr\u00e9\u00e9 une table \u00e0 l&#8217;identique et on injecte les deux plages de valeurs [0;4] et [7;1000]:<\/p>\n<pre><span style=\"color: #0000ff;\">select * into T1_backup from T1 where 1=2\r\nGO\r\ninsert into T1_backup select a,b from T1 <span style=\"color: #008000;\">with (index = IDX_T1C)<\/span> where a in (1,2,3,4)\r\nGO\r\ninsert into T1_backup select a,b from T1 <span style=\"color: #008000;\">with (index = IDX_T1C)<\/span> where a &gt;=7\r\nGO<\/span><\/pre>\n<p>En vert, un hint qui permet de forcer un seek sur l&#8217;index clusteris\u00e9. En effet, un Clustered Index Scan aurait tent\u00e9 de lire les pages 1:673 -&gt; 1:674 et aurait remont\u00e9 une erreur de cha\u00eenage et une erreur 824.<\/p>\n<p>Il ne reste plus qu&#8217;\u00e0 essayer de lire le contenu de la page endommag\u00e9e pour voir ce qu&#8217;il peut y avoir de r\u00e9cup\u00e9rable:<\/p>\n<pre><span style=\"color: #0000ff;\">CREATE TABLE #recover674 (parentobject varchar(50), Object varchar(100), Field varchar(50), Value varchar(max))\r\nGO\r\ninsert into #recover674\u00a0 exec ('dbcc page(17,1,674,3) with tableresults')\r\nGO\r\n\r\n<\/span><\/pre>\n<p>Si la page est lisible alors une requ\u00eate simple permet de ramener les valeurs au format de T1:<\/p>\n<pre><span style=\"color: #0000ff;\">with TA as (select cast(Object as char(6)) SlotID, Value from #recover674 where Field='a'),\r\nTB as (select cast(Object as char(6)) SlotID, Value from #recover674 where Field='b')\r\n<\/span><span style=\"color: #0000ff;\">insert into T1_backup<\/span> <span style=\"color: #0000ff;\">select TA.Value as 'a', TB.value as 'b' from TA inner join TB on TA.SLotID = TB.SlotID\r\n<span style=\"color: #008000;\">\r\na\u00a0\u00a0\u00a0\u00a0\u00a0 b\r\n-------------------------------\r\n5\u00a0\u00a0\u00a0\u00a0\u00a0 bbbbbbbbbbbbbbbbbbb(...)\r\n6\u00a0\u00a0\u00a0\u00a0\u00a0 bbbbbbbbbbbbbbbbbbb(...)<\/span><\/span><\/pre>\n<p>Dans le cas o\u00f9 les donn\u00e9es ne sont pas lisibles, on a au moins l&#8217;information de la plage qui est perdue, information que ne donne pas le repair_allow_data_loss.<\/p>\n<p>A+. David B.<\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2400&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2400&#038;title=Error%208976%20%2F%208978%2C%20probl%C3%A8mes%20de%20cha%C3%AEnage%2C%20comment%20r%C3%A9cup%C3%A9rer%20les%20donn%C3%A9es\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Error%208976%20%2F%208978%2C%20probl%C3%A8mes%20de%20cha%C3%AEnage%2C%20comment%20r%C3%A9cup%C3%A9rer%20les%20donn%C3%A9es&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F2400\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>Cet article fait suite \u00e0 une question post\u00e9e sur developpez.net la semaine derni\u00e8re. La personne indique qu&#8217;une erreur 823 est remont\u00e9e sur une base en version SQL Server 2000. On lui demande d&#8217;inspecter les logs syst\u00e8mes \u00e0 la recherche d&#8217;une&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":7923,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[201,115,38],"class_list":["post-2400","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sqlserver","tag-corruption","tag-dbcc-ind","tag-internals"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"Cet article fait suite \u00e0 une question post\u00e9e sur developpez.net la semaine derni\u00e8re. La personne indique qu&#8217;une erreur 823 est remont\u00e9e sur une base en version SQL Server 2000. On lui demande d&#8217;inspecter les logs syst\u00e8mes \u00e0 la recherche d&#8217;une&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2011-05-30T22:17:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-21T15:55:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/heavy-duty-chains-500x500.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"499\" \/>\n\t<meta property=\"og:image:height\" content=\"375\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David Baffaleuf\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Baffaleuf\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/\"},\"author\":{\"name\":\"David Baffaleuf\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\"},\"headline\":\"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es\",\"datePublished\":\"2011-05-30T22:17:34+00:00\",\"dateModified\":\"2022-11-21T15:55:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/\"},\"wordCount\":974,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"corruption\",\"dbcc ind\",\"internals\"],\"articleSection\":[\"SQL Server\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/\",\"name\":\"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2011-05-30T22:17:34+00:00\",\"dateModified\":\"2022-11-21T15:55:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\",\"name\":\"David Baffaleuf\",\"sameAs\":[\"http:\/\/www.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/","og_locale":"fr_FR","og_type":"article","og_title":"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es - Capdata TECH BLOG","og_description":"Cet article fait suite \u00e0 une question post\u00e9e sur developpez.net la semaine derni\u00e8re. La personne indique qu&#8217;une erreur 823 est remont\u00e9e sur une base en version SQL Server 2000. On lui demande d&#8217;inspecter les logs syst\u00e8mes \u00e0 la recherche d&#8217;une&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2011-05-30T22:17:34+00:00","article_modified_time":"2022-11-21T15:55:09+00:00","og_image":[{"width":499,"height":375,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2011\/05\/heavy-duty-chains-500x500.jpg","type":"image\/jpeg"}],"author":"David Baffaleuf","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"David Baffaleuf","Dur\u00e9e de lecture estim\u00e9e":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/"},"author":{"name":"David Baffaleuf","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf"},"headline":"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es","datePublished":"2011-05-30T22:17:34+00:00","dateModified":"2022-11-21T15:55:09+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/"},"wordCount":974,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["corruption","dbcc ind","internals"],"articleSection":["SQL Server"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/","url":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/","name":"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2011-05-30T22:17:34+00:00","dateModified":"2022-11-21T15:55:09+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/error-8976-8978-problemes-de-chainage-comment-recuperer-les-donnees\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Error 8976 \/ 8978, probl\u00e8mes de cha\u00eenage, comment r\u00e9cup\u00e9rer les donn\u00e9es"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf","name":"David Baffaleuf","sameAs":["http:\/\/www.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/2400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=2400"}],"version-history":[{"count":53,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/2400\/revisions"}],"predecessor-version":[{"id":9512,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/2400\/revisions\/9512"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/7923"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=2400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=2400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=2400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}