亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

sql 作業+游標 自動備份數據庫

2024-07-21 02:51:09
字體:
來源:轉載
供稿:網友
sql 作業+游標 自動備份數據庫前言

昨天有個同事在客戶的服務器上面弄數據庫,不小心執行了一條 sql 語句

1 TRUNCATE TABLE xxx

碉堡了吧,數據全沒了 - - ,然后就是在網上拼命的搜索關于數據恢復的軟件,搞了一下午還是回不來了。

需求來了

后面老大就讓我寫一個作業每天備份一次數據庫,且只需要備份一些重要的表。

如何實現

作業肯定不是難點,難點是怎么把需要的表的數據拿出來存放到新的數據庫中。

我首先就想到了sql中的導出數據功能,結果是可行的,可問題來了那個是使用工具導出的,用sql語句咋寫了,反正我是不會,有誰會的告訴一下哈。

后面在百度谷歌上找啊找啊,找到了個bcp

1 EXEC 數據庫名..xp_cmdshell 'bcp 表名 out 文件路徑 -c -T -U''賬號'' -P''密碼'''

結果發現這個只能導出文件,像txt,xls,csv等一些,不是我想要的mdf啊。(可能是我不會用落)

最終解決的方法
1 select * into [備份的數據庫].dbo.表名  from [原數據庫].dbo.表名

意思是往[備份的數據庫]里增加一個表,表結構與數據都從[原數據庫]的表中復制(反正我是這么理解的 - -)

總體思路及代碼

1 新建數據庫

數據庫名我是根據原始數據庫名加上當前日期命名的 testdb_bak_年_月_日

創建數據庫的代碼

 1 declare @fromDataBaseName nvarchar(50) --原數據庫名稱 2 set @fromDataBaseName='testdb' 3 declare @errorCount int --錯誤數 4 declare @yearMonthDay nvarchar(50) --年_月_日 5 select @yearMonthDay=Datename(year,GetDate())+'_'+Datename(month,GetDate())+'_'+Datename(day,GetDate()) 6 declare @baseName nvarchar(50)--數據庫名稱 7 set @baseName=@fromDataBaseName + '_bak_' + @yearMonthDay --數據庫名稱為 gPSDb_bak_xx_xx_xx 8  9 declare @createBase nvarchar(500) --創建數據庫用的sql語句10 set @createBase='create database [' + @baseName + ']11  on  PRimary(name=['+ @baseName + '_Data],filename=''D:/GpsdbBak/' + @baseName + '_Data.mdf'',size=5mb,maxsize=100mb, filegrowth=15%)12 log on(name=['+ @baseName + '_log],filename=''D:/GpsdbBak/' + @baseName + '_log.ldf'',size=2mb,filegrowth=1mb)'13 print @createBase14 exec (@createBase) --執行創建數據庫15 set @errorCount=@@ERROR

2 獲取原數據庫中經過刷選的表然后復制到上面新建的表中

獲取原數據庫中所有的表名,sql 語句如下

use [testdb]select name from sysobjects where type = 'U' and --獲取所有表名   (CHARINDEX('gps_position_',name)=0 and --帶有這個的表不要   CHARINDEX('buf',name)=0 and --臨時表不要   name <> 'gps_log')  --日志表不要   ORDER BY Name 

3 游標

得到了所有表之后肯定就是最后的關鍵步驟,復制表到新數據庫,這里我是用游標實現的。

 1 use [testdb]   2    declare test_Cursor  cursor local for --定義一個游標 3     4    select name from sysobjects where type = 'U' and --獲取所有表名 5    (CHARINDEX('gps_position_',name)=0 and --帶有這個的表不要 6    CHARINDEX('buf',name)=0 and --臨時表不要 7    name <> 'gps_log')  --日志表不要 8    ORDER BY Name  9   10    open test_Cursor--打開游標11    declare @table_name nvarchar(50)12    fetch next from test_Cursor into @table_name 13     while @@FETCH_STATUS=014      begin 15       if(@table_name<>'')16        begin      17         exec ('select * into [' + @baseName +'].dbo.' + @table_name +' from ['+ @fromDataBaseName +'].dbo.' + @table_name) --關鍵的一語句代碼 18       fetch next from test_Cursor into @table_name 19      end20 close test_Cursor21 DEALLOCATE test_Cursor
完整代碼
 1 /* 2 備份數據腳本,將@fromDataBaseName(原數據庫備份到@baseName數據庫中) 3 需注意的地方 4 1:需要在D盤建立一個名為GpsdbBak的文件夾 5 2:需要根據實際情況給fromDataBaseName變量賦值 6 3:找到use 修改use后面的數據庫名稱為實際情況下的 7 */ 8 declare @fromDataBaseName nvarchar(50) --原數據庫名稱 9 set @fromDataBaseName='testdb'10 declare @errorCount int --錯誤數11 declare @yearMonthDay nvarchar(50) --年_月_日12 select @yearMonthDay=Datename(year,GetDate())+'_'+Datename(month,GetDate())+'_'+Datename(day,GetDate())13 declare @baseName nvarchar(50)--數據庫名稱14 set @baseName=@fromDataBaseName + '_bak_' + @yearMonthDay --數據庫名稱為 gpsdb_bak_xx_xx_xx15 16 declare @createBase nvarchar(500) --創建數據庫用的sql語句17 set @createBase='create database [' + @baseName + ']18  on  primary(name=['+ @baseName + '_Data],filename=''D:/GpsdbBak/' + @baseName + '_Data.mdf'',size=5mb,maxsize=100mb, filegrowth=15%)19 log on(name=['+ @baseName + '_log],filename=''D:/GpsdbBak/' + @baseName + '_log.ldf'',size=2mb,filegrowth=1mb)'20 print @createBase21 exec (@createBase) --執行創建數據庫22 set @errorCount=@@ERROR23 if(@errorCount=0)24 begin25 use [testdb]  26    declare test_Cursor  cursor local for --定義一個游標   27    select name from sysobjects where type = 'U' and --獲取所有表名28    (CHARINDEX('gps_position_',name)=0 and --帶有這個的表不要29    CHARINDEX('buf',name)=0 and --臨時表不要30    name <> 'gps_log')  --日志表不要31    ORDER BY Name   32    open test_Cursor--打開游標33    declare @table_name nvarchar(50)34    fetch next from test_Cursor into @table_name 35     while @@FETCH_STATUS=036      begin 37       if(@table_name<>'')38        begin      39         exec ('select * into [' + @baseName +'].dbo.' + @table_name +' from ['+ @fromDataBaseName +'].dbo.' + @table_name) --關鍵的一語句代碼 40       fetch next from test_Cursor into @table_name 41      end42 close test_Cursor43 DEALLOCATE test_Cursor44 end
待完善的問題

不知道同學們發現沒有,如果想換需要備份的數據庫,則需要改兩個地方,注釋說明那里的2,3點,這兩個其實都是同一個數據庫名,下面的那個 use testdb,不知道能不能像執行sql語句一樣 exec ('use testdb'),如果可以的話那就換數據庫的話改下set @fromDataBaseName='testdb' 這句就O了。

作業

接下來就是放到作業里面去了,這個直接上圖了。

1

2

3

4

最后面就O了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人网址在线观看| 国产美女主播一区| 国产精品久久久久久久久久99| 国产精品综合不卡av| 欧美精品videossex性护士| 国产+人+亚洲| 欧美日韩国产精品专区| 日韩电影中文字幕一区| 88国产精品欧美一区二区三区| 欧美老女人性生活| 欧美大尺度电影在线观看| 日韩最新在线视频| 日韩av在线播放资源| 欧美—级a级欧美特级ar全黄| 一区二区三区在线播放欧美| 57pao成人永久免费视频| 国产精品久久久久久亚洲影视| 国产成人一区三区| 国产精品日韩欧美| 国产成人短视频| 91精品美女在线| 国产成人极品视频| 欧美黄色小视频| 亚洲视频欧洲视频| 91在线|亚洲| 91视频国产高清| 成人综合网网址| 亚洲欧美国产精品久久久久久久| 亚洲第一中文字幕在线观看| 日韩电影视频免费| 亚洲国产精品久久久久久| 精品久久香蕉国产线看观看gif| 亚洲精品视频免费| 2024亚洲男人天堂| 成人黄色免费在线观看| 欧美—级a级欧美特级ar全黄| 亚洲国产精品悠悠久久琪琪| 欧美极品在线视频| 国产精品日韩在线观看| 国产精品欧美激情| 欧美大荫蒂xxx| 国内免费精品永久在线视频| 91av视频导航| 欧美在线播放视频| 91国内产香蕉| 中日韩美女免费视频网站在线观看| 91福利视频网| 欧美成人手机在线| 日韩av中文在线| 亚洲欧美国产精品专区久久| 国产成人综合精品在线| 精品一区二区三区电影| 国产不卡一区二区在线播放| 国产成人小视频在线观看| 在线观看亚洲视频| 国产97在线视频| 97在线精品国自产拍中文| 欧美激情三级免费| 精品国产一区二区三区久久久| 亚洲xxx自由成熟| 日韩亚洲国产中文字幕| 国产精品一区久久| 国产精品极品在线| 日韩av中文字幕在线免费观看| 成人免费激情视频| 午夜精品久久久久久久99热浪潮| 久久视频在线视频| 九色精品免费永久在线| 国产精品人成电影在线观看| 日韩美女视频免费看| 亚洲最大av网站| 国产精品视频永久免费播放| 久久精品国产91精品亚洲| 精品久久久久久久大神国产| 亚洲欧洲av一区二区| 日韩一区二区三区国产| 亚洲国产精品va在线| 亚洲国产精品专区久久| 在线性视频日韩欧美| 亚洲成人精品视频| 欧美性xxxxx极品娇小| 欧美性猛xxx| 日韩人体视频一二区| 91精品国产高清自在线看超| 久久久精品视频成人| 成人免费福利在线| 疯狂欧美牲乱大交777| 精品美女国产在线| 日本一本a高清免费不卡| 亚洲美女激情视频| 日韩av电影中文字幕| 欧美激情在线一区| 欧美黑人国产人伦爽爽爽| 亚洲免费人成在线视频观看| 国产有码在线一区二区视频| 国产精品激情av在线播放| 日韩激情av在线免费观看| www国产精品视频| 国产不卡av在线免费观看| 色天天综合狠狠色| 欧美性xxxx极品hd欧美风情| 精品毛片三在线观看| 欧洲成人午夜免费大片| 国产精品亚洲片夜色在线| 亚洲a∨日韩av高清在线观看| 亚洲精品日韩激情在线电影| 成人a在线视频| 亚洲国产成人爱av在线播放| 91精品国产综合久久香蕉的用户体验| 久久亚洲成人精品| 日本免费一区二区三区视频观看| 日韩欧美大尺度| 成人h片在线播放免费网站| 成人深夜直播免费观看| 欧美日韩国产激情| 国产日韩精品在线播放| 亚洲自拍另类欧美丝袜| 国产精品久久久久久久久久尿| 成人黄色免费看| 日韩精品久久久久久福利| 日韩女优人人人人射在线视频| 久久婷婷国产麻豆91天堂| 亚洲影院色在线观看免费| 久久视频国产精品免费视频在线| 亚洲精品成人网| 日韩av网站导航| 亚洲xxxxx电影| 久久精品成人欧美大片| 欧美性猛交xxxx乱大交3| 日韩成人在线视频| 97不卡在线视频| 成人黄色午夜影院| 91九色蝌蚪国产| 51色欧美片视频在线观看| 欧美日韩亚洲精品内裤| 91成人在线播放| 久久久久久久亚洲精品| 在线观看国产精品91| 久久久亚洲影院你懂的| 91亚洲一区精品| 国产成人一区二区三区| 日韩精品中文字幕有码专区| 欧美日韩一二三四五区| 亚洲国产精品悠悠久久琪琪| 国产日韩欧美影视| 精品国产一区二区三区四区在线观看| 精品调教chinesegay| 久久久噜噜噜久久中文字免| 精品久久久视频| 欧美高清不卡在线| 亚洲第一中文字幕在线观看| 亚洲女人天堂视频| 色一区av在线| 97色伦亚洲国产| 成人午夜激情免费视频| 日韩高清免费观看| 日韩高清电影好看的电视剧电影| 欧美视频在线免费看| www国产91| 91精品久久久久久久久久久久久久| 国产日韩欧美一二三区| 91精品国产综合久久香蕉最新版| 国产美女久久久| 精品久久久av|