基于SQLSever的數據庫結構自動升級方法
【技術領域】
[0001]本發明涉及數據庫升級技術領域,尤其涉及一種基于SQLSever的數據庫結構自動升級方法。
【背景技術】
[0002]—套系統,在其整個生命周期內,伴隨客戶增量需求和實現邏輯的變更,常常需要進行升級。包括軟件升級和數據庫升級。數據庫升級主要考慮增量升級,減量升級則沒有意義。主要包括表增加、字段增加、字段類型和長度變更等。
【發明內容】
[0003]本發明要解決的技術問題在于提供一種基于SQLSever的數據庫結構自動升級方法,以解決現有技術存在的問題。
[0004]為解決上述技術問題,本發明采用以下技術方案:
基于SQLSever的數據庫結構自動升級方法,包括:
使用SQLSever數據庫工具生成新版本的數據庫腳本;
遍歷舊版本庫表和新版本數據庫腳本,對新版本的數據庫腳本與舊版本的數據庫表進行對比處理,獲取處理后的數據,根據處理后的數據對舊版本的數據庫表進行修改。
[0005],所述對新版本的數據庫腳本與舊版本的數據庫表進行對比處理,獲取處理后的數據,根據獲取的處理后的數據對舊版本的數據庫表進行修改,包括:
遍歷新版本的數據庫腳本的表名稱和舊數據庫表的表名稱,對它們一一進行對比比較,判斷是否是相同的名稱,篩選出新版本的數據庫腳本中與舊版本數據庫表相比新增加的表名稱,在舊版本的數據庫表中為新增加的表名稱建立新的庫表結構。
[0006]對具有相同表名稱的表對象,進一步依次判斷新版本的數據庫腳本與舊版本的數據庫表中每個表相對的每個字段的字段類型是否一致,不一致則使用新版本的數據庫腳本的字段類型代替舊版本的數據庫表的字段類型,對舊版本的數據庫表進行升級,一致則不替換。
[0007]對具有相同表名稱的表對象,進一步判斷新版本的數據庫腳本對比舊版本的數據庫表每個表相對應的每個字段長度是否具有增量,如果具有增量則使用新版本的數據庫腳本的字段數據代替舊版本的數據庫表的字段數據,對舊版本的數據庫表進行升級,不具有增量則不替換。
[0008]本發明的有益效果:本發明可以自動進行數據庫升級問題,解決用戶不會操作sqlsever工具進行備份還原和升級的問題。
【附圖說明】
[0009]圖1為本發明的流程圖。
【具體實施方式】
[0010]如圖1所示本發明提供一種基于SQLSever的數據庫結構自動升級方法升級時,它首先使用SQLSever數據庫工具生成新版本的數據庫腳本;然后遍歷舊版本的數據庫表,同時遍歷新版本數據庫腳本,對新版本的數據庫腳本與舊版本的數據庫表進行對比處理,獲取處理后的數據,根據獲取的處理后的數據對舊版本的數據庫表進行修改,進行數據庫表的升級。
[0011]具體來說,首先遍歷新版本的數據庫腳本和舊版本的數據庫,獲取新版本的數據庫腳本和舊版本數據庫的表數目和表名,對新版本的數據庫腳本和舊版本的數據庫的表名一一進行對比比較,判斷是否是相同的表名,一一進行判斷以后,篩選出新版本的數據庫腳本中與舊版本數據庫表相比新增加的表名,然后對新增加的表名在舊版本的數據庫表中建立新的庫表結構,其中相同表名稱比較字段個數,對于不同字段名稱的進行增量添加,對于舊版有而新版沒有的字段則忽略。例如說,在舊版本的數據庫中存在10個表名,而新的數據庫腳本中存在13個表名,對他們--進行對比篩選,找出新版本的數據庫腳本中不存在于舊版本中的3個表名,然后在舊版本的數據庫中為這三個新增表新建表結構,即對舊版本的數據庫表進行更新。
[0012]新增表增加完以后,對新版本的數據庫腳本中與舊版本數據庫中具有相同表名的表對象,對新版本的數據庫腳本與舊版本數據庫均、以一列為一個字段,依次判斷新版本的數據庫腳本與舊版本的數據庫表中每個表相對應的每個字段的字段類型是否一致,不一致則使用新版本的數據庫腳本的字段類型代替舊版本的數據庫表的字段類型,對舊版本的數據庫表進行升級,一致則不替換。
[0013]在對數據庫中表的字段類型進行判斷時,還需要判斷新版本的數據庫腳本中與舊版本數據庫中相同名稱的表對應的相同的字段的長度是否有變動,如果有變動則使用新版本的數據庫腳本的字段數據代替舊版本的數據庫表的字段數據,不具有變動則不改變。
[0014]在進行表名判斷、字段類型判斷、字段長度判斷的過程中,同時根據新版數據庫腳本對舊版數據庫進行修改,完成自動升級。
[0015]為了數據的安全和后續的查看,本發明在省級數據庫之前首先進行數據的備份,而在升級后,還可以進行數據的還原,數據庫備份和還原是基于Sqlserver企業管理器的備份和還原API實現的。具體如下:
一,備份數據庫
1).指定備份數據庫,內部代碼里執行sql命令BACKUP DATABASE DBName TO DISK =’C:\ DBName.bak' WITH FORMAT;默認完全備份,即完整數據庫備份,可以備份整個數據庫,包含用戶表、系統表、索引、視圖和存儲過程等所有數據庫對象。這是大多數人常用的方式,安全性好,但需要花費相對多的時間和空間。
[0016]二,還原數據庫
1).需要提供數據庫備份文件,DBName.bak文件;
2).依據bak備份文件,代碼里執行sql命令RESTORE DATABASE DBName FROM DISK=,C:\ DBName.bak’ WITH REPLACE, MOVE DBName TO ’C:\DBName.mdf’,MOVE DBName_log’ TO ’ C:\ DBName.ldf’
例如:一返回由備份集內包含的數據庫和日志文件列表組成的結果集返回由備份集內包含的數據庫和日志文件列表組成的結果集
RESTORE FILELISTONLY FROM DISK = ’c:\ DBName.bak’
—還原由BACKUP備份的數據庫
還原由 RESTORE DATABASE DBName FROM DISK =,c:\ DBName.bak’
-指定還原后的數據庫物理文件名稱及路徑,這里得在SQL Server數據庫管理系統中,
先指定還原后的數據庫物理文件名稱及路徑,數據庫管理系統中,指定還原后的數據庫物理文件名稱及路徑
創建數據庫名為Test的數據庫,的數據庫,并且指定mdf文件和ldf文件在C盤test文件夾下.文件夾下.否則,在還原的時候,找不到指定的路徑.在還原的時候,找不到指定的路徑.RESTORE DATABASE Test FROM DISK = ’c:\ DBName.bak’ WITH MOVE ’DBName’TO ’c:\test\testdb.mdf’,MOVE ’ DBName _log’ TO ’c:\test\testdb.ldf’ MOVE,logical_file_name,TO ' operating_system_file_name'指定應將給定的logical_file_name 移到 operating_system_file_name.默認情況下,logical_file_name將還原到其原始位置.如果使用RESTORE語句將數據庫復制到相同或不同的服務器上,則可能需要使用MOVE選項重新定位數據庫文件以避免與現有文件沖突.可以在不同的MOVE語句中指定數據庫內的每個邏輯文件.一強制還原,加上REPLACE參數,則在現有數據庫基礎上強制還原.強制還原,參數,則在現有數據庫基礎上強制還原.強制還原
RESTORE DATABASE Test FROM DISK = ’c:\ DBName.bak’ WITH REPLACE, MOVE ’DBName ’ TO ’c:\test\testdb.mdf’,MOVE ’ DBName _log’ TO ’c:\test\testdb.ldf’。
【主權項】
1.基于SQLSever的數據庫結構自動升級方法,其特征在于,包括: 使用SQLSever數據庫工具生成新版本的數據庫腳本; 遍歷舊版本庫表和新版本數據庫腳本,對新版本的數據庫腳本與舊版本的數據庫表進行對比處理,獲取處理后的數據,根據處理后的數據對舊版本的數據庫表進行修改。2.根據權利要求1所述的基于SQLSever的數據庫結構自動升級方法,其特征在于,所述對新版本的數據庫腳本與舊版本的數據庫表進行對比處理,獲取處理后的數據,根據獲取的處理后的數據對舊版本的數據庫表進行修改,包括: 遍歷新版本的數據庫腳本的表名稱和舊數據庫表的表名稱,對它們一一進行對比比較,判斷是否是相同的名稱,篩選出新版本的數據庫腳本中與舊版本數據庫表相比新增加的表名稱,在舊版本的數據庫表中為新增加的表名稱建立新的庫表結構。3.根據權利要求2所述的基于SQLSever的數據庫結構自動升級方法,其特征在于:對具有相同表名稱的表對象,進一步依次判斷新版本的數據庫腳本與舊版本的數據庫表中每個表相對的每個字段的字段類型是否一致,不一致則使用新版本的數據庫腳本的字段類型代替舊版本的數據庫表的字段類型,對舊版本的數據庫表進行升級,一致則不替換。4.根據權利要求2所述的基于SQLSever的數據庫結構自動升級方法,其特征在于:對具有相同表名稱的表對象,進一步判斷新版本的數據庫腳本對比舊版本的數據庫表每個表相對應的每個字段長度是否具有增量,如果具有增量則使用新版本的數據庫腳本的字段數據代替舊版本的數據庫表的字段數據,對舊版本的數據庫表進行升級,不具有增量則不替換。
【專利摘要】基于SQLSever的數據庫結構自動升級方法,包括:使用SQLSever數據庫工具生成新版本的數據庫腳本;遍歷舊版本庫表和新版本數據庫腳本,對新版本的數據庫腳本與舊版本的數據庫表進行對比處理,獲取處理后的數據,根據處理后的數據對舊版本的數據庫表進行修改。本發明可以自動進行數據庫升級問題,解決用戶不會操作sqlsever工具進行備份還原和升級的問題。
【IPC分類】G06F17/30, G06F11/14
【公開號】CN105373631
【申請號】CN201510950276
【發明人】張斌, 尚會領, 宋社平, 雷亞歌
【申請人】河南思維自動化設備股份有限公司
【公開日】2016年3月2日
【申請日】2015年12月18日