zoukankan
html css js c++ java
C# 数据库备份及还原
1
. 在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列出指定服务器的所有数据库,实现代码如下:
取得数据库服务器列表:
public
ArrayList GetServerList()
{
ArrayList alServers
=
new
ArrayList() ;
SQLDMO.Application sqlApp
=
new
SQLDMO.ApplicationClass() ;
try
{
SQLDMO.NameList serverList
=
sqlApp.ListAvailableSQLServers() ;
for
(
int
i
=
1
;i
<=
serverList.Count;i
++
)
{
alServers.Add(serverList.Item(i)) ;
}
}
catch
(Exception e)
{
throw
(
new
Exception(
"
取数据库服务器列表出错:
"
+
e.Message)) ;
}
finally
{
sqlApp.Quit() ;
}
return
alServers ;
}
取得指定数据库服务器的数据库列表
public
ArrayList GetDbList(
string
strServerName,
string
strUserName,
string
strPwd)
{
ServerName
=
strServerName ;
UserName
=
strUserName ;
Password
=
strPwd ;
ArrayList alDbs
=
new
ArrayList() ;
SQLDMO.Application sqlApp
=
new
SQLDMO.ApplicationClass() ;
SQLDMO.SQLServer svr
=
new
SQLDMO.SQLServerClass() ;
try
{
svr.Connect(ServerName,UserName,Password) ;
foreach
(SQLDMO.Database db
in
svr.Databases)
{
if
(db.Name
!=
null
)
alDbs.Add(db.Name) ;
}
}
catch
(Exception e)
{
throw
(
new
Exception(
"
连接数据库出错:
"
+
e.Message)) ;
}
finally
{
svr.DisConnect() ;
sqlApp.Quit() ;
}
return
alDbs ;
}
2
. 数据库的备份和实时进度显示代码:
public
bool
BackUPDB(
string
strDbName,
string
strFileName, ProgressBar pgbMain)
{
PBar
=
pgbMain ;
SQLDMO.SQLServer svr
=
new
SQLDMO.SQLServerClass() ;
try
{
svr.Connect(ServerName,UserName,Password) ;
SQLDMO.Backup bak
=
new
SQLDMO.BackupClass();
bak.Action
=
0
;
bak.Initialize
=
true
;
SQLDMO.BackupSink_PercentCompleteEventHandler pceh
=
new
SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
bak.PercentComplete
+=
pceh;
bak.Files
=
strFileName;
bak.Database
=
strDbName;
bak.SQLBackup(svr);
return
true
;
}
catch
(Exception err)
{
throw
(
new
Exception(
"
备份数据库失败
"
+
err.Message)) ;
}
finally
{
svr.DisConnect() ;
}
}
private
void
Step(
string
message,
int
percent)
{
PBar.Value
=
percent ;
}
其中,这两个语句实现了进度的实时显示:
SQLDMO.BackupSink_PercentCompleteEventHandler pceh
=
new
SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
bak.PercentComplete
+=
pceh;
Step就是上面private
void
Step(
string
message,
int
percent) 的方法名称,它用来显示进度条的当前进度。
3
. 数据库的恢复和杀死进程的代码:
public
bool
RestoreDB(
string
strDbName,
string
strFileName, ProgressBar pgbMain)
{
PBar
=
pgbMain ;
SQLDMO.SQLServer svr
=
new
SQLDMO.SQLServerClass() ;
try
{
svr.Connect(ServerName,UserName,Password) ;
SQLDMO.QueryResults qr
=
svr.EnumProcesses(
-
1
) ;
int
iColPIDNum
=
-
1
;
int
iColDbName
=
-
1
;
for
(
int
i
=
1
;i
<=
qr.Columns;i
++
)
{
string
strName
=
qr.get_ColumnName(i) ;
if
(strName.ToUpper().Trim()
==
"
SPID
"
)
{
iColPIDNum
=
i ;
}
else
if
(strName.ToUpper().Trim()
==
"
DBNAME
"
)
{
iColDbName
=
i ;
}
if
(iColPIDNum
!=
-
1
&&
iColDbName
!=
-
1
)
break
;
}
for
(
int
i
=
1
;i
<=
qr.Rows;i
++
)
{
int
lPID
=
qr.GetColumnLong(i,iColPIDNum) ;
string
strDBName
=
qr.GetColumnString(i,iColDbName) ;
if
(strDBName.ToUpper()
==
strDbName.ToUpper())
svr.KillProcess(lPID) ;
}
SQLDMO.Restore res
=
new
SQLDMO.RestoreClass() ;
res.Action
=
0
;
SQLDMO.RestoreSink_PercentCompleteEventHandler pceh
=
new
SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
res.PercentComplete
+=
pceh;
res.Files
=
strFileName ;
res.Database
=
strDbName ;
res.ReplaceDatabase
=
true
;
res.SQLRestore(svr) ;
return
true
;
}
catch
(Exception err)
{
throw
(
new
Exception(
"
恢复数据库失败,请关闭所有和该数据库连接的程序!
"
+
err.Message)) ;
}
finally
{
svr.DisConnect() ;
}
}
其中这个语句取得了所有的进程列表:
SQLDMO.QueryResults qr
=
svr.EnumProcesses(
-
1
) ;
下面的语句找到和要恢复数据库相关的进程并杀死:
int
iColPIDNum
=
-
1
;
int
iColDbName
=
-
1
;
for
(
int
i
=
1
;i
<=
qr.Columns;i
++
)
{
string
strName
=
qr.get_ColumnName(i) ;
if
(strName.ToUpper().Trim()
==
"
SPID
"
)
{
iColPIDNum
=
i ;
}
else
if
(strName.ToUpper().Trim()
==
"
DBNAME
"
)
{
iColDbName
=
i ;
}
if
(iColPIDNum
!=
-
1
&&
iColDbName
!=
-
1
)
break
;
}
for
(
int
i
=
1
;i
<=
qr.Rows;i
++
)
{
int
lPID
=
qr.GetColumnLong(i,iColPIDNum) ;
string
strDBName
=
qr.GetColumnString(i,iColDbName) ;
if
(strDBName.ToUpper()
==
strDbName.ToUpper())
svr.KillProcess(lPID) ;
}
查看全文
相关阅读:
CDH中flume是已经启动着了…
CDH中,执行HIVE脚本表联查权限问题。。
linux screen 命令详解(未验证+研究)
004ICMP-type对应表
003iptables 命令介绍
002利用zabbix监控某个目录大小
Nginx图片剪裁模块探究 http_image_filter_module
linux增加自定义path和manpath
TortoiseSVN中图标的含义
Linux SVN 搭建(YUM)安装
原文地址:https://www.cnblogs.com/bobofsj11/p/1233799.html
最新文章
python pip 升级
在django中访问静态文件(js css img)
django-response对象
util.inherits
全局对象与全局变量
PowerDesigner使用教程3
PowerDesigner最基础的使用方法入门学习2
PowerDesigner最基础的使用方法入门学习
npm安装express 公司上网设置代理
SQL Server 数据库分离与附加(图文教程)
热门文章
ext布局问题之tab panel内的gridpanel内容数据变多,出现滚动条
sql STUFF用法
灵活运用 SQL SERVER FOR XML PATH
合并查找到的文件,至新的文件中
Scala中的match(模式匹配)
Scala中的Apply
2015年计划
org.apache.flume.FlumeException: NettyAvroRpcClient { host: xxx.xxx.xxx.xxx, port: 41100 }: RPC
Mosquitto关于Connection lost的问题。
关于Scala JDK与IDEA版本兼容的问题
Copyright © 2011-2022 走看看