Как мне выпустить базу данных sql express? - PullRequest
1 голос
/ 26 ноября 2008

У меня есть простое приложение, которое использует базу данных SQL Express 2005. Когда пользователь закрывает приложение, я хочу дать возможность сделать резервную копию базы данных, сделав копию в другом каталоге. Однако, когда я пытаюсь это сделать, я получаю «Процесс не может получить доступ к файлу« ... \ Pricing.MDF », потому что он используется другим процессом». Я закрыл соединение, удалил соединение, установил его на ничто и GC.Collect (), но это не имеет значения. Моя строка подключения: «Источник данных =. \ SQLEXPRESS2005; AttachDbFilename = | DataDirectory | \ Pricing.mdf; Интегрированная безопасность = True; Пользовательский экземпляр = True», и я просто продолжаю использовать одно и то же подключение во всем. Я не видел, где можно отсоединить базу данных для противодействия присоединению в строке подключения.

1 - Как мне выпустить вещь? 2 - Есть ли лучший способ, чем просто копирование базы данных? Приложение предназначено только для моего мужа, поэтому я смогу справиться с ним, если ему действительно потребуется восстановление из резервной копии.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 26 ноября 2008

Вы не хотите копировать mdf напрямую, потому что SQL сохраняет большинство изменений в журнале транзакций, посмотрите на измененное время после выполнения некоторых запросов, он не записывает напрямую в файл. Я заметил это при настройке задания rsync.

Использование SQL для создания резервной копии намного безопаснее и предпочтительнее, для однопользовательского или многопользовательского режима. Вы можете предоставить ссылку на функцию, вызывающую T-SQL, которую вы можете полностью автоматизировать для исходной базы данных и папки назначения:

BACKUP DATABASE [mydatabasename]
TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Scheduled Task Backups\mydatabasename-backup' WITH NOFORMAT, NOINIT,  NAME = N'mydatabasename-Full Data

SQL 2005 ввел другой синтаксис T-SQL, чтобы сделать это, на всю жизнь я не могу его найти. Но есть способы сделать это через M $$ SQL, не имея полноценного сервера баз данных.

0 голосов
/ 26 ноября 2008

Если это однопользовательский или приложение или база данных только для чтения, не используйте SQL Server Express . Это то, для чего SQL Server Compact. Это решит проблему резервного копирования и упростит развертывание.

0 голосов
/ 26 ноября 2008

В этом посте есть пример , в котором показано, как выполнить резервное копирование базы данных SQL Express в программе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...