{"id":5,"date":"2008-06-13T14:16:18","date_gmt":"2008-06-13T13:16:18","guid":{"rendered":"http:\/\/192.168.1.220:8080\/blogs\/sqlserver\/?p=4"},"modified":"2023-04-20T07:03:10","modified_gmt":"2023-04-20T06:03:10","slug":"modes-de-recuperation-et-journal-de-transactions-episode-1","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/","title":{"rendered":"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1"},"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%2F5&#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%2F5&#038;title=Modes%20de%20r%C3%A9cup%C3%A9ration%20et%20journal%20de%20transactions%2C%20%C3%A9pisode%201\" 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=Modes%20de%20r%C3%A9cup%C3%A9ration%20et%20journal%20de%20transactions%2C%20%C3%A9pisode%201&#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%2F5\" 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>Une petite s\u00e9rie de posts sur les diff\u00e9rents modes de r\u00e9cup\u00e9ration des bases sous SQL Server 2005\/2008, et leur impact sur le journal de transactions.<\/p>\n<p><strong>Dans ce premier \u00e9pisode:<\/strong><\/p>\n<ol>\n<li>Qu&#8217;implique le passage de SIMPLE \u00e0 COMPLET.<\/li>\n<li>Que devient mon journal en mode COMPLET si je ne le sauvegarde pas r\u00e9guli\u00e8rement.<\/li>\n<\/ol>\n<p>Le mode de r\u00e9cup\u00e9ration (<em>recovery model<\/em> en anglais) est une propri\u00e9t\u00e9 de base de donn\u00e9es qui va pr\u00e9ciser pour celle-ci deux choses essentielles:<\/p>\n<ol>\n<li>Le recyclage de l&#8217;espace consomm\u00e9 par les transactions valid\u00e9es dans son journal  de transactions.<\/li>\n<li>La possibilit\u00e9 ou non de pouvoir sauvegarder ces transactions valid\u00e9es.<\/li>\n<\/ol>\n<p>Il existe trois modes de r\u00e9cup\u00e9ration: <strong>FULL<\/strong>,<strong> SIMPLE <\/strong>et <strong>BULK-LOGGED<\/strong>.<\/p>\n<p><strong>FULL: <\/strong>c&#8217;est le mode par d\u00e9faut. Dans ce mode, toutes les transactions sont journalis\u00e9es, m\u00eame les  op\u00e9rations de modifications de masse (CREATE INDEX, BULK INSERT ou bcp.exe, SELECT INTO, et les op\u00e9rations sur les champs TEXT). D\u00e8s l&#8217;instant o\u00f9 il y a eu au moins une sauvegarde compl\u00e8te sur la base, les transactions valid\u00e9es restent dans le journal. La seule fa\u00e7on de recycler l&#8217;espace occup\u00e9 par ces transactions est de lancer r\u00e9guli\u00e8rement une sauvegarde du journal. Les transactions valid\u00e9es sont sauvegard\u00e9es dans un fichier et sont alors supprim\u00e9es du journal * .<\/p>\n<p><strong>SIMPLE: <\/strong>dans ce mode, le recyclage des transactions valid\u00e9es est la responsabilit\u00e9 du checkpoint. En plus de flusher sur disque les pages de donn\u00e9es modifi\u00e9es dans le cache de donn\u00e9es, le checkpoint supprime les transactions valid\u00e9es du journal sans les sauvegarder. Cons\u00e9quence de cel\u00e0, je n&#8217;ai pas la possibilit\u00e9 de sauvegarder mes transactions en mode SIMPLE. Je ne pourrai ex\u00e9cuter que des sauvegardes compl\u00e8tes ou diff\u00e9rentielles (ou de fichier en lecture seule).<\/p>\n<p><strong>BULK-LOGGED: <\/strong>c&#8217;est un mode \u00e0 combiner avec le mode FULL. Dans ce mode, les op\u00e9rations de modification de masse (cit\u00e9es plus haut) ne sont pas compl\u00e8tement journalis\u00e9es, et l&#8217;impact de telles op\u00e9rations sur le journal est limit\u00e9. Le fait de changer de FULL \u00e0 BULK-LOGGED ne modifie en rien ma fa\u00e7on de sauvegarder mes bases. En mode BULK-LOGGED, mes sauvegardes transactionnelles horaires continuent de s&#8217;ex\u00e9cuter sans probl\u00e8me. Tr\u00e8s utile lorsqu&#8217;on lance notre r\u00e9organisation des indexes hebdomadaire car on gagne un temps fou.<\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td bgcolor=\"#dddddd\"><em><strong>*: <\/strong>il existe au moins deux exceptions \u00e0 cette r\u00e8gle: si la base est principale dans une session de miroir synchrone et que le site miroir est injoignable, o\u00f9 si la base est publi\u00e9e dans le cadre d&#8217;une r\u00e9plication transactionnelle et que la distribution ou l&#8217;agent de lecture du journal sont injoignables \/ inactifs. Dans ces deux cas, les transactions en attente (non envoy\u00e9es au miroir, non \u00e9crites dans la base distribution) restent dans le journal et ne sont pas vid\u00e9es par les sauvegardes de transactions.<\/em><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Note: <\/strong>Attention \u00e0 ne pas confondre mode de r\u00e9cup\u00e9ration FULL et sauvegarde FULL.<\/p>\n<p><strong>Pour retrouver le mode de r\u00e9cup\u00e9ration d&#8217;une base:<\/strong><\/p>\n<pre><span>SELECT<\/span><span> DATABASEPROPERTYEX(<span>'maBase'<\/span>,<span>'RECOVERY'<\/span>) <span>as<\/span> RECOVERYMODE<\/span><\/pre>\n<p class=\"MsoNormal\"><strong>Pour changer le mode d&#8217;une base:<\/strong><\/p>\n<p class=\"MsoNormal\">\n<pre><span>ALTER<\/span><span> <span>DATABASE<\/span> maBase <span>SET<\/span> RECOVERY [ FULL | SIMPLE | BULK_LOGGED ]<\/span><\/pre>\n<p class=\"MsoNormal\">\n<p><strong>1) Premi\u00e8re remarque: il faudra obligatoirement (re)lancer une sauvegarde compl\u00e8te avant de sauvegarder le journal:<\/strong><br \/>\n&#8211; Quand je cr\u00e9\u00e9 ma base.<br \/>\n&#8211; Quand je passe de SIMPLE \u00e0 FULL.<\/p>\n<p>La sauvegarde de transaction a besoin d&#8217;un num\u00e9ro de transaction (LSN pour Log Sequence Number) de r\u00e9f\u00e9rence pour savoir \u00e0 partir de quelle transaction commencer sa sauvegarde. Lorsqu&#8217;il n&#8217;y a pas eu d&#8217;autre sauvegarde de transactions avant elle, comme c&#8217;est le cas quand je passe de SIMPLE \u00e0 FULL ou quand je viens de cr\u00e9er ma base, elle se base sur le LSN de fin de la derni\u00e8re sauvegarde compl\u00e8te dans le m\u00eame mode. Le fonctionnement pr\u00e9cis de la sauvegarde \u00e0 chaud fera l&#8217;objet d&#8217;un autre article prochainement.<\/p>\n<p>Pour le mettre en \u00e9vidence, cr\u00e9ons-nous une petite base CRASHTEST:<br \/>\n<span><br \/>\n<\/span><\/p>\n<pre><span>CREATE<\/span><span> <span>DATABASE<\/span> CRASHTEST<\/span><\/pre>\n<pre><span>on<\/span><span> <span>PRIMARY<\/span><\/span><\/pre>\n<pre><span>(NAME=<span>'CRASHTEST_data'<\/span>,<\/span><\/pre>\n<pre><span>FILENAME=<span>'F:\\KATMAI\\MSSQL10.KATMAI\\MSSQL\\DATA\\CRASHTEST_data.mdf'<\/span>,<\/span><\/pre>\n<pre><span>SIZE=100MB, MAXSIZE=500MB)<\/span><\/pre>\n<pre><span>LOG <span>ON<\/span><\/span><\/pre>\n<pre><span>(NAME=<span>'CRASHTEST_log'<\/span>,<\/span><\/pre>\n<pre><span>FILENAME=<span>'F:\\KATMAI\\MSSQL10.KATMAI\\MSSQL\\DATA\\CRASHTEST_log.ldf'<\/span>,<\/span><\/pre>\n<pre><span>SIZE=50MB,\r\nMAXSIZE=500MB)<\/span><\/pre>\n<p>V\u00e9rifions son mode de r\u00e9cup\u00e9ration:<\/p>\n<pre><span>SELECT<\/span><span> DATABASEPROPERTYEX(<span>'CRASHTEST'<\/span>,<span>'RECOVERY'<\/span>) <span>as<\/span> RECOVERYMODE<\/span><\/pre>\n<pre>RECOVERYMODE\r\n---------------------------------------------------------\r\nFULL<\/pre>\n<p>Cr\u00e9ons une petite transaction et essayons de la sauvegarder:<\/p>\n<pre><span>use<\/span><span> CRASHTEST<\/span><\/pre>\n<pre><span>create<\/span><span> <span>table<\/span> TABLE1 (A numeric <span>identity<\/span>, B varchar(5000))<\/span><\/pre>\n<pre><span>insert<\/span><span> <span>into<\/span> TABLE1 <span>values<\/span> (replicate(<span>'b'<\/span>,5000))<\/span><\/pre>\n<pre><span>backup<\/span><span> log CRASHTEST <span>to<\/span> disk=<span>'C:\\CRASHTEST.log1.trn'<\/span> <span>with<\/span><span> <\/span>init, stats<\/span><\/pre>\n<pre><span><em>Msg 4214, Level 16, State 1, Line 1<\/em><\/span><\/pre>\n<pre><span><em>\r\nBACKUP LOG cannot be performed because there is no current database backup.<\/em><\/span><\/pre>\n<p><span><em> <\/em><\/span><br \/>\nJ&#8217;ai donc effectivement besoin d&#8217;avoir une sauvegarde compl\u00e8te pour initialiser ma cha\u00eene:<\/p>\n<pre><span>backup<\/span><span> <span>database<\/span> CRASHTEST <span>to<\/span> disk=<span>'C:\\CRASHTEST.1.bak'<\/span> <span>with<\/span> init, stats<\/span><\/pre>\n<pre><span><em>Processed 152 pages for database 'CRASHTEST', file 'CRASHTEST_data' on file 1.\r\n100 percent processed.\r\nProcessed 1 pages for database 'CRASHTEST', file 'CRASHTEST_log' on file 1.\r\nBACKUP DATABASE successfully processed 153 pages in 0.266 seconds (4.711 MB\/sec).\r\n<\/em><\/span><\/pre>\n<p>OK, je retente de sauvegarder mon log:<\/p>\n<pre><span>backup<\/span><span> log CRASHTEST <span>to<\/span> disk=<span>'C:\\CRASHTEST.log1.trn'<\/span> <span>with<\/span><span> <\/span>init, stats<\/span><\/pre>\n<pre><span><em>100 percent processed.<\/em><\/span><\/pre>\n<pre><span><em>\r\nProcessed 6 pages for database 'CRASHTEST', file 'CRASHTEST_log' on file 1.<\/em><\/span><\/pre>\n<pre><span><em>\r\nBACKUP LOG successfully processed 6 pages in 0.161 seconds (0.283 MB\/sec).<\/em><\/span><\/pre>\n<p><span><em> <\/em><\/span><br \/>\nM\u00eame probl\u00e8me lorsque je passe de SIMPLE \u00e0 FULL:<\/p>\n<pre><span>ALTER<\/span><span> <span>DATABASE<\/span> CRASHTEST <span>set<\/span> RECOVERY SIMPLE<\/span><\/pre>\n<pre><span>ALTER<\/span><span> <span>DATABASE<\/span> CRASHTEST <span>set<\/span> RECOVERY <span>FULL<\/span><\/span><\/pre>\n<pre><span>backup<\/span><span> log CRASHTEST <span>to<\/span> disk=<span>'C:\\CRASHTEST.log2.trn'<\/span> <span>with<\/span> init, stats<\/span><\/pre>\n<pre><span><em>Msg 4214, Level 16, State 1, Line 1\r\nBACKUP LOG cannot be performed because there is no current database backup.<\/em><\/span><\/pre>\n<p><strong>2) SAUVEGARDEZ VOS TRANSACTIONS !<\/strong><\/p>\n<p>C&#8217;est un probl\u00e8me que l&#8217;on retrouve chez beaucoup de clients: grands comptes, PME&#8230; Il y a toujours chez eux au moins une base de donn\u00e9es en mode de r\u00e9cup\u00e9ration FULL dont le journal n&#8217;a JAMAIS \u00e9t\u00e9 sauvegard\u00e9. Ce n&#8217;est pas \u00e9tonnant en un sens puisque FULL est le mode par d\u00e9faut pour toutes les bases cr\u00e9\u00e9es par l&#8217;utilisateur. Le r\u00e9sultat est un fichier LDF qui fait 80 Gb parce qu&#8217;il contient une ann\u00e9e ou deux de transactions valid\u00e9es, sauvegard\u00e9es dans des backup FULL depuis belle lurette, mais on le r\u00e9p\u00e8te, en mode FULL, il n&#8217;y a qu&#8217;une sauvegarde de journal qui permet de recycler l&#8217;espace occup\u00e9 par des transactions valid\u00e9es.<\/p>\n<p>Reprenons notre base CRASHTEST, et cr\u00e9ons un peu de volum\u00e9trie&#8230;<\/p>\n<pre><span>USE<\/span><span> CRASHTEST<\/span><\/pre>\n<pre><span>declare<\/span><span> @cpt int<\/span><\/pre>\n<pre><span>set<\/span><span> @cpt=1<\/span><\/pre>\n<pre><span>while<\/span><span>(@cpt&lt;=50000)<\/span><\/pre>\n<pre><span>begin<\/span><\/pre>\n<pre><span>insert<\/span><span> <span>into<\/span> TABLE1 <span>values<\/span> (replicate(<span>'b'<\/span>,5000))<\/span><\/pre>\n<pre><span>set<\/span><span><span> <\/span>@cpt=@cpt+1<\/span><\/pre>\n<pre><span>end<\/span><\/pre>\n<pre><span>go<\/span><\/pre>\n<p>&#8230;et v\u00e9rifions quelle est la situation du journal \u00e0 l&#8217;issue:<\/p>\n<pre><span>DBCC<\/span><span> SQLPERF(LOGSPACE)<\/span><\/pre>\n<pre>Database Name       Log Size (Mb)    Log Space Used (%)      Status\r\n------------------  ---------------  ----------------------  --------\r\n(...)               (...)            (...)                   (...)\r\nCRASHTEST           253,3047         97,07731                0<\/pre>\n<p>Il a plus que quadrupl\u00e9 de volume et il est plein.<\/p>\n<p>Pour r\u00e9cup\u00e9rer l&#8217;espace sur le disque, il faudra faire un DBCC SHRINKFILE en mode TRUNCATEONLY.<br \/>\nSi je lance le DBCC SHRINKFILE tout de suite:<\/p>\n<p><span><br \/>\n<\/span><\/p>\n<pre><span>DBCC<\/span><span> SHRINKFILE(\u2019CRASHTEST_log\u2019,<span>'TRUNCATEONLY\u2019)<\/span><\/span><\/pre>\n<pre>Dbid        Fileid        CurrentSize        MinimumSize    UsedPages         EstimatedPages\r\n---------   ----------- ----------------  ---------------- ---------------   ------------------\r\n8           2            31680            6400             31680             6400<\/pre>\n<p>31680*8192Kb = 247,5 Mb, autant dire que presque rien n&#8217;a \u00e9t\u00e9 fait. Cel\u00e0 vient du fait que le TRUNCATEONLY tronque la taille du fichier jusqu&#8217;au dernier extent allou\u00e9.<br \/>\nComme mon journal est plein, le dernier extent allou\u00e9 est pr\u00e9cis\u00e9ment \u00e0 la fin du fichier.<\/p>\n<p>Donc il faut commencer par vider ce journal: je sauvegarde ma transaction :<\/p>\n<pre><span>backup<\/span><span> log CRASHTEST <span>to<\/span> disk=<span>'C:\\CRASHTEST.log3.trn'<\/span> <span>with<\/span> init, stats, compression<\/span><\/pre>\n<pre><span>go<\/span><\/pre>\n<pre><span>\r\n100 percent processed.<\/span><\/pre>\n<pre><span>\r\nProcessed 31461 pages for database 'CRASHTEST', file 'CRASHTEST_log' on file 3.<\/span><\/pre>\n<pre><span>\r\nBACKUP LOG successfully processed 31461 pages in 16.391 seconds (15.723 MB\/sec).<\/span><\/pre>\n<p><span> <\/span><br \/>\nDans mon journal&#8230;<\/p>\n<pre><span>DBCC<\/span><span> SQLPERF(LOGSPACE)<\/span><\/pre>\n<pre>Database Name        Log Size (Mb)    Log Space Used (%)      Status\r\n------------------   ---------------  ----------------------  --------\r\n(...)                (...)            (...)                   (...)\r\nCRASHTEST            247,4922         4,201521                 0<\/pre>\n<p>Je retrouve mon enveloppe \u00e0 247,5Mb, et cette fois elle est bien vide. Je vais pouvoir ramener mon log \u00e0 sa taille d&#8217;origine:<\/p>\n<pre><span>DBCC<\/span><span> SHRINKFILE(\u2019CRASHTEST_log\u2019,<span>'TRUNCATEONLY\u2019)<\/span><\/span><\/pre>\n<p><span><br \/>\n<\/span><\/p>\n<pre>Dbid        Fileid        CurrentSize        MinimumSize    UsedPages         EstimatedPages\r\n---------   ----------- ----------------  ---------------- ---------------   ------------------\r\n8           2            6400               6400            6400              6400<\/pre>\n<p>Attention, si je choisis de rester en mode FULL, je devrai programmer des sauvegardes de transactions (\u00e0 travers le SQL Agent par exemple).<\/p>\n<p>Dans le cas o\u00f9 ce journal fait plusieurs dizaines de Gb, je choisis de le vider en passant la base en mode SIMPLE:<\/p>\n<pre><span lang=\"EN-GB\">ALTER<\/span><span lang=\"EN-GB\"> <span>DATABASE<\/span> CRASHTEST <span>SET<\/span> RECOVERY SIMPLE<\/span><\/pre>\n<p>Un checkpoint initi\u00e9 d\u00e8s la fin de l&#8217;ALTER se chargera de vider le contenu du journal, et il ne restera plus qu&#8217;\u00e0 faire le SHRINKFILE.<\/p>\n<p>A suivre l&#8217;effet du BULK-LOGGED sur la taille du journal&#8230;<\/p>\n<p>[ David B. ]<\/p>\n<p> <script type=\"text\/javascript\" src=\"https:\/\/tcr.tynt.com\/javascripts\/Tracer.js?user=d4FlbGI04r35lZadbi-bpO\"><\/script><\/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%2F5&#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%2F5&#038;title=Modes%20de%20r%C3%A9cup%C3%A9ration%20et%20journal%20de%20transactions%2C%20%C3%A9pisode%201\" 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=Modes%20de%20r%C3%A9cup%C3%A9ration%20et%20journal%20de%20transactions%2C%20%C3%A9pisode%201&#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%2F5\" 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>Une petite s\u00e9rie de posts sur les diff\u00e9rents modes de r\u00e9cup\u00e9ration des bases sous SQL Server 2005\/2008, et leur impact sur le journal de transactions. Dans ce premier \u00e9pisode: Qu&#8217;implique le passage de SIMPLE \u00e0 COMPLET. Que devient mon journal&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":7995,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,450],"tags":[11,12,7],"class_list":["post-5","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sqlserver","category-vintage","tag-journal-de-transactions","tag-mode-de-recuperation","tag-sauvegarde-et-restauration"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1 - 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\/modes-de-recuperation-et-journal-de-transactions-episode-1\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1 - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"Une petite s\u00e9rie de posts sur les diff\u00e9rents modes de r\u00e9cup\u00e9ration des bases sous SQL Server 2005\/2008, et leur impact sur le journal de transactions. Dans ce premier \u00e9pisode: Qu&#8217;implique le passage de SIMPLE \u00e0 COMPLET. Que devient mon journal&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2008-06-13T13:16:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-20T06:03:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2008\/06\/journal-enroul\u00e9-10858553.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1300\" \/>\n\t<meta property=\"og:image:height\" content=\"1390\" \/>\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=\"7 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\/modes-de-recuperation-et-journal-de-transactions-episode-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/\"},\"author\":{\"name\":\"David Baffaleuf\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\"},\"headline\":\"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1\",\"datePublished\":\"2008-06-13T13:16:18+00:00\",\"dateModified\":\"2023-04-20T06:03:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/\"},\"wordCount\":1053,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"journal de transactions\",\"mode de r\u00e9cup\u00e9ration\",\"Sauvegarde &amp; Restauration\"],\"articleSection\":[\"SQL Server\",\"Vintage\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/\",\"name\":\"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1 - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2008-06-13T13:16:18+00:00\",\"dateModified\":\"2023-04-20T06:03:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1\"}]},{\"@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":"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1 - 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\/modes-de-recuperation-et-journal-de-transactions-episode-1\/","og_locale":"fr_FR","og_type":"article","og_title":"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1 - Capdata TECH BLOG","og_description":"Une petite s\u00e9rie de posts sur les diff\u00e9rents modes de r\u00e9cup\u00e9ration des bases sous SQL Server 2005\/2008, et leur impact sur le journal de transactions. Dans ce premier \u00e9pisode: Qu&#8217;implique le passage de SIMPLE \u00e0 COMPLET. Que devient mon journal&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2008-06-13T13:16:18+00:00","article_modified_time":"2023-04-20T06:03:10+00:00","og_image":[{"width":1300,"height":1390,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2008\/06\/journal-enroul\u00e9-10858553.jpg","type":"image\/jpeg"}],"author":"David Baffaleuf","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"David Baffaleuf","Dur\u00e9e de lecture estim\u00e9e":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/"},"author":{"name":"David Baffaleuf","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf"},"headline":"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1","datePublished":"2008-06-13T13:16:18+00:00","dateModified":"2023-04-20T06:03:10+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/"},"wordCount":1053,"commentCount":1,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["journal de transactions","mode de r\u00e9cup\u00e9ration","Sauvegarde &amp; Restauration"],"articleSection":["SQL Server","Vintage"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/","url":"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/","name":"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1 - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2008-06-13T13:16:18+00:00","dateModified":"2023-04-20T06:03:10+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/modes-de-recuperation-et-journal-de-transactions-episode-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Modes de r\u00e9cup\u00e9ration et journal de transactions, \u00e9pisode 1"}]},{"@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\/5","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=5"}],"version-history":[{"count":16,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/5\/revisions"}],"predecessor-version":[{"id":9520,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/5\/revisions\/9520"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/7995"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}