Можно делать то, что вы просите программно. Это шаги:
- Проверьте, существует ли ваша база данных "source_test", и если да, удалите ее.
- Подключение к вашей исходной базе данных,
- Создать резервную копию исходной базы данных
- Восстановление исходной базы данных в базу данных «source_test» при переименовании файлов фактической базы данных
- Выполнить хранимую процедуру утилиты SQL Server,
exec sp_msforeachtable 'truncate table ?'
Это создает схематически идентичную базу данных вашей «исходной» базы данных с именем «source_test». Все триггеры, ограничения, хранимые процедуры, учетные записи SQL Server и все остальные биты данных, которые не являются содержимым таблицы данных или порядковыми номерами, сохраняются. Все порядковые номера будут сброшены к значению по умолчанию, когда их таблицы будут обрезаны.
Мы используем эти 5 шагов для клонирования наших собственных баз данных SQL Server для тестирования и других целей. Это работает на SQL Server 2000 вперед.
Для резервного копирования базы данных вы выполняете оператор SQL в виде:
"Backup database " + kstrDbName + " to disk = '" + strFullyPathedBackupFile + "' With Init";
«With Init» - это ключевой параметр, который указывает SQL Server перезаписывать указанный файл, если он существует. Дополнительную информацию можно найти, просмотрев документацию по SQL Server для «Резервная копия базы данных».
В SQL Server 2005 и новее вы можете использовать SMO для восстановления базы данных и указать новое имя базы данных, а также переименовать файлы базы данных (mdf и файл журнала). Пример кода того, как это сделать, можно найти в документации SMO Microsoft SQL Server о функции восстановления.
В SQL Server 2000 поддержка SMO отсутствует, поэтому это необходимо сделать вручную с помощью выполненных операторов SQL. Это принимает форму заявления, похожую на:
string strSQL = "Restore database " + strDatabaseName + "from disk = '" + strSourcePathFile + "' with replace, " +
" Move '" + strDatabaseName + "_Data' to '" + strDestinationPathFile + ".MDF', " +
" Move '" + strDatabaseName + "_Log' to '" + strDestinationPathFile + ".LOG' "
Затем вы используете оператор Alter, чтобы переименовать фактические файлы MDF и LOG, чтобы они соответствовали новому имени. Да, это означает, что в SQL Server 2000 у вас не может быть исходной базы данных и целевой базы данных. Сожалею. Возможно, можно будет сделать переименование файла MDF и LOG одновременно с восстановлением, но если это так, моя команда не сможет заставить его работать. Мы перешли к новым базам данных SQL Server, но я подумал, что для полноты ответа на этот вопрос я потяну старый код.
Оператор alter имеет вид:
string AlterDbSQL = " Alter database " + strDatabaseName + " MODIFY FILE(NAME = " + Path.GetFileNameWithoutExtension( strDestinationPathFile ) + "_DATA, NEWNAME = " + strDatabaseName + "_Data) " +
" Alter database " + strDatabaseName + " MODIFY FILE(NAME = " + Path.GetFileNameWithoutExtension( strDestinationPathFile ) + "_LOG, NEWNAME = " + strDatabaseName + "_LOG) "
Некоторые примечания: если все, что вас интересует, это создание тестовой базы данных, то вам не нужно каждый раз выполнять шаг 2 (подключение к источнику) и шаг 3 (создание резервной копии). Просто создайте «шаблонную» резервную копию вашей текущей базы данных, с которой вы хотите протестировать, создав резервную копию, восстановив ее, а затем обрезав таблицы. Резервное копирование этой базы данных. Теперь у вас есть резервная копия очищенной версии базы данных. Это будет меньшая резервная копия, поэтому она будет быстрее копировать и быстрее восстанавливать. Все, что вам нужно сделать, это добавить данные теста, и он готов к тестированию.