Я пытаюсь создать приложение для 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