Скопируйте базу данных с одного сервера на другой, используя c # - PullRequest
3 голосов
/ 19 января 2011

Я пытаюсь создать приложение для Windows, которое копирует базу данных с одного сервера на другой, используя объект Transfer, но в результате возникает ошибка «Компонент служб Integration Services не установлен или у вас нет разрешения на его использование».на обоих серверах установлена ​​корпоративная версия sql server 2005 и установлен компонент служб интеграции, у логинов подключений также есть полные разрешения.Я действительно не знаю, что здесь не так

            Server backFromServer = new Server(@"xx.xx.xx.xx");
            Server backToServer = new Server(@"xx.xx.xx.xx");
            backFromServer.ConnectionContext.LoginSecure = false;
            backFromServer.ConnectionContext.Login = "username";
            backFromServer.ConnectionContext.Password = "password";



            backToServer.ConnectionContext.LoginSecure = false;
            backToServer.ConnectionContext.Login = "username";
            backToServer.ConnectionContext.Password = "password";


            Database backFromDb = new Database();
            backFromDb = backFromServer.Databases["databasesource"];

            Database backToDb = new Database();
            backToDb = backToServer.Databases["databasedest"];

            EventLog.WriteEntry(eventLogSource,"Loading databases successful!", EventLogEntryType.Information);

            Transfer dataTransfer = new Transfer(backFromDb);
            dataTransfer.CopyAllTables = true;
            dataTransfer.CopyAllObjects = false;
            dataTransfer.CopyData = true;
            dataTransfer.CopyAllUserDefinedDataTypes = true;
            dataTransfer.CopyAllStoredProcedures = false;

            dataTransfer.DropDestinationObjectsFirst = true;

            dataTransfer.Options.WithDependencies = false;

            dataTransfer.DestinationServer = backToServer.Name;
            dataTransfer.DestinationDatabase = backToDb.Name;
            dataTransfer.DestinationLoginSecure = false;
            dataTransfer.DestinationLogin = "username";
            dataTransfer.DestinationPassword = "password";


            EventLog.WriteEntry(eventLogSource,"Transfer configuration successful, starting to transfer!", EventLogEntryType.Information);

            dataTransfer.TransferData();//here causes the error

            EventLog.WriteEntry(eventLogSource, "Transfer successful!", EventLogEntryType.Information);

Мне удалось найти решение, поэтому приложение делает это: шаг 1. резервное копирование базы данных в файл .bak с помощью класса Backup

 Server backFromServer = new Server(@"server");
            backFromServer.ConnectionContext.LoginSecure = false;
            backFromServer.ConnectionContext.Login = "un";
            backFromServer.ConnectionContext.Password = "psd";
            Database backFromDb = new Database();
            backFromDb = backFromServer.Databases["dbname"];

            Backup bkpDatabase = new Backup();
            bkpDatabase.Action = BackupActionType.Database;
            bkpDatabase.Database = backFromDb.Name;
            bkpDatabase.Incremental = false;
            bkpDatabase.LogTruncation = BackupTruncateLogType.Truncate;
            bkpDatabase.Initialize = true;

            BackupDeviceItem bkpDevice = new BackupDeviceItem(@"c:\backup.bak", DeviceType.File);

            bkpDatabase.Devices.Add(bkpDevice);
            bkpDatabase.SqlBackup(backFromServer);

            EventLog.WriteEntry(eventLogSource, "Create database backup file successful!", EventLogEntryType.Information);

шаг 2. Поскольку файл находится на исходном сервере, загрузите файл.шаг 3. восстановить базу данных с помощью t-sql.Шаг 4. Запустите запланированное задание, которое запускает приложение ежедневно.Вот сценарий t-sql: ИСПОЛЬЗОВАТЬ мастер ALTER DATABASE [DBName] SET Single_User WITH Немедленный откат Восстановление базы данных [DBName] FROM DISK = N'filepath 'с REPLACE, FILE = 1, NOUNLOAD, STATS = 10 ALTER DATABASE [DBName]Multi_User

Ответы [ 4 ]

5 голосов
/ 19 января 2011

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

2 голосов
/ 19 января 2011

Не могли бы вы создать объект команды sql с помощью следующей команды?

BACKUP DATABASE DatabaseName
TO DISK = 'path\DatabaseName_Backup.bak'
WITH FORMAT, COPY_ONLY

и затем восстановите, используя

RESTORE DATABASE SomeDatabase
  FROM DISK = 'path\DatabaseName_Backup.bak' 
  WITH FILE=1, 
    NORECOVERY;
0 голосов
/ 18 июня 2014

Вы можете использовать объекты управления сервером Sql:

http://technet.microsoft.com/en-us/library/Microsoft.SqlServer.Management.Smo.aspx

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

0 голосов
/ 19 января 2011

Есть ли на компьютере, на котором вы работаете , приложение установлено?

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