新聞中心
SQL數(shù)據(jù)庫是現(xiàn)代企業(yè)中非常重要的一種數(shù)據(jù)庫管理系統(tǒng),它被廣泛地應(yīng)用在管理企業(yè)中各種數(shù)據(jù)信息,如客戶資料、銷售數(shù)據(jù)、財務(wù)賬目等等,它為企業(yè)數(shù)據(jù)管理提供了強有力的保障。然而,由于種種原因,如技術(shù)故障、網(wǎng)絡(luò)問題等,SQL數(shù)據(jù)庫可能會出現(xiàn)故障,導(dǎo)致重要數(shù)據(jù)丟失,這是極其危險的。針對這種情況,許多企業(yè)采取了備份策略,備份好數(shù)據(jù),以防不測。

創(chuàng)新互聯(lián)于2013年開始,公司以網(wǎng)站建設(shè)、成都網(wǎng)站制作、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶1000+,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計、獨特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。
但是,如果數(shù)據(jù)庫出現(xiàn)故障,數(shù)據(jù)的缺失是無法避免的。此時,及時地對故障進(jìn)行處理是非常必要的。SQL數(shù)據(jù)庫恢復(fù)就成為了必須進(jìn)行的操作,對于這一操作,我們需要采取以下措施。
1.立即收集數(shù)據(jù)庫故障信息:當(dāng)數(shù)據(jù)庫出現(xiàn)故障時,要立即收集故障信息,包括錯誤代碼、錯誤日志、操作信息等,以便后期分析和處理,避免步步緊逼。
2.停止搶先手動操作:在數(shù)據(jù)故障的情況下,不要盲目地進(jìn)行手動操作,因為任何錯誤的操作都可能導(dǎo)致數(shù)據(jù)的進(jìn)一步丟失。
3.檢查數(shù)據(jù)庫備份還原情況:在數(shù)據(jù)庫故障的情況下,通過查看最近備份時間,可以知道是否能夠從備份文件中還原數(shù)據(jù)。
4.找到數(shù)據(jù)恢復(fù)的根本原因:在數(shù)據(jù)庫恢復(fù)過程中,我們需要找到故障的根本原因,如硬件問題,網(wǎng)絡(luò)故障等等,以便避免數(shù)據(jù)再次丟失問題。
5.進(jìn)行數(shù)據(jù)恢復(fù):在找到根本原因后,可以開始進(jìn)行數(shù)據(jù)恢復(fù)操作。如果有備份文件,那么可以通過還原備份文件進(jìn)行數(shù)據(jù)恢復(fù)。如果沒有備份文件,可以采用數(shù)據(jù)恢復(fù)軟件、專業(yè)數(shù)據(jù)恢復(fù)公司等方式進(jìn)行數(shù)據(jù)恢復(fù)。
SQL數(shù)據(jù)庫的恢復(fù)是非常重要的操作,它能夠保障企業(yè)的數(shù)據(jù)安全。在數(shù)據(jù)庫故障的情況下,我們需要保持冷靜,采取有效的措施進(jìn)行數(shù)據(jù)庫的恢復(fù)和維護,盡可能避免數(shù)據(jù)丟失,確保企業(yè)的數(shù)據(jù)安全。
相關(guān)問題拓展閱讀:
- 數(shù)據(jù)庫sql去重
- SQL2023數(shù)據(jù)庫可以還原SQL2023的備份文件嗎?
數(shù)據(jù)庫sql去重
1 去重
1.1 查詢
1.1.1 存在部分字段相同的紀(jì)錄,即有唯一鍵主鍵ID
最常見情況如果是這種情況的話用distinct是過濾不了的,這森閉就要用到主鍵id的唯一性特點及group by分組
select * from table where id in (select max(id) from table group by )
1.1.2 存在兩條完全相同的記錄用關(guān)鍵字distinct就可以去掉
select distinct id(某一列) from table(表名) where (條件)
1.1.3 查找表中不含重復(fù)的數(shù)據(jù),根據(jù)單個字段(id)來判斷
select * from table where id in (select id from table group by id having count (id) >1)
1.1.4 查找表中重復(fù)的數(shù)據(jù),根據(jù)單個字段(id)來判斷
select * from table where id not in (select id from table group by id having count (id) >1)
1.1.5 查詢?nèi)康闹匚沾菏讖?fù)信息
select * from people where id not in (select min(id) from people group by name,sex HAVING COUNT(*)
1.1.6 查詢?nèi)螖?shù)部的重復(fù)信息
select * from table where id not in (select MIN(id) from table group by name,sex)
1.1.7 刪除多余重復(fù)的信息,只保留最小ID
SQL2023數(shù)據(jù)庫可以還原SQL2023的備份文件嗎?
其他地方找到的:
sql2023中的備份要返缺在sql2023中還原,首先在sql2023中還原,然后選擇兼容sql2023(80),備份后再在sql2023種還原。
用mdf和ldf來備份數(shù)據(jù)庫,首先要分離數(shù)據(jù)庫,右鍵備份數(shù)據(jù)庫-任務(wù)-分離,對數(shù)據(jù)庫分離,數(shù)據(jù)庫的readonly要為false。分離后,在sql的data目錄下找到要備份的mdf和ldf數(shù)據(jù)庫。
還原時選擇附加數(shù)據(jù)庫,選擇漏談辯對應(yīng)的mdf和ldf文件,附加即可。要判斷要附加的數(shù)據(jù)庫是否為只讀,如果是,要去掉只讀屬性。要附加的數(shù)據(jù)庫文件即mdf和ldf文件的安全設(shè)置中設(shè)置user用戶完全控制權(quán)限,即為數(shù)據(jù)庫文件的屬性,設(shè)置成功后才可以附加。否則會抱錯,要附加的數(shù)據(jù)庫為只讀。
要導(dǎo)出數(shù)據(jù)庫腳本時,右鍵導(dǎo)出的數(shù)據(jù)庫-任務(wù)-生成腳本
以下是sql語句備份還原數(shù)據(jù)庫:
/*–備份數(shù)據(jù)庫
–鄒建.10–*/
/*–調(diào)用示例
–備份當(dāng)前數(shù)據(jù)庫
exec p_backupdb @bkpath=’c:\’,@bkfname=’db_\DATE\_db.bak’
–差異備份當(dāng)前數(shù)據(jù)庫
exec p_backupdb @bkpath=’c:\’,@bkfname=’db_\DATE\_df.bak’,@bktype=’DF’
–備份當(dāng)前數(shù)據(jù)庫日志
exec p_backupdb @bkpath=’c:\’,@bkfname=’db_\DATE\_log.bak’,@bktype=’LOG’
–*/
if exists (select * from dbo.sysobjects where id = object_id(N’.
‘) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
drop procedure .
GO
create proc p_backupdb
@dbname sysname=”, –要備份的數(shù)據(jù)庫名稱,不侍余指定則備份當(dāng)前數(shù)據(jù)庫
@bkpath nvarchar(260)=”, –備份文件的存放目錄,不指定則使用SQL默認(rèn)的備份目錄
@bkfname nvarchar(260)=”, –備份文件名,文件名中可以用\DBNAME\代表數(shù)據(jù)庫名,\DATE\代表日期,\TIME\代表時間
@bktype nvarchar(10)=’DB’, –備份類型:’DB’備份數(shù)據(jù)庫,’DF’ 差異備份,’LOG’ 日志備份
@appendfile bit=1 –追加/覆蓋備份文件
as
declare @sql varchar(8000)
if isnull(@dbname,”)=” set @dbname=db_name()
if isnull(@bkpath,”)=” set @bkpath=dbo.f_getdbpath(null)
if isnull(@bkfname,”)=” set @bkfname=’\DBNAME\_\DATE\_\TIME\.BAK’
set @bkfname=replace(replace(replace(@bkfname,’\DBNAME\’,@dbname)
,’\DATE\’,convert(varchar,getdate(),112))
,’\TIME\’,replace(convert(varchar,getdate(),108),’:’,”))
set @sql=’backup ‘+case @bktype when ‘LOG’ then ‘log ‘ else ‘database ‘ end +@dbname
+’ to disk=”’+@bkpath+@bkfname
+”’ with ‘+case @bktype when ‘DF’ then ‘DIFFERENTIAL,’ else ” end
+case @appendfile whenthen ‘NOINIT’ else ‘INIT’ end
print @sql
exec(@sql)
go
—
/*–恢復(fù)數(shù)據(jù)庫
–鄒建.10–*/
/*–調(diào)用示例
–完整恢復(fù)數(shù)據(jù)庫
exec p_RestoreDb @bkfile=’c:\db__db.bak’,@dbname=’db’
–差異備份恢復(fù)
exec p_RestoreDb @bkfile=’c:\db__db.bak’,@dbname=’db’,@retype=’DBNOR’
exec p_backupdb @bkfile=’c:\db__df.bak’,@dbname=’db’,@retype=’DF’
–日志備份恢復(fù)
exec p_RestoreDb @bkfile=’c:\db__db.bak’,@dbname=’db’,@retype=’DBNOR’
exec p_backupdb @bkfile=’c:\db__log.bak’,@dbname=’db’,@retype=’LOG’
–*/
if exists (select * from dbo.sysobjects where id = object_id(N’.
‘) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
drop procedure .
GO
create proc p_RestoreDb
@bkfile nvarchar(1000), –定義要恢復(fù)的備份文件名
@dbname sysname=”,定義恢復(fù)后的數(shù)據(jù)庫名,默認(rèn)為備份的文件名
@dbpath nvarchar(260)=”, –恢復(fù)后的數(shù)據(jù)庫存放目錄,不指定則為SQL的默認(rèn)數(shù)據(jù)目錄
@retype nvarchar(10)=’DB’, –恢復(fù)類型:’DB’完事恢復(fù)數(shù)據(jù)庫,’DBNOR’ 為差異恢復(fù),日志恢復(fù)進(jìn)行完整恢復(fù),’DF’ 差異備份的恢復(fù),’LOG’ 日志恢復(fù)
@filenumber int=1, –恢復(fù)的文件號
@overexist bit=1,-是否覆蓋已經(jīng)存在的數(shù)據(jù)庫,僅@retype為
@killuser bit=是否關(guān)閉用戶使用進(jìn)程,僅@overexist=1時有效
as
declare @sql varchar(8000)
–得到恢復(fù)后的數(shù)據(jù)庫名
if isnull(@dbname,”)=”
select @sql=reverse(@bkfile)
,@sql=case when charindex(‘.’,@sql)=0 then @sql
else substring(@sql,charindex(‘.’,@sql)+1,1000) end
,@sql=case when charindex(‘\’,@sql)=0 then @sql
else left(@sql,charindex(‘\’,@sql)-1) end
,@dbname=reverse(@sql)
–得到恢復(fù)后的數(shù)據(jù)庫存放目錄
if isnull(@dbpath,”)=” set @dbpath=dbo.f_getdbpath(”)
–生成數(shù)據(jù)庫恢復(fù)語句
set @sql=’restore ‘+case @retype when ‘LOG’ then ‘log ‘ else ‘database ‘ end+@dbname
+’ from disk=”’+@bkfile+””
+’ with file=’+cast(@filenumber as varchar)
+case when @overexist=1 and @retype in(‘DB’,’DBNOR’) then ‘,replace’ else ” end
+case @retype when ‘DBNOR’ then ‘,NORECOVERY’ else ‘,RECOVERY’ end
print @sql
–添加移動邏輯文件的處理
if @retype=’DB’ or @retype=’DBNOR’
begin
–從備份文件中獲取邏輯文件名
declare @lfn nvarchar(128),@tp char(1),@i int
–創(chuàng)建臨時表,保存獲取的信息
create table #tb(ln nvarchar(128),pn nvarchar(260),tp char(1),fgn nvarchar(128),sz numeric(20,0),Msz numeric(20,0))
–從備份文件中獲取信息
insert into #tb exec(‘restore filelistonly from disk=”’+@bkfile+””)
declare #f cursor for select ln,tp from #tb
open #f
fetch next from #f into @lfn,@tp
set @i=0
while @@fetch_status=0
begin
select @sql=@sql+’,move ”’+@lfn+”’ to ”’+@dbpath+@dbname+cast(@i as varchar)
+case @tp when ‘D’ then ‘.mdf”’ else ‘.ldf”’ end
,@i=@i+1
fetch next from #f into @lfn,@tp
end
close #f
deallocate #f
end
–關(guān)閉用戶進(jìn)程處理
if @overexist=1 and @killuser=1
begin
declare @spid varchar(20)
declare #spid cursor for
select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)
open #spid
fetch next from #spid into @spid
while @@fetch_status=0
begin
exec(‘kill ‘+@spid)
fetch next from #spid into @spid
end
close #spid
deallocate #spid
end
–恢復(fù)數(shù)據(jù)庫
exec(@sql)
go
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:
關(guān)于sql 數(shù)據(jù)庫 in recovery的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
文章標(biāo)題:SQL數(shù)據(jù)庫正在恢復(fù)中,重要數(shù)據(jù)請勿丟失!(sql數(shù)據(jù)庫inrecovery)
文章位置:http://www.dlmjj.cn/article/ccieiih.html


咨詢
建站咨詢
