Использование SMO для изменения расположения базы данных SQL Server по умолчанию - PullRequest
4 голосов
/ 02 декабря 2010

Я использую следующий код для изменения местоположения базы данных сервера по умолчанию (где SQL Server хранит новые файлы базы данных и файлы журнала):

using Microsoft.SqlServer.Management.Smo;

Server smoServer = new Server(new ServerConnection(server, username, password));
server.DefaultFile = newPath;
server.Alter();
server.Refresh();

// Now create a database in the new location
Database smoDatabase = new Database(smoServer, database);
smoDatabase.Create();
smoServer.Refresh();

Вот моя проблема: я могу заглянуть в SQL Server Management Studio и увидеть, что свойство сервера для расположений базы данных по умолчанию было изменено на newPath. Однако когда я использую SMO для создания новой базы данных, новая база данных и файл журнала создаются по старому пути.

После перезапуска экземпляра SQL Server код SMO создает базу данных / файл журнала по новому пути.

Есть идеи, почему у меня такое поведение?

Редактировать: Одно из предложений состоит в том, что изменение фактически не происходит до тех пор, пока экземпляр сервера Sql не будет перезапущен. Однако если я открою SSMS и создам новую базу данных на экземпляре, она будет создана по новому пути без перезапуска .

1 Ответ

6 голосов
/ 03 декабря 2010

Вам необходимо явно добавить информацию о файлах данных и журналов:

// Now create a database in the new location
Database smoDatabase = new Database(smoServer, database);

FileGroup fg = new FileGroup(smoDatabase, "PRIMARY");
DataFile df = new DataFile(fg, "File1", @"c:\sql\file1.mdf");
LogFile lf = new LogFile(smoDatabase, "Log01", @"c:\sql\Log1.ldf");


smoDatabase.Create();
smoServer.Refresh();
...