mssql 数据库还原
来源:互联网 发布:php幸运大转盘源码 编辑:程序博客网 时间:2024/04/28 17:23
/// <summary> /// 数据库还原 /// </summary> /// <param name="DataBaseName">数据库名</param> /// <param name="DataBaseRestorePath">还原文件路径</param> /// <returns>1还原成功;-1还原失败</returns>public static int DataBaseRestore(string DataBaseName, string DataBaseRestorePath) { string DataBaseConn = ConfigurationManager.ConnectionStrings["DataBaseConnString"].ConnectionString; SqlConnection sqlConn = new SqlConnection(DataBaseConn); SqlCommand sqlComm = new SqlCommand(); sqlComm.Connection = sqlConn; try { sqlComm.CommandText = "use [" + DataBaseName + "];select filename,groupid from sysfiles"; sqlConn.Open(); string db_data_filename = "", db_log_filename=""; SqlDataReader reader = sqlComm.ExecuteReader(); while (reader.Read()) //获取物理文件路径 { if (reader["groupid"].ToString() == "1") { db_data_filename = reader["filename"].ToString().Trim(); } if (reader["groupid"].ToString() == "0") { db_log_filename = reader["filename"].ToString().Trim(); } } reader.Close(); //获取逻辑名字 string lj_data = "", lj_log = ""; sqlComm.CommandText = "restore filelistonly from disk='" + DataBaseRestorePath + "'"; reader = sqlComm.ExecuteReader(); while (reader.Read()) //获取物理文件路径 { if (reader["Type"].ToString() == "D") { lj_data = reader["logicalName"].ToString().Trim(); } if (reader["Type"].ToString() == "L") { lj_log = reader["logicalName"].ToString().Trim(); } } reader.Close(); string loginName = DataBaseName;//默认登录帐号名和数据库名相同 string strSql = String.Format(@"use masterdeclare @s nvarchar(1000)declare tb cursor localforselect N'kill '+cast(spid as varchar)from master..sysprocesseswhere dbid=db_id('{0}')open tbfetch next from tb into @swhile @@fetch_status=0beginexec(@s)fetch next from tb into @sendclose tbdeallocate tbRESTORE DATABASE [{0}] FROM DISK='{6}' WITH MOVE '{2}' TO '{4}', MOVE '{3}' TO '{5}',STATS = 10,REPLACEuse [{0}]--添加用户和权限exec sp_grantdbaccess N'{1}'exec sp_addrolemember N'db_accessadmin',N'{1}'exec sp_addrolemember N'db_securityadmin',N'{1}'exec sp_addrolemember N'db_ddladmin',N'{1}'exec sp_addrolemember N'db_backupoperator',N'{1}'exec sp_addrolemember N'db_datareader',N'{1}' exec sp_addrolemember N'db_datawriter',N'{1}'--替换对象所有者EXEC sp_MSforeachtable 'exec sp_changeobjectowner ''?'',''{1}'''DECLARE @OldOwner as NVARCHAR(128)DECLARE @NewOwner as NVARCHAR(128)select @OldOwner='?'select @NewOwner='{1}'DECLARE @Name as NVARCHAR(128) DECLARE @Owner as NVARCHAR(128) DECLARE @OwnerName as NVARCHAR(128) DECLARE curObject CURSOR FOR select 'Name'= name, 'Owner'= user_name(uid) from sysobjects where user_name(uid)=@OldOwner order by name OPEN curObject FETCH NEXT FROM curObject INTO @Name, @Owner WHILE(@@FETCH_STATUS=0) BEGIN if @Owner=@OldOwnerbegin set @OwnerName=@OldOwner+'.'+rtrim(@Name) exec sp_changeobjectowner @OwnerName, @NewOwner endFETCH NEXT FROM curObjec INTO @Name, @Owner END close curObject deallocate curObject ", DataBaseName, loginName, lj_data, lj_log, db_data_filename, db_log_filename, DataBaseRestorePath); sqlComm.CommandText = strSql; sqlComm.ExecuteNonQuery(); Assistant.WriteLog(strSql); return 1; } catch (Exception exc) { Assistant.WriteLog("MsSql DataBaseRestore " + exc.ToString()); return -1; } finally { sqlConn.Close(); } }
写的一个测试例子,^_^,记录下
- mssql 数据库还原
- mssql备份还原数据库语句
- MSSQL数据库备份与还原及常见问题
- 备份、还原MSSQL数据库的方法
- C#代码备份还原MSSQL数据库
- MSSQL还原数据库失败
- C#代码备份还原MSSQL数据库
- Mssql数据库的备份还原与删除日志
- MSSQL杀死连接待还原数据库的所有进程
- mssql 数据库与日志的备份 与还原
- 多种还原.bak数据库文件方式-Mssql数据库教程
- .net mssql自己封装的 备份/还原 数据库方法
- MSSQL Server 数据库备份还原常用SQL语句及注意
- SQL总结之数据库备份与还原(MSSQL)
- MSSQL数据还原
- MSSQL还原备份相关
- [MSSQL]事务日志还原
- MSSQL还原数据库失败 不能选择文件或文件组 Microsoft SQL Server, 错误:3219
- 301 Redirect 资源永久重定向的实现方法
- 自学篇-进制转换(一)
- POJ 1200 Crazy Search hash水题
- 递归
- 【ORACLE】oracle9i/10g/11g各种下载
- mssql 数据库还原
- 获取每一帧的长度
- shell排序 类似于插入排序
- Linux Shell中判断某个环境变量是否存在以及获取某个环境变量的值
- mysql 命令
- python之异常处理
- VC++/MFC 小程序 文件/目录对话框 递归遍历文件/文件夹
- 一些iOS高效开源类库
- 快速排序