2013-04-21 1 views
0

У меня есть файл, содержащий резервную копию базы данных SQL Server 2012. Я использую этот файл с приложением C# WinForms, которое создает базу данных, восстанавливает в нее резервную копию и затем выполняет некоторые другие функции.C#: восстановление базы данных SQL Server из резервной копии внутри встроенного ресурса

Я не хочу просто добавлять этот файл резервной копии в свое приложение, потому что это проблема с безопасностью. Я думал, что должен добавить резервную копию в качестве встроенного ресурса, а затем сохранить его в временном файле, восстановить его и удалить.

Есть ли лучший способ сделать это? Есть ли способ получить доступ к встроенному ресурсу напрямую через путь к файлу, который я могу передать серверу SQL для использования в команде RESTORE DATABASE?

ответ

1

SQL Server не имеет понятия о том, как восстановить базу данных из чего-то, живущего внутри исполняемого файла. Учитывая, что вы заявили, что считаете, что можете быть встроенным ресурсом, я собираюсь предположить, что это не «последняя известная хорошая» резервная копия, а больше «резервная копия по умолчанию».

Если я прав в этом мышлении, вы в основном говорите, что у вас есть настройка по умолчанию. Если это так, вам вообще не нужна резервная копия, ваш код просто должен иметь возможность создавать базу данных и заполнять ее определенными вещами, чтобы «стать» этим состоянием по умолчанию. Встраивая резервную копию в качестве ресурса, вы (на мой взгляд) заявляете, что структура и данные хорошо известны, поэтому зачем вообще идти по пути RESTORE DATABASE?

+0

MooJuice - вы правы в своих предположениях. – user884248

+0

Я мог бы сделать то, что вы предлагаете, но эта база данных по умолчанию содержит несколько сотен таблиц, тысячи хранимых процедур и несколько наборов строк встроенных данных. Гораздо проще управлять как реальной базой данных. Поэтому, когда пришло время развертывания, гораздо проще создать резервную копию и сохранить ее где-нибудь, чем создать скрипт, который будет содержать десятки тысяч строк кода, и проверять его каждый раз. Кроме того, я уверен, что запуск сценария займет больше времени, чем восстановление. Также ... в общем, дело с выполнением кода кажется скорее головной болью, чем восстановлением. – user884248

+1

@ user884248, хорошо, что вы делаете хорошую точку, если база данных такая же большая, как вы говорите. Вы * можете * сохранить его как двоичный ресурс, а затем записать его на диск для SQL Server, чтобы найти (а затем удалить его), но это сделает исполняемый файл непристойно огромным только для разовой вещи. Другой вариант может заключаться в том, чтобы иметь его в зашифрованном zip-файле, который вы можете извлечь при запуске и сделать то же самое. Не безупречный и, безусловно, взломанный, но что бы вы ни делали - если вы развертываете базу данных при настройке, это будет проблемой, если безопасность будет рассмотрена. –