首页数据库数据库备份dbs,有关Oracle数据库的备份情况

数据库备份dbs,有关Oracle数据库的备份情况

编程之家2023-10-20108次浏览

大家好,今天来为大家分享数据库备份dbs的一些知识点,和有关Oracle数据库的备份情况的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

数据库备份dbs,有关Oracle数据库的备份情况

数据库备份_数据库备份的实现方法

【摘要】数据库备份在数据库安全管理方面发挥着重要的作用。逻辑备份和操作系统备份是数据库备份的主要方式。运用合理的数据备份策略,提高数据库的备份效率,是数据库管理的重点。

【关键词】数据库;备份;方式;策略

引言

近年来,越来越多的企事业单位开始重视数据库的作用,并逐步建立了自己的数据库,在运营管理上对数据库的依赖日益增强。然而,由于一些客观或主观因素的影响,数据丢失、数据库损坏等情况时有发生,严重影响了相关单位的组织工作。因此,进行数据库备份,确保数据安全,具有重要的意义。

1数据库备份方式

通常,根据数据库备份的方式主要包括逻辑备份和操作系统备份。其中操作系统备份又有热备份和冷备份两种方式。根据数据库备份工具的不同,还可以将数据备份分为OS拷贝、第三方工具、RMAN、EXP/IMP备份。

数据库备份dbs,有关Oracle数据库的备份情况

1.1逻辑备份

数据库备份最常用的命令行工具是“导入/导出”。“Exp/Imp”在检测物理和逻辑冲突、表的抽取、表空间的迁移、小型数据库的转储等方面发挥着重要的作用,不过“Exp/Imp”实际上只是一个转储工具,并不是非常理想的数据库备份方式。我们可以将“Exp/Imp”当成小型数据库的一个逻辑辅助备份。在规模较大的数据库备份中,尤其是数据仓库、TB级数据库的备份中,“Exp/Imp”显得力不从心,难以实现理想的备份。大规模数据库备份大多采用第三方工具与RMAN进行备份。

1.2操作系统备份

在数据库的备份中,操作系统备份和逻辑本分有着显著的区别。通常而言,逻辑备份不对物理数据块进行备份,而只是提取数据库的数据;操作系统备份可以对整个数据文件进行拷贝。

首先,冷备份。操作系统备份的重要方式之一就是冷备份,其又称为脱机完全备份。冷备份是在数据库关闭的情况下进行的,在正常关闭数据库时,冷备份会提供完整的数据库。冷备份对大多数数据库而言,是一种安全、快捷的备份方式。冷备份主要具有以下优点:备份文件安全、维护简单;可以和归档方法较好的结合起来,实现最佳状态数据库的恢复;可以进行时间点恢复;备份操作方法简单、备份安全、速度快。不过,冷备份也有一些缺点:恢复时,只可以恢复完整的数据库,无法实现更小粒度的恢复;只能实现物理备份,浪费存储介质的空间;数据库备份时需要保持脱机状态;单独使用冷备份时,数据库只能够恢复到备份时的状态。

mysql_connect("localhost","$db_username","$db_password");$query=mysql_list_dbs();

数据库备份dbs,有关Oracle数据库的备份情况

while($result=mysql_fetch_array($query))

{ system

其次,热备份。在数据库运行的过程中进行热备份,单位是表空间,将每个空间的数据文件逐次备份,数据库需要以归档的方式打开。热备份时,表空间需要保持联机运行状态。备份数据文件之前,必须使用特定的命令将对应的表空间以备份方式进行放置,接着可以使用和冷备份类似的操作系统命令对表空间包括的数据文件进行备份。用操作系统命令备份数据文件后,需要使用特定的命令脱离热备份方式。通常情况下,热备份不用备份联机日志,不过需要保持归档状态。恢复实例时,或许会用到归档日志,所以应当保护好联机日志,损坏联机日志将在很大程度上损坏数据库。

1.3备份和恢复管理器

RMAN(Recovery Manager,备份和恢复管理器),是一些数据库会提供DBA工具,能够用于恢复操作与备份管理,可以备份数据库部件或是整个数据库,具体包括Spfile参数文件、归档文件、控制文件、数据文件、表空间。备份和恢复管理器可以实现增量数据块级别的数据库备份。增量RMAN备份是按照空间与时间进行的有效备份。此外,备份和恢复管理器还提供了一些其他功能,例如建立备用数据库、数据库克隆等。

2备份策略分析

实现数据库的有效备份,离不开合理的备份策略。采用合理的备份策略不但可以确保数据库服务器能够保持高性能状态运行,而且可以确保备份和恢复的可靠性和快速性。为了研究科学的备份策略,本研究以RMAN的多级增量备份为例进行探究。多级备份的目的是确保数据库系统具有较好的恢复性,缩减备份所需的时间。一般而言,备份时间和恢复时间需要进行权衡。例如一个数据库进行全备份,备份归档就能够确保将数据库恢复至理想的状态,不过这将大大增加恢复时间,降低了恢复效率,在实际的数据库运行中往往是无法容忍的。为了解决这一问题,就可以采用多级备份。例如,每天进行一次二级备份;每星期进行一次以及备份;每月进行一次不包括只读表空间的零级备份;每半年进行一次包括所有的只读表空间与数据的全备份。一般情况下,更改数据库应当重新同步CATAOG目录,进行重新备份。在备份后,应当进行归档日志备份。如果没有特殊的要求,归档日志也可以进行定期备份。在每次备份后,可以删掉备份点以前的归档日志,不过为了日后使用的需要或是数据库的安全,建议将归档日志保存在其他存储设备上。

3结语

综上所述,数据库备份能够确保数据安全,降低企事业单位因数据库损坏而发生的损失。目前,数据库备份的方式主要包括逻辑备份和操作系统备份,在数据库备份工作中,应当根据实际情况选用恰当的备份策略,以提高数据库备份的效率。

参考文献

[1]潘庆浩,樊志平.基于ORACLE数据库的数据备份方法的研究与探讨[J].科技资讯,2007(31):117.

[2]刘英,王效武,曾兵.一种数据备份与恢复系统体系设计[J].通信技术,2011(01):56-58.

作者简介:

姜博(1979-),女,吉林长春人,本科,任职于中国联合网络通信有限公司长春市分公司,研究方向:通信技术

(作者单位:中国联合网络通信有限公司长春市分公司)

有关Oracle数据库的备份情况

一意义当我们使用一个数据库时总希望数据库的内容是可靠的正确的但由于计算机系统的故障(硬件故障网络故障进程故障和系统故障)影响数据库系统的操作影响数据库中数据的正确性甚至破坏数据库使数据库中全部或部分数据丢失因此当发生上述故障后希望能重新建立一个完整的数据库该处理称为数据库恢复恢复子系统是数据库管理系统的一个重要组成部分恢复处理随所发生的故障类型所影响的结构而变化二备份的方法ORACLE数据库有三种标准的备份导出/导入(EXPORT/IMPORT)冷备份热备份导出备份是一种逻辑备份这种方法包括读取一系列的数据库日志并写入文件中这些日志的读取与其所处位置无关冷备份和热备份是物理备份(也称低级备份)它涉及到组成数据库的文件但不考虑逻辑内容下面我们分别介绍一下这三种备份方法及其特点(一)导出/导入(EXPORT/IMPORT)EXPORT/IMPORT是用来将ORACLE中数据移出/移入数据库 EXPORT将数据库中数据备份成一个二进制系统文件称为导出转储文件(EXPORT DUMP FILE)并将重新生成数据库写入文件中它有三种模式 a用户模式导出用户所有对象以及对象中的数据 b表模式导出用户所有表或者指定的表 c整个数据库导出数据库中所有对象它的备份有三种类型 a完全型(PLETE EXPORT)备份整个数据库 b积累型(ULATIVE ERPORT)备份上一次积累型备份所改变的数据 c增量型(INCREAMENTAL EXPORT)备份上一次备份后改变的数据 EXPORT的命令可以交互式进行各参数的具体含义见附录在进行导出备份时我们要考虑一点问题那就是导出的一致性在导出过程中导出每读一次就读取一个表因而尽管导出是在一个特点时自己开始的但不同的表读取的时间不同因此导出开始读一个表时此时表中的数据才是导出的数据这样当大多数表按内部关键字和外部关键字相互联系时在导出过程中这些相关联表的改变就会导致导出的不一致性要避开这个我们可以将导出过程安排在不对表操作的时候进行另外当ORACLE中RESTRICTEP CONSISTENT选项就可以保证导出数据一致性

IMPORT导入导入的过程是导出的逆过程这个命令先读取导出来的导出转储二进制文件并运行文件恢复对象用户和数据 IMPORT命令执行的方法和EXPORT方案有关如果EXPORT所实施的是完全型方案(FULL)则在IMPORT时所有的数据对象包括表空间数据文件用户都会在导入时创建但考虑到数据库中的物理布局预先创建表空间和用户是有用的如果EXPORT使用的是INCREMENTAL/CUMULATIVE方式则需要预先设置好表空间用户数据文件(二)冷备份冷备份发生在数据库已经正常关闭的情况下当正常关闭时会提供给我们一个完整的数据库数据库使用的每个文件都被备份下来这些文件包括所有数据文件所有控制文件所有联机REDO LOG文件INIT ORA文件(可选)值得注意的是冷备份必须是数据库关闭的情况下完成当数据库开着的时候执行数据库文件系统备份无效作冷备份一般步骤是正常关闭要备份的实例(instance);:备份整个数据库到一个目录启动数据库 SQLDBA>connect internalSQLDBA>shutdown normal SQLDBA>! cp<file><backup directory>或SQLDBA>!tar cvf/dev/rmt//dg/oracle SQLDBA>startup

(三)热备份(ACHIRELOG)数据库需要二十四小时运行而且随时有新的数据加入数据丢失将影响整个公司采用archivelog mode物理备份?设置数据库为automatic archivelog mode#su oracle%svrmgrl svrmgrl>connect internalsvrmgrl>startup mount svrmgrl>alter database archivelogsvrmgrl>shutdownsvrmgrl>exit%vi initoracle ora加入log_archive_start= true# if you want automatic archivinglog_archive_dest=$ORACLE_HOME/dbs/archlog_archive_format= log%s arc%dbstart%ps ef|grep archoracle::?: ora_arch_oracle注 oracle database is in automatic archivelog mode

?full offline entire database backup当数据库初始完成后这份备份是将来备份的基础它提供了所有与数据库有关的拷贝%dbshut%cp/oracle/oradata/oracle/system dbf/oracle/oradata/oracle/rbs dbf/oracle/oradata/oracle/temp dbf/oracle/oradata/oracle/tools dbf/oracle/oradata/oracle/users dbf/oraclecle/app/oracle/product//dbs/application dbf/oracle/app/oracle/product//dbs/apptmpsp dbf/oracle/app/oracle/product//dbs/apprlbksp dbf/oracle/oradata/oracle/redooracle log/oracle/oradata/oracle/control ctl/oracle/oradata/oracle/control ctl/oracle/oradata/oracle/control ctl<backup directory>%dbstart注:以上* dbf文件为数据文件* log文件为日志文件* ctl文件为控制文件%exit%tar uvf/dev/rmt/<backup files>注:如果为oracle则copy相应的 data files relog files control files

每天做一次 partial online with archiving backups#su oracle%svrmgrl%svrmgrl>connect internal%svrmgrl>alter tablespace billsp begin backup%svrmgrl>alter tablespace billtmpsp begin backup%svrmgrl>alter tablespace billrlbksp begin backup%svrmgrl>alter tablespace system begin backup%svrmgrl>alter tablespace rbs begin backup%svrmgrl>alter tablespace temp begin backup%svrmgrl>alter tablespace tools begin backup%svrmgrl>alter tablespace users begin backup%svrmgrl>host cp all datafile to the backup storage#文件名如第一步中以 dbf结尾的%svrmgrl>alter tablespace billsp end backup%svrmgrl>alter tablespace billtmpsp end backup%svrmgrl>alter tablespace billrlbksp end backup%svrmgrl>alter tablespace system end backup%svrmgrl>alter tablespace rbs end backup%svrmgrl>alter tablespace temp end backup%svrmgrl>alter tablespace tools end backup%svrmgrl>alter tablespace users end backup

做一个sql文件如上所写

The billing system can recover to the point of failure when the failure occur

七备份文件的恢复恢复文件以下是对"/etc/passwd"文件的恢复(放入正确的磁带(运行以下命令恢复"/etc/passwd"文件# rsh mt f/dev/rmt/ rew(找到最近的磁带向前进带到最近的"/etc/passwd"比如要找星期三的"/etc/passwd"文件运行如下命令)#rsh mt f/dev/rmt/ n fsf# ufsrestore if:/dev/rmt/ nufsrestore> ls. etc/ufsrestore> cd etc ufsrestore> ls./etc passwdufsrestore> add passwdWarnign./etc File existsufsrestore> verboseverbose mode onufsrestore> extractExtract requested filesYou have not read any volumes yet.Unless you know which volume your file(s) are on you should start witch the last volume and work to wards the first.Specify next volume# extract file./etc/passwdAdd linksSet directory mode ower and times.set owner/mode for.?(yn)nDirectories already exit set mode anyway?(yn)yufsrestore>quit热备份可以在数据库打开打情况下进行一般通过使用Alter命令改变表空间的状态来开始进行备份的备份完成后要恢其原来状态否则redo log会错配引起数据库下次启动时对受影响的表空间进行完全覆盖热备份的要求是热备份工作必需要求数据库在Archivelog方式下操作在SQLDBA状态下用alter database archivelog|noarchivelog命令可改变备份的模式热备份只能在数据库不使用或使用率低的情况下进行热备份需要大量的档案空间一般情况 Oracle以循环的方式写入Online redo log文件当填满第一个redo log文件后写第二个直至最后一个最后一个被填满后后台进程LGWR就覆盖第一个在Archivelog方式下后台进程ARCH在每一个redo log文件被覆盖前给它作一个拷贝一般这些文档的redo log文件被写入磁盘或磁带中如果磁盘空间够用建议使用磁盘这样可大大减少完成备份所需的时间在作热备份之前要将config ora文件中的log_archive_start设为true将log_archive_dest规定archive redo log文件的位置 log_archive_dest=/dg/oracle/arch/archlog_archive_start=true一旦数据库运行在archivelog状态下就可以作备份了热备份的命令文件由三部分组成数据文件一个表空间一个空间地备份 a设置表空间为备份状态 b备份表空间的数据文件 c恢复表空间为正常状态备份归档要作log文件 a临时停止归档进程b log下那些在archive redo log目标目录中的文件c重新启动archive进程d备份归档的redo log文件用alter database backup controlfile命令来备份拷贝文件在热备份运行之前log_archive_dest目录可能已满这时就要备份目录然后删除文件释放空间这个过程有如下步骤暂时停止archive进程记录在log_archive_dest目录下的文件重新启动archive进程备份archive redo log文件删除目录中的文件 sqldba lmode=y<<EOF arch archive log stop;exitEOF arch FILES= ls/dg/oracle/arch/arch* dbf;sqldba lmode=y<<EOF arch connect internalarchive log start;exitEOF arch tar rvf/dev/rmt/ FILESrm f$FILES

逻辑备份与物理备份的结合前面介绍了三种备份的方法在数据库做备份时应该将数据这三种备份的特点灵活运用我们首先比较一下三种方法的特性

方法类型恢复特性EXPORT导出逻辑型可以将任何数据库对象恢复到它被导出时的状态乻hutdown?将最近copyes of datafile拷贝到$oracle_home/dbs目录?%svrmgrl?svrmgrl>connect internal…svrmgrl>startup mount pfile=filename exclusive?svrmgrl>alter database recover;注:将自动恢复数据到the point of failure;? svrmgrl>alter database open;?当archive log文件过多时在做过部分备份后可将current log sequence之前的log*** arc删除#su oracle%svrmgrlsvrmgrl>connect internal;svrmgrl>archive log list;#此处标有current log sequence假设为 Svrmgrl>exit$cd/billdg/oracle/app/oracle/product//dbs/arch$ rm#将log arc之前的文件如log arc log arc删除冷备份物理型可将数据库到它被关闭的状态热备份物理型可将数据库恢复到任一时间点的状态

当数据库比较小时处理业务也小时冷备份导出就可以了如果只对一两个表备份导出就够了一般来说一个好备份最终执行总包括逻辑和物理导出确认数据库在逻辑的正确性而物理备份确保物理另外在进行备份时需要一些存储介质对于这些介质应该对其作好管理根据备份的内容日期将介质统一编号以免备份和恢复时弄错介质造成原有的备份丢失介质应存放在与计算机设备不同的地点以免机房发生意外时备份与计算机设备一同损坏

附录 tar命令tar option [arguments] filename option:c:创建一个由命令行指定的新的tarfilet:列出tarfile中的内容x:打开tarfile;f:使用其后的filename或/dev/rmt/| v:列出被恢复的文件名 p:恢复文件example:#tar cvf/dev/rmt//oracle备份/root下的所有内容#tar tvf/dev/rmt/列出磁带上的所有内容#tar xvf/dev/rmt//oracle将磁带上的/oracle目录中的内容恢复到当前目录中

导出选项关键字内容 USERID运行导出命令的帐号的用户名/口令 BUFFEER用来取数据行的缓冲区的大小 FILE导出转储文件的名字PRESS导出是否应该压缩有碎片的段成一个范围这将会影响STORAGE子句 GRANTS导出时否要导出数据库对象上的授权INDEXES是否要导出表上的索引ROWS是否应导出行如它为 N那么在导出文件中仅生成数据库对象的DDLCONSSTRAINTS是否导出表旧的约定条件FULL如设为 Y那么将执行一个整个数据库导出操作OWNER要导出的一系列数据库帐号然后执行这些帐号的USER导出操作TABLES要导出的一系列表执行这些表的TABLE导出操作RECORDLENGTH转储导出文件日志的长度(以字节为单位)通常都使用缺省除非要在两个不同操作系统中传递导出文件INCTYPE正在执行的导出操作的类型(有效值有 PLETE(缺省值) CUMULATIVE和 IVCREMENTAL)RECORD在增量导出类型中的一个标记标明是否将日志存储到数据字典中日志导出的表中PARFILE要传递给导出的参数文件的名字这个文件将包含所有参数的入口项ANALYZE标明是否将移对象的统计信息写入导出转储文件中CONSISTENT标明是否保留所有导出对象的读取一致复制 LOG导出日志将要写入的文件的名字MLS标明是否要导出MLS标号MLS_LABEL_规定了MLS标号的格式

导入选择项USERID运行导入命令的帐号的用户名/口令 BUFFEER用来取数据行的缓冲区的大小 FILE导入转储文件的名字SHOW规定文件内容是否被显示而不是被执行 EGORE标明在执行 CREATE命令时是否忽略遇到的错误如果正在导入的对象已经存在时应使用这个参数 FULL如设为 Y那么将执行一个整个数据库导入操作FROMUSER在FULL=N的情况下才有参数它是一系列的数据库帐号其对象应从导出转储文件中读取 TOUSER一系列数据库帐号导出转储文件扣的对象将要导入这些帐号 GRANTS导入时否要导入数据库对象上的授权INDEXES是否要导入表上的索引ROWS是否应导入行如它为 N那么在导入文件中执行数据库对象的DDLFULL如设为 Y那么将执行一个整个数据库导出操作TABLES要导入的一系列表RECORDLENGTH转储导入文件日志的长度(以字节为单位)通常都使用缺省除非要在两个不同操作系统中传递导入文件INCTYPE正在执行的导入操作的类型(有效值有 PLETE(缺省值) CUMULATIVE和 IVCREMENTAL)PARFILE要传递给导入的参数文件的名字这个文件将包含所有参数的入口项ANALYZE标明是否将移对象的统计信息写入导入转储文件中LOG导入日志将要写入的文件的名字MLS标明是否要导入MLS标号

热备份的命令文件 ORACLE_SID=oracle ORACLE_HOME=/dg/oraclesqldba lmode=y<<EOF arch connect internalalter tablespace SYSTEM begin backup;!tar cvf/dev/rmt//dg/oracle/dbms/sys dbfalter tablespace SYSTEM end backup;

alter tablespace BWT begin backup;!tar cvf/dev/rmt//dg/oracle/dbms/BWT dbfalter tablespace BWT end backup;

archive log stopexitEOF arch FILES= ls/dg/oracle/arch/arch* dbf;

sqldba lmode=y<<EOF arch connect internalarchive log start;exitEOF arch

tar rvf/dev/rmt/$FILESrm f$files

sqldba lmode=y<<EOFarch alter database backup controlfile to/dg/oracle/dbms/bwtcontrfile backup;exitEOF arch

lishixinzhi/Article/program/Oracle/201311/17668

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);

}

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

mysql数据库登录,如何登录mysql数据库次世代主机,本世代主机和次时代主机各自含义是什么