還原資料庫

2021-05-24 14:20:01 字數 3140 閱讀 4521

use gyjlbigfootmis

goif exists (select * from sysobjects where [name]='kymp_還原資料庫' and [type]='p')

begin

drop procedure kymp_還原資料庫

endgo

create procedure kymp_還原資料庫

@databasename varchar (1000),   /*  資料庫名稱 */

@backuppath varchar(2000),     /*  備份檔案路徑,還原的裝置 */

@filepath varchar(2000),       /*  還原檔案路徑,如果為空就使用預設路徑 */

@filename varchar(1000),    /*  還原名稱,即為物理檔名,字尾自動加*/

@datapdw  varchar(100)         /*  密碼    */

asif (@databasename is null or @databasename='') or (@backuppath is null or @backuppath='')  ---  判斷資料庫名稱與還原裝置

begin

print '必要的引數未之名,資料庫名稱或備份裝置路徑不對。'

return

endif (not exists(select * from sys.databases where [name]=@databasename))  --- 判斷資料庫是否存在

begin

print '找不到資料庫'

return

end/*

if()

begin

print '找不到裝置檔案'

return

end*/

declare @exec_sql varchar(5000),  /* 執行還原的語句 */

@base_mdf varchar(100),  /*  備份裝置的資料檔案型別名 */

@base_ldf varchar(100),  /*   備份裝置的日誌檔案型別名 */

@old_mdf_dir varchar(1000),  /*  原資料庫資料物理檔案路徑 */

@old_ldf_dir varchar(1000),  /*  原資料庫日誌物理檔案路徑 */

@old_mdf_name varchar(1000), /*  原資料庫資料物理檔名  */

@old_ldf_name varchar(1000), /*  原資料庫日誌物理檔名  */

@search_sql  varchar(1000)   /*  查詢原資料庫檔名語句    */

set @search_sql='select * from '+@databasename+'.dbo.sysfiles'

select * into #tmp_1 from master..sysfiles where 1=2   -- 取原來的資料庫物理檔案資訊

insert into #tmp_1 exec (@search_sql)

select * from #tmp_1

create table #t(logicalname varchar(255), physicalname varchar(255),

type varchar(20), filegroupname varchar(255), size varchar(20),

maxsize varchar(20), fileld varchar(20), createlsn varchar(20),

droplsn varchar(20), uniqueld uniqueidentifier, readonlylsn varchar(20),

readwritelsn varchar(20), backupsizeinbytes varchar(255), sourceblocksize varchar(20),

filegroupld varchar(20), loggroupguid varchar(20), differentialbaselsn varchar(20),

differentialbaseguid uniqueidentifier, isreadonly varchar(20), ispresent varchar(20))

insert #t  exec(' restore filelistonly from disk='''+@backuppath+'''')

select @base_mdf=[logicalname] from #t where [fileld]=1 and [type]='d'

select @base_ldf=[logicalname] from #t where [fileld]=2 and [type]='l'

drop table #t

set @exec_sql=''

set @exec_sql=@exec_sql+'alter database gyjlbigfootmis set offline with rollback immediate  '

+'/* 斷開所有連線並回滾所有控制事務,置資料庫為不可連線狀態*/   '

+'restore database gyjlbigfootmis from disk='''+@backuppath+''''+' with replace, '

+'move '''+@base_mdf+''' to '''+@filepath+@filename+'_data.mdf'''

+',move '''+@base_ldf+''' to '''+@filepath+@filename+'_ldf.ldf '''

+'  alter database gyjlbigfootmis set online with rollback immediate     '

+'   /* 置資料庫為可連線狀態,回滾事務*/'

--select @exec_sql

exec (@exec_sql)

goexec kymp_還原資料庫 'gyjlbigfootmis','h:/工作/gybigfootmis_backup_201002251800/gybigfootmis_backup_201002251800.bak','e:/mssql/data/','gyjlbigfootmis1',''

資料庫還原

訊息 5133,級別 16,狀態 1,第 1 行 對檔案 d microsoft sqlserver mssql.1 mssql data db camp unit 2.mdf 的目錄查詢失敗,出現作業系統錯誤 3 系統找不到指定的路徑。訊息 3156,級別 16,狀態 3,第 1 行 檔案 db ...

還原資料庫

在還原資料庫時,有時會提示因為資料庫正在使用,所以無法獲得對資料庫的獨佔訪問權 這時需要在還原資料庫之前關閉正在使用資料庫的執行緒。解決方案如下 執行該方案,必須首先定位到master資料庫,然後在分析查詢器中執行以下語句 alter database 資料庫名 set offline with r...

資料庫還原

資料庫還原 1 切換到oracle 使用者下,2 找到資料庫檔案目錄3 解壓 4 執行下面的命令 1 6在plsql中執行 7在linux下執行 使用的是securefxportable.exe軟體 1 查詢那些使用者鏈結了資料庫 select username,sid,serial from v ...