• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用VB備份和恢復SQL Server數據庫的方法

    發布: 2007-5-25 09:19 | 作者: 楊梅娟 陳亞軍 | 來源: 計算機與信息技術 | 查看: 46次 | 進入軟件測試論壇討論

    領測軟件測試網  摘要 備份與恢復是數據庫管理員維護數據庫安全性和完整性的重要操作。本文分析并介紹用Access備份SQL數據庫的方法,很好地達到了數據備份的目的。同時,就Access 數據庫的安全接口作了簡略討論,使備份后不致喪失數據安全性。并提出了改進備份與恢復策略的一些建議。

      關鍵詞 SQL Server數據庫; Visual Basic 6.0; 數據備份;數據恢復; Access

      引言

      對于關鍵應用的數據庫系統應根據具體環境和條件制訂一個完善可行確保系統安全的備份計劃,沒有備份的系統是不可靠、危險的,后果將是嚴重的,破壞性病毒、誤操作、自然災害等等都可能會對數據庫系統造成難以估量的破壞。尤其對一個信息化程度較高的企業來說,最有價值的財產或許就是企業數據庫中的數據。一個系統中最重要的是大量的實時數據,沒有備份功能顯然是不安全和不完善的。經過實踐摸索出Visual Basic 6.0開發的備份程序,能將數據庫備份到Access數據庫(Access 為目前流行的桌面型數據庫產品, 具有存儲操作靈活、便利等優點, 并且因它與SQL Server 同屬微軟數據庫產品, 二者能很好地兼容)中,并對Access數據庫進行加密以防數據被非法訪問。該程序還能用Access備份庫的數據恢復SQL Server數據庫,從而減少因誤操作損壞數據內容而造成的損失。使用該方法,用戶不須添加額外設備,只須在原有服務器上運行該備份程序,其界面簡單方便,適合普通用戶使用。

      備份與恢復概述

      備份是數據庫管理員定期地將整個數據庫復制到磁帶或另一個磁盤上保存起來的過程。常用的數據備份類型有:完全備份、差異備份、事務日志備份、文件或文件組備份。一個通用的備份策略是:以較長的時間間隔執行完全備份,以適中的時間間隔進行差異備份,并以較短的時間間隔進行事務日志備份。當數據遭到破壞后就可以利用備份來恢復數據庫;謴蛿祿䦷焓且粋裝載數據庫的備份,然后應用事務日志重建的過程。一個通用的恢復策略是:首先恢復完全備份的數據,然后恢復差異備份數據,最后根據事務日志備份進行恢復。

      1、備份方案

      開發所需軟件:Visual Basic 6.0 Access備份程序的設計方法:

     。1) 用控制面版的ODBC設置,給SQL Server中的數據庫添加一個數據源名稱。

     。2) 在Access中新建一個數據庫,命名為backup.mdb。

     。3) 用VB定義兩個主要過程:Attach_Table()和Create_Table()。Attach_Table的作用是將SQL Server數據庫中的所有需要備份的表鏈接到Access數據庫中,在此過程中要排除系統表,因為那是SQL Server自創建的,表中無用戶數據。Create_Table的作用是在backup.mdb中創建目的表,即在這個備份Access庫中創建表用來保存所有存在SQL數據庫中的用戶數據。另外,在鏈接過程中,要去掉SQL Server自帶的擁有者名稱。

      2、程序的邏輯結構

     、 通過第一步創建的ODBC數據源打開要備份的SQL數據庫;

     、 使用Attach_Table()將該數據庫中的所有用戶表鏈接到backup.mdb中,排除系統表的方法是:

    For Each tdf in backup_db.TableDefs
     If (tdf.attributes And dbSystemObject)=0 Then
      //條件成立,說明該表是用戶定義的表,可以鏈接,否則跳過
     End if
    Next

     、 使用Create_Table()對每個表創建與之對應的備份表,取名可遵循如下原則, 若原表叫table_name, 則備份表叫b_table_name。

     、 將table_name表中的所有記錄復制到b_table_name中。

     、輳膫浞輲靹h除對SQL數據表的鏈接。
     3、程序原碼

      采用微軟DAO (Data Access Object) 數據模型, 打開Access 本地數據庫, 并連接一個外部ODBC數據表, 拷貝該表結構完成, 有以下過程塊CopyStru :

    Private Sub copyStru ()
     Set dbsTemp = wrkjet. OpenDatabase (tagFilName)// 鏈接表的過程
     For i = 0 To tabN - 1
      Set tdfLinked = dbsTemp. CreateTableDef (“linkTab”)
      tdfLinked. Connect = “OdbC; DATABASE = xgsbgsys ; UID =

      sa ; PWD = ; DSN = xgsdb ;”
      tdfLinked. SourceTableName = tabName (i)
      dbsTemp. TableDefs. Append tdfLinked
      Set temp Tab = dbsTemp. CreateTableDef ()
      temp Tab. Name = tabName (i)
      //創建新表的過程
      For Each fld In tdfLinked. Fields
       Set newFil = temp Tab. CreateField (fld. Name , fld. Type ,fld. Size)
       newFil. OrdinalPosition = fld. OrdinalPosition
       newFil. Required = fld. Required
       temp Tab. Fields. Append newFil
      Next
      //創建索引
      For Each idx In tdfLinked. Indexes
       Set newIdx = temp Tab. CreateIndex ()
       With newIdx
        Name = tabName (i) & ” x”
        Fields = idx. Fields
        Unique = idx. Unique
        Primary = idx. Primary
       End With
       temp Tab. Indexes. Append newIdx
      Next
      dbsTemp. TableDefs. Append temp Tab
      Set temp Tab = Nothing
      dbsTemp. TableDefs. Delete ”linkTab”
     Next i
     dbsTemp. Close
     Set dbsTemp = Nothing
     wrkjet. Close
     Set wrkjet = Nothing
    End Sub
    End Sub

      追加數據, 采用微軟ADO (ActiveX data object) 數據模型, 分別操縱SQL Server 和Access 數據對象, 追加記錄數據來完成, 有以下過程塊CopyDa2ta :

    Private Sub copyData ()
     Set sourceCn = New adodb. Connection
     sourceCn. CursorLocation = adUseServer
     strSql =“PROVIDER = MSDASQL ; dsn = xgsdb ; uid = sa ;
     pwd = ;”
     sourceCn. Open strSql
     Set targetCn = New adodb. Connection
     targetCn. CursorLocation = adUseClient
     targetCn. Open ” PROVIDER = Microsoft. Jet. OL Edb. 3.51 ;
     Data Source = ”& tagFilName &“;”
     End If //追加新表
     For i = 0 To tabN - 1
      Set targetRst = New adodb. Recordset
      strSql = ”select 3 from ”& tabName (i)
      targetRst. Open strSql , targetCn , adOpenStatic , adLockPes2simistic , adCmdText
      Set sourceSet = New adodb. Recordset
      strSql = ”select 3 from ”& tabName (i) & strSQLApp
      sourceSet. Open strSql , sourceCn
      zdN = sourceSet. Fields. Count
      If sourceSet. EOF Then Go To hh
       sourceSet. MoveFirst
       Do While Not sourceSet. EOF
        targetRst. AddNew
        For j = 0 To zdN - 1
         If Trim (sourceSet. Fields (j) . Value) = ””Then
          targetRst. Fields (j) . Value = Null
         Else
           targetRst. Fields (j) . Value = Trim (sourceSet. Fields(j) . Value)
         End If //復制記錄
        Next
        targetRst. Update
        sourceSet. MoveNext
       Loop
       recN = targetRst. RecordCount
       hh :sourceSet. Close
       Set sourceSet = Nothing
       targetRst. Close
       Set targetRst = Nothing
      Next
      targetCn. Close
      Set targetCn = Nothing
      sourceCn. Close
      Set sourceCn = Nothing
    End Sub //刪除鏈接

      其中字符數組tabName (i) 中存放需備份的各數據表名, strSQLAPP 字符串中存放對數據表的限制條件where 子句內容。

      4、數據恢復

      如果要從Access中將數據恢復到SQL Server中,方法類似,僅僅是拷貝記錄的方向和以上相反,即從Access表往鏈接過來的SQL表中拷貝。

      安全方案

      因為Access屬小型數據庫,所以要保證其不被非法訪問?梢栽赩B程序中實現對備份數據庫的安全性接口,有以下兩種方法限制對Access的任意訪問:

     。1)給Access數據庫加口令,在VB程序中用口令打開數據庫。打開Access軟件,選中“工具”菜單,選擇“安全”項,選擇“加密/解密數據庫”,然后選擇備份數據庫的名字,就可以給這個數據庫加上密碼。這樣的話,任何人如果想打開備份數據庫,手動修改數據表內容,必須先輸入正確的訪問密碼,否則不能繼續操作。用VB程序打開數據庫時,必須提供訪問密碼,否則無法訪問數據庫。

     。2)給Access數據庫定義不同的用戶組和用戶權限,從而使不同級別的用戶可以分別讀或寫某表或視圖。打開Access軟件,選中“工具”菜單,選擇“安全”項,選擇“用戶/組權限”,在此可定義不同的組和用戶,并按組劃分用戶的權限級別,從而限制低或無權限的用戶執行某些操作。用VB 程序打開數據庫進行操作時,對不同的操作采用不同的用戶名和用戶密碼,從而區分有不同使用權限的人的訪問操作。

      備份方案的幾點建議

      1、在業余時間執行完全備份

      如果你的公司沒有工作在24時的環境之下,那么業余時間是執行備份的最佳時間。這既可以提高備份的性能,又可以減少備份對用戶的影響。

      2、安排一個完全備份在幾天內完成

      如果數據庫非常大,并且你不能在期限內完成一個完全備份,那么就把該備份進行分解。你可以在一部分數據庫中執行文件或文件組備份。照這樣,經過幾天,就可以備份所有的數據。

      3、使用差異備份

      如果你沒有時間每天晚上執行一個完全備份,那么就可以在一周之中執行差異備份,而在周末執行一個完全備份。

      4、建立一張合理的備份時間表

      一個提高正被備份的系統性能的最好辦法是不要做不必要的備份。必須根據要求確定最有效的備份時間表。不要做超過你所需要的備份,但是也不要因為性能而犧牲數據的安全。根據你的要求,建立對自己最有利的備份計劃。

      結束語

      該備份方案使用VB設計出友好方便的用戶界面,用戶只需點擊按鈕便可執行備份或恢復操作;而且用Access作備份數據庫,備份同樣的數據,其所占用的硬盤空間遠遠小于SQL數據庫所占空間,大大地提高了效率和節約了用戶資源。通過實踐檢驗,其運行效率比雙機備份要高得多。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>