Как автоматически сжать и восстановить базу данных Access 2007? - PullRequest
0 голосов
/ 27 июня 2010

У меня есть сайт, использующий классический ASP, и база данных в формате Access 2007 (.accdb). Он зашифрован с помощью пароля и имеет размер около 300 МБ.

Сайт работает нормально сам по себе, но время от времени база данных повреждается (ошибка «нераспознанный формат базы данных»). Это можно легко исправить, открыв базу данных в MS Access, после чего она будет починена. Проблема в том, что может пройти несколько дней, прежде чем я обнаружу, что база данных повреждена, и в течение этого времени сайт будет бесполезен. Иногда между коррупцией уходит месяцы, а иногда неделя или две.

Я хочу, чтобы сайт мог время от времени вызывать саму функцию «Сжатие и восстановление базы данных» (раз в день или около того), чтобы поддерживать базу данных в рабочем состоянии.

У меня вопрос: как мне это сделать, заставить его починить сам?

Я нашел эту статью: Как сжать и восстановить базу данных ACCESS 2007 с помощью кода .NET? ... но я не понимаю, как я могу сделать это для меня. Я знаю только классический ASP и Java.

Может кто-нибудь написать небольшой изолированный ASP-код, который делает это: «открыть соединение с базой данных, защищенной паролем», «восстановить базу данных», «закрыть соединение».

Сайт и база данных находятся на выделенном сервере, который я полностью контролирую, поэтому я могу реализовать любое существующее решение.

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 28 июня 2010

Может ли SQL Server Express иметь юридическую лицензию для использования на веб-сервере? Если так, то я бы предложил перенести ваши данные в него. Если нет, есть другие варианты, упомянутые в другом месте. На следующей странице SQL Server 2008 Express я вижу упоминание об установщике веб-платформы, чтобы вы могли использовать его на веб-сервере. Но я не интерпретирую EULA, поэтому оставляю это решение вам.

0 голосов
/ 30 июня 2010

Я получил ответ, который мне нужен, в другом вопросе, который я задал: Почему я не могу использовать "CompactDatabase" в DAO.DBEngine.36 с помощью VBscript?

Пользователь "HansUp"дал мне следующий код:

Dim objFSO 
Dim objEngine 
Dim strLckFile 
Dim strSrcName 
Dim strDstName 
Dim strPassword</p>

<p>strLckFile =  "C:\Access\webforums\foo.laccdb" 
strSrcName =  "C:\Access\webforums\foo.accdb" 
strDstName =  "C:\Access\webforums\compacted.accdb" 
strBackup = "C:\Access\webforums\foobackup.accdb" 
strPassword = "foo"</p>

<p>Set objEngine = CreateObject("DAO.DBEngine.120")</p>

<p>Set objFSO = CreateObject("Scripting.FileSystemObject") 
If Not (objFSO.FileExists(strLckFile)) Then 
    If (objFSO.FileExists(strBackup)) Then 
        objFSO.DeleteFile strBackup 
    End If 
    If (objFSO.FileExists(strDstName)) Then 
        objFSO.DeleteFile strDstName 
    End If 
    objFSO.CopyFile strSrcName, strBackup</p>

<pre><code>''dbVersion120 = 128  
objEngine.CompactDatabase strSrcName, strDstName, , 128, ";pwd=" & strPassword

objFSO.DeleteFile strSrcName 
objFSO.MoveFile strDstName, strSrcName 

End If 'LckFile

(Код получил несколько дополнительных разрывов строк, когда я по какой-то причине его скопировалперейдите по ссылке в начале этого поста для получения более чистой версии кода, если хотите.)

Он сжимает базу данных Access 2007 в базу данных Access 2007 (без изменения формата) И также восстанавливает любыекоррупция (несовместимое состояние) в базе данных!Как раз то, что я искал.=)

0 голосов
/ 27 июня 2010

Вы можете написать скрипт, который время от времени восстанавливает базу данных.Но есть две проблемы:

1) Как обнаружить поврежденную базу данных 2) Как минимизировать потерю данных.

Самая большая проблема заключается в том, что вы пытаетесь решить проблему, которая лежитсама база данных доступа (частое повреждение данных).Из-за этого продукт не подходит для любого серьезного применения.Так почему бы вам не перейти на более надежную базу данных?(MS SQL, MYSQL, ORACLE, SQL Lite и другие на выбор).

...