999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

ASP遠程備份和恢復SQL數據庫的方法

2009-04-29 00:00:00翁文輝
電腦知識與技術 2009年32期

摘要:該文通過ASP程序實例,介紹了遠程備份和恢復SQL數據庫的方法。

關鍵詞:ASP;SQL;遠程;備份;恢復

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2009)32-8868-02

ASP Remote SQL Database Backup and Restore the Method

WENG Wen-hui

(Huangyan District, Toyama Power Authority, Taizhou 318023, China)

Abstract: Based on ASP program, for example,introduces remote SQL database backup and restore the method.

Key words: ASP; SQL; remote; backup and restore

近年來,SQL數據庫遭到注入攻擊是很常見,通常在程序中加上防注入代碼就可以抵御這類攻擊。但有的時候,因為程序文件比較多或者其他某原因,暫時無法防住注入攻擊,這時網站維護人員就比較頭疼了。本人便遇到過這樣的事,這個網站數據量不大,更新也不算頻繁,所以被注入后就需要恢復之前備份的數據庫。最初是通過遠程桌面連到服務器上,手動恢復SQL數據庫,也不算費勁。但后來有段時間,注入攻擊非常頻繁,一天可能發生好幾次,這樣就比較麻煩了。總是維護人員發現注入,打電話通知我,我再恢復數據庫,這樣經常會使用問題的處理時間比較長。而且有時網站剛更新了一部分數據,不久遭到注入攻擊,這時直接恢復數據庫就會丟失剛更新的數據,沒辦法,只有手工清除注入的代碼或者恢復后重新更新。這樣的事情發生幾次之后,我就產生了做一個程序讓網站維護人員自己在更新數據之后備份數據庫,在發現注入攻擊后自己完成數據庫的恢復。

1 技術準備

1.1 備份

備份的問題比較好處理,與數據庫建立連接后,執行BACKUP語句就可以實現。

BACKUP語句語法為:

BACKUP DATABASE { database_name | @database_name_var }

[ ,...n ]

TO [ ,...n ]

[ ] [ next-mirror-to ]

[ WITH { DIFFERENTIAL | [ ,...n ] } ]

[;]

第一行:BACKUP DATABASE 數據庫名;

第二行:文件名,一般只在數據庫的大小和性能要求使得進行數據庫備份無法實現時用到;

第三行:指定用于備份操作的邏輯備份設備或物理備份設備,這個是我們要用到的;

第四行:指定一組輔助備份設備(最多三個),其中每個設備都將鏡像 TO 子句中指定的備份設備,因為沒這種需求,可以忽略;

第五行:這行比較重要,指定了備份的各種參數,這里只介紹幾種可能用到的,其他的請查閱MSDN。

DIFFERENTIAL:指定數據庫備份或文件備份應該只包含上次完整備份后更改的數據庫或文件部分,即差異備份。

NOINIT | INIT:控制備份操作是追加到還是覆蓋備份媒體中的現有備份集。默認為追加到媒體中最新的備份集 (NOINIT)。

權限要求:默認授予 sysadmin 固定服務器角色和 db_owner 及 db_backupoperator 固定數據庫角色的成員。

1.2 恢復

恢復的問題就比較麻煩,首先要以SA用戶登陸,其次是要中止其他用戶與數據庫的連接,然后才能用RESTORE語句恢復數據庫。

中止其他用戶與數據庫的連接,如不進行這個操作,在恢復過程中多半會出現“因為數據庫正在使用,所以未能獲得對數據庫的排它訪問權。”的提示:

exec p_killspid 數據庫名

這里使用了一個自定義的存儲過程,代碼如下:

CREATEproc p_killspid

@dbname varchar(200)--要關閉進程的數據庫名

as

declare @sqlnvarchar(500)

declare @spid nvarchar(20)

declare #tb cursor for

select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname)

open #tb

fetch next from #tb into @spid

while @@fetch_status=0

begin

exec('kill '+@spid)

fetch next from #tb into @spid

end

close #tb

deallocate #tb

GO

RESTORE語句語法為:

RESTORE DATABASE { database_name | @database_name_var }

[ ,...n ]

[ FROM [ ,...n ] ]

WITH

{

[ RECOVERY | NORECOVERY ]

[ , [ ,...n ] ]

} [ ,...n ]

[;]

第一行:RESTORE DATABASE 數據庫名;

第二行:文件名,一般只在數據庫的大小和性能要求使得進行數據庫備份無法實現時用到;

第三行:指定用于備份操作的邏輯備份設備或物理備份設備,這個是我們要用到的;

第六行:NORECOVERY 指定不發生回滾。從而使前滾按順序在下一條語句中繼續進行。

在這種情況下,還原順序可還原其他備份,并執行前滾。

RECOVERY(默認值)表示,應在完成當前備份前滾之后執行回滾。

其他參數略。

權限要求:如果不存在要還原的數據庫,則用戶必須有 CREATE DATABASE 權限才能執行 RESTORE。如果該數據庫存在,則 RESTORE 權限默認授予 sysadmin 和 dbcreator 固定服務器角色成員以及該數據庫的所有者 (dbo)(對于 FROM DATABASE_SNAPSHOT 選項,該數據庫始終存在)。

RESTORE 權限被授予那些成員身份信息始終可由服務器使用的角色。因為只有在固定數據庫可以訪問且沒有損壞時(在執行 RESTORE 時并不會總是這樣)才能檢查固定數據庫角色成員身份,所以 db_owner 固定數據庫角色成員沒有 RESTORE 權限。

下面順便說一下有可能出現的一些問題:

1)恢復數據庫后,增加登錄名出現“數據庫中的用戶名存在“,但是登錄名卻顯示<無>而且新加用戶會提示用戶已存在 !”,這時需要執行以下代碼:

sp_change_users_login 'update_one','數據庫用戶名稱','登錄名稱'

2)無法更改數據庫中對象的所有者,這時需要使用如下代碼:

exec sp_changeobjectowner '原所有者名',[dbo]

執行存儲過程changename

exec changename '原所有者名','新所有者名'

2 程序代碼

<%act=request(\"act\")

if act=\"B\" then’備份數據庫

SQL=\"backup database WebSiteData to disk='\"Server.MapPath(\"bk\")\"\\\"\"bk.bak\"\"' with INIT\"

set cnn=Server.createobject(\"adodb.connection\")

cnn.open \"driver={SQL Server};server=(local);uid=abc;pwd=123;database= WebSiteData \" ‘建立與數據庫的連接

cnn.execute SQL

on error resume next

if err<>0 then

response.write \"錯誤:\"err.Descripting

else

response.write \"數據備份成功!\"

end if

cnn.close

set cnn=nothing

end if

if act=\"R\" then’恢復數據庫

SQL=\"Restore database WebSiteData from disk='\"Server.MapPath(\"bk\")\"\\\"\"bk.bak\"\"'\"

set cnn=Server.createobject(\"adodb.connection\")

cnn.open \"driver={SQL Server};server=(local);uid=sa;pwd=123;database=master\" ‘以SA用戶身份登錄

cnn.execute(\"exec p_killspid'WebSiteData'\")’結束其他用戶與數據庫連接

cnn.execute SQL ‘恢復數據庫

on error resume next

if err<>0 then

response.write \"錯誤:\"err.Descripting

else

response.write \"數據恢復成功!\"

end if

cnn.close

set cnn=nothing

end if

%>

3 結束語

接收程序改為多線程異步接收方式后,經測試無丟包現象。通過此次實踐筆者認為多線程異步SOCKET接收并不像想象中那么復雜,只要弄清楚各線程的啟動順序、互相之間的關系就可以很容易地實現各種應用。當然,其中還是有些細節問題需要讀者在實際應用中注意的,如:數據接收線程中無法直接在啟動界面中顯示數據(因為同一線程)、如何把DataGridView中數據直接寫入數據庫等,篇幅有限無法在此討論。

本程序在WINDOWS XP、VS 2005中調試通過。

參考文獻:

[1] Silberschatz A.數據庫系統概念[M].楊冬青,馬秀莉,譯.5版.北京:機械工業出版社,2008.

[2] 唐學忠.SQL Server 2000數據庫教程[M].北京:電子工業出版社,2005.

[3] 張躍廷.ASP.NET數據庫系統開發完全手冊[M].北京:人民郵電出版社,2007.

主站蜘蛛池模板: 无码电影在线观看| 伊人久综合| 成人综合在线观看| 日韩毛片在线视频| 国产毛片高清一级国语| 色老二精品视频在线观看| 国产精品亚洲精品爽爽| a级毛片免费看| 成人福利在线观看| 国产xxxxx免费视频| 亚洲天堂在线免费| 亚洲a级在线观看| 国产微拍一区二区三区四区| 免费va国产在线观看| 免费毛片a| 中国一级特黄视频| 青草视频久久| 亚洲综合狠狠| 99精品欧美一区| 免费一极毛片| 国产精品.com| 亚洲欧美极品| 欧美在线国产| 免费欧美一级| 国产成人精品一区二区秒拍1o| 久久99国产综合精品1| 自拍中文字幕| 丰满少妇αⅴ无码区| 99视频在线免费观看| 国产亚洲视频中文字幕视频| 亚洲日韩Av中文字幕无码| 婷婷色在线视频| 亚洲国产成人麻豆精品| 免费毛片全部不收费的| 综合天天色| 真人高潮娇喘嗯啊在线观看| 国产色婷婷| 久久亚洲精少妇毛片午夜无码 | 午夜福利在线观看成人| 91九色视频网| 成人免费网站久久久| 国产区人妖精品人妖精品视频| 啊嗯不日本网站| 一级片一区| 午夜色综合| 亚洲无码视频一区二区三区| 国产福利在线免费| 欧洲成人免费视频| 亚洲日韩精品无码专区97| 亚洲AV无码久久精品色欲| 国产精品久久自在自2021| 欧美高清三区| 国产不卡国语在线| 第一区免费在线观看| 青草视频在线观看国产| 亚洲一区二区日韩欧美gif| 国产永久在线视频| 精品人妻一区二区三区蜜桃AⅤ| 亚洲精品无码日韩国产不卡| 国产xx在线观看| 九九这里只有精品视频| 九九热视频精品在线| 精品午夜国产福利观看| 亚洲日本在线免费观看| 国产96在线 | 欧美色视频日本| 91精品情国产情侣高潮对白蜜| 在线观看亚洲精品福利片| 婷婷激情亚洲| 九九香蕉视频| 国产福利免费在线观看| 亚洲第一极品精品无码| 亚洲第一色网站| 亚洲中文无码av永久伊人| 欧美色图久久| 综合人妻久久一区二区精品 | 国产专区综合另类日韩一区| 日韩成人高清无码| 亚洲视频a| 欧美一区福利| 干中文字幕| 免费a级毛片视频|