wal*_*ter 3 .net c# database sql-server
我正在尝试创建一个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);
Run Code Online (Sandbox Code Playgroud)
我设法找到了解决方案,以便应用程序执行此操作:步骤1.使用Backup类将数据库备份到.bak文件中
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);
Run Code Online (Sandbox Code Playgroud)
步骤2.由于文件位于源服务器中,请下载该文件.步骤3.使用t-sql恢复数据库.步骤4.启动每天运行应用程序的计划任务.这是t-sql脚本:USE master ALTER DATABASE [DBName] SET Single_User WITH Rollback立即RESTORE DATABASE [DBName] FROM DISK = N'filepath'WOR REPLACE,FILE = 1,NOUNLOAD,STATS = 10 ALTER DATABASE [DBName] SET多用户
创建一个sql作业,通过执行备份和恢复,日志传送,SQL复制等来完成工作.听起来不像你想通过每天运行的应用程序解决的问题而是sql作业,这将是更可靠,免费获得监控,诊断,更不用说您需要以高权限运行您的应用程序,这本身就是一种不好的做法,也是一种麻烦.