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

首頁 > 數據庫 > SQL Server > 正文

SQL Server在AlwaysOn中使用內存表的“踩坑”記錄

2024-08-31 01:05:08
字體:
來源:轉載
供稿:網友

前言

最近因為線上sql/283939.html">alwayson環境的一個數據庫上使用內存表。經過大概一個星期監控程序發現了一個非常嚴重問題這個數據庫的日志文件不會截斷,已用空間一直在增加(存在定時的每個小時的日志備份),同時內存表數據庫文件也無法刪除,下面就介紹一下后面我的處理過程,話不多說了,來一起看看詳細的介紹吧。

數據庫:SQL Server2014 Enterprise Edition (64-bit)

刪除文件

使用一個單獨非alwayson環境的數據庫測試。

一、創建內存表

---創建內存表文件組ALTER DATABASE [test] ADD FILEGROUP [test_ag] CONTAINS MEMORY_OPTIMIZED_DATA GO ----創建內存表數據庫文件ALTER DATABASE [test] ADD FILE (  NAME = 'test_memory',  FILENAME ='D:/database/memory' ) TO FILEGROUP [test_ag]; GO

二、刪除內存表數據庫文件

USE [test]GOALTER DATABASE [test] REMOVE FILE [test_memory]GO

sql,server,alwayson,sqlserver,內存

備注:此時還未創建表,創建完后數據庫文件執行刪除就無法刪除,接下來試試在線文檔的刪除方法方法

三、官方相關的刪除方法

即使已使用“DBCC SHRINKFILE”操作清空 FILESTREAM 容器,但出于各種系統維護原因,數據庫可能仍然需要保留對已刪除文件的引用。 sp_filestream_force_garbage_collection (TRANSACT-SQL)將運行 FILESTREAM 垃圾回收器刪除這些文件時,則可以安全進行這些操作。 除非 FILESTREAM 垃圾回收器已從 FILESTREAM 容器中刪除所有文件,否則 ALTER DATABASEREMOVE FILE 操作將無法刪除 FILESTREAM 容器并返回錯誤。 建議使用以下過程刪除 FILESTREAM 容器。

1.運行DBCC SHRINKFILE (TRANSACT-SQL)帶有 EMPTYFILE 選項以將此容器的活動內容移動到其他容器

USE test; GO -- Create a data file and assume it contains data. ALTER DATABASE test ADD FILE (  NAME = Test1data,  FILENAME = 'D:/database/t1data.ndf',  SIZE = 5MB  ); GO -- Empty the data file. DBCC SHRINKFILE (test_memory, EMPTYFILE); GO

sql,server,alwayson,sqlserver,內存

2.確保已在 FULL 或 BULK_LOGGED 恢復模型中執行日志備份。

3.確保復制日志讀取器作業已運行(如果相關)。

sql,server,alwayson,sqlserver,內存

通過log_reuse_wait_desc的狀態可以看到當前數據庫已經無需日志備份,當然我已經執行過日志備份。

4.運行sp_filestream_force_garbage_collection (TRANSACT-SQL)強制垃圾回收器刪除不再需要此容器中的任何文件

USE [test]GO EXEC sp_filestream_force_garbage_collection @dbname = N'test' @filename = N' test_memory '; 

5.執行帶有 REMOVE FILE 選項的 ALTER DATABASE,以刪除此容器。

USE [test]GOALTER DATABASE [test] REMOVE FILE [test_memory]GO

sql,server,alwayson,sqlserver,內存

還是無法刪除!?。?/p>

四、問題分析

一開始是在alwayson的環境中刪除,提示由于副本的原因無法刪除。后面單獨在一個非alwayson的環境下的數據庫測試同樣是無法刪除,起初以為是創建了內存表的原因后面測試僅僅創建文件組和文件然后來刪除文件同樣是無法刪除,個人猜測有可能是buffer的緣故;在buffer中一直存在內存表相關的文件存在,通過執行DBCC DROPCLEANBUFFERS命令也無法清空buffer中的內存表對象。使盡渾身解數還是無法將它刪除掉,最后只能投降了?。?!線上環境等不下去;只能使用最不愿使用的生成表結構導出數據的辦法來重建新的數據庫。

生成腳本重建數據庫

創建一個新的數據庫同時保證當前數據庫可用(重命名當前的數據庫,新創建的數據庫使用之前的名稱這樣可以保證應用程序那邊不需要改變),這樣如果出現什么問題也可以及時的切換回來。

步驟如下(在允許停機維護的情況下進行):

1.禁用所有相關作業

2禁用應用程序登入用戶

同時保證相關進程事務都已完成。

ALTER LOGIN [test] DISABLEGOUSE [master]GOALTER DATABASE [test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;--將數據庫設置成單用戶并回滾當前連接USE [test];---保持連接操作,防止其它用戶此時進行連接GO

3.執行checkpoint刷新所有臟頁

CHECKPOINT---返回當前buffer中每個數據庫所占的buffer大小和buffer中臟頁的大小WITH CTE1 AS ( SELECT COUNT(*) * 8 / 1024 AS dirty_cached_size_MB ,  COUNT(*) AS dirty_pages,  CASE database_id  WHEN 32767 THEN 'ResourceDb'  ELSE DB_NAME(database_id)  END AS database_name FROM sys.dm_os_buffer_descriptors WHERE is_modified = 1 GROUP BY DB_NAME(database_id),database_id ), CET2 AS ( SELECT COUNT(*) * 8 / 1024 AS cached_size_MB ,  COUNT(*) AS pages,  CASE database_id  WHEN 32767 THEN 'ResourceDb'  ELSE DB_NAME(database_id)  END AS database_name FROM sys.dm_os_buffer_descriptors GROUP BY DB_NAME(database_id),database_id ) SELECT  CET2.database_name, CET2.cached_size_MB, --CET2.pages, CTE1.dirty_cached_size_MB --CTE1.dirty_pages  FROM CTE1 INNER JOIN CET2 ON CTE1.database_name = CET2.database_name---將數據庫選項改成多用戶訪問ALTER DATABASE [test] SET MULTI_USER;

4.生成數據庫腳本

sql,server,alwayson,sqlserver,內存

sql,server,alwayson,sqlserver,內存

sql,server,alwayson,sqlserver,內存

sql,server,alwayson,sqlserver,內存

5.重命名舊的數據庫

注意:如果數據庫是在alwayson中,需要先從可用性數據庫中刪除,否則無法重命名數據庫。

/*1.斷開數據庫所有連接同時禁止新的連接進來2.比如禁止登入用戶、將實例設為單用戶模式等。*/----1.設置數據庫脫機USE [master] ALTER DATABASE [test] SET OFFLINE WITH ROLLBACK IMMEDIATE;----2.手動修改數據庫物理文件名,例如將test.mdf改成test_old.mdf----3.語句修改USE [master] ALTER DATABASE [test] MODIFY FILE (NAME = test, FILENAME = 'C:/Program Files/Microsoft SQL Server/MSSQL12.MSSQLSERVER/MSSQL/DATA/test_old.mdf');GOALTER DATABASE [test] MODIFY FILE (NAME = test_log, FILENAME = 'C:/Program Files/Microsoft SQL Server/MSSQL12.MSSQLSERVER/MSSQL/DATA/test_old_log.ldf');GO---4.設置數據庫在線USE [master] ALTER DATABASE [test] SET ONLINE----5.修改數據庫邏輯文件名USE [test]GOALTER DATABASE [test] MODIFY FILE (NAME=N'test', NEWNAME=N'test_old')GOUSE [test]GOALTER DATABASE [test] MODIFY FILE (NAME=N'test_log', NEWNAME=N'test_old_log')GO----6.重命名數據庫USE [master] EXEC sp_renamedb N'test', N'test_old'; ----7.查詢SELECT *FROM sys.master_filesWHERE database_id = DB_ID('test_old');

6.創建新的數據庫同時導入腳本到新的數據庫

如果同時導出表結構和數據在ssms工具中執行可能會因為腳本過大無法執行,可以使用sqlcmd工具執行腳本導入,具體方法可以百度一下。當然還有其他方法就是只導出表結構然后通過“導出數據/導入數據”的方法同步數據。

注意:如果使用“導出數據/導入數據”的方法同步數據,注意勾選“啟用標示插入”

sql,server,alwayson,sqlserver,內存

7.其它

      1.如果存在alwayson記得將新的數據庫加入到可用性數據庫組中。

      2.將新的數據庫加入到備份作業中。

      3.對比新舊兩個數據庫的表數量是否相同。

      4.配置登入用戶新的數據庫權限。

總結

內存表是2014新引入的功能所以對于新功能的第一個版本使用要比較慎重,特別是在線上環境。雖然在上線之前做過測試,但是顯然備份這塊的測試往往比較容易被忽略因為沒有線上的這種環境。好在是這次影響的是一個新上的項目數據量和并發都很小且允許節假日停機維護;如果是非常大的系統對于需要導入導出數據肯定是非常頭疼的事情關鍵還得看允許停機的時長。因為自己在生產環境踩了坑,寫這篇文章希望后面的人可以避免踩坑。

備注:內存表在2014版本的alwayson中無法同步到輔助副本,這就導致了它的作用大打折扣,2016版本可以同步到輔助副本,建議有條件的直接上2016。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费电影一区| 亚洲人成网站免费播放| 最近2019免费中文字幕视频三| 久热在线中文字幕色999舞| 欧美国产一区二区三区| 夜夜嗨av一区二区三区免费区| 国产精品久久久久久久久久ktv| 欧美小视频在线观看| 欧美久久精品一级黑人c片| 亚洲午夜久久久久久久| 伊人伊成久久人综合网小说| 国产精品久久久久9999| 亚洲韩国日本中文字幕| 欧美日韩国产第一页| 亚洲精品电影网| 一本色道久久综合狠狠躁篇的优点| 日韩av黄色在线观看| 国产精品wwww| 91成人在线视频| 亚洲欧美成人一区二区在线电影| 亚洲精品电影网在线观看| 久久福利网址导航| 亚洲精品久久久久久久久久久久| 成人av色在线观看| 亚洲欧美精品伊人久久| 中文字幕在线亚洲| 国产在线观看91精品一区| 91日韩在线视频| 在线播放国产一区二区三区| 97在线视频免费播放| 亚洲美女免费精品视频在线观看| 日韩亚洲欧美中文高清在线| 伊人久久久久久久久久久久久| 亚洲天堂影视av| 亚洲免费一在线| 精品一区精品二区| 一区二区在线免费视频| 国外色69视频在线观看| 午夜精品久久久久久久久久久久| 日韩电影中文字幕在线观看| 亚洲性线免费观看视频成熟| 久久人人看视频| 97超视频免费观看| 国产精品永久免费观看| 日韩美女中文字幕| 国产精品视频导航| 国内外成人免费激情在线视频| 国产精品自拍偷拍| 狠狠做深爱婷婷久久综合一区| 欧美性做爰毛片| 亚洲美女www午夜| 国产精品一久久香蕉国产线看观看| 欧美最猛黑人xxxx黑人猛叫黄| 91精品久久久久久久| 亚洲国产日韩精品在线| 亚洲国产高清高潮精品美女| 久久久www成人免费精品| 国产精品九九久久久久久久| 欧美一区二区影院| 国产精品日韩欧美综合| 国产精品草莓在线免费观看| 国产成人自拍视频在线观看| 亚洲欧美制服中文字幕| 国产精品美女在线观看| 国产精品自拍偷拍| 韩国三级电影久久久久久| 日本国产高清不卡| 69视频在线免费观看| 国产精品久久久久高潮| 国产日韩欧美自拍| 欧美最近摘花xxxx摘花| 国产精品69av| 中文字幕日韩精品在线| 日韩精品亚洲元码| 日韩国产精品亚洲а∨天堂免| 久久五月天色综合| 欧美高清视频免费观看| 亚洲性线免费观看视频成熟| 97超碰色婷婷| 久久久国产视频| 中文字幕精品—区二区| 亚洲第一区在线| 欧美成人精品一区二区| 国产精品久久久久久久一区探花| 欧美亚洲国产视频| 日韩美女主播视频| 精品亚洲一区二区| 久久精品99久久久香蕉| 欧美俄罗斯乱妇| 亚洲性夜色噜噜噜7777| 欧美激情视频一区二区三区不卡| 久久精品亚洲热| 亚洲欧美综合图区| 欧美丰满少妇xxxx| 精品中文字幕视频| 亚洲一区二区三区在线免费观看| 4438全国成人免费| 亚洲wwwav| 欧美激情图片区| 狠狠躁夜夜躁久久躁别揉| 亚洲人成网站免费播放| 一本大道香蕉久在线播放29| 国产欧美精品日韩精品| 欧美成人午夜免费视在线看片| 美女久久久久久久| 亚洲综合日韩在线| 国产成人精品日本亚洲专区61| 国产精品精品视频| 日韩欧美在线一区| 国产精品高精视频免费| 亚洲欧美日韩图片| 美女视频久久黄| 欧美日韩国产成人高清视频| 日本精品va在线观看| 亚洲免费伊人电影在线观看av| 国产一区二区三区高清在线观看| 中文字幕在线日韩| 成人激情电影一区二区| 国产丝袜一区二区三区| 精品久久久久久电影| 亚洲欧美综合区自拍另类| 日韩欧美亚洲国产一区| 激情懂色av一区av二区av| 国产精品久久一区| 亚洲国产又黄又爽女人高潮的| 国产精品va在线| 一区二区三区国产在线观看| 青青草原成人在线视频| 国产精品视频一区二区高潮| 国产一区二区成人| 久久久在线视频| 91久久精品一区| 久久免费视频网站| 国产欧美精品在线播放| 综合av色偷偷网| 在线精品播放av| 日韩美女视频在线观看| 欧美放荡办公室videos4k| 国产精品久久在线观看| 亚洲视频专区在线| 国产精品视频xxx| 欧美韩日一区二区| 45www国产精品网站| 亚洲xxx自由成熟| 美乳少妇欧美精品| 国产日韩欧美成人| 精品日本美女福利在线观看| 日产精品99久久久久久| 国产一区二区黄| 国产精品白丝jk喷水视频一区| 成人激情av在线| 亚洲精品国精品久久99热| 色黄久久久久久| 国产精品嫩草视频| 97在线视频免费播放| 青草成人免费视频| 国产日韩欧美91| 亚洲三级av在线| 最近2019年手机中文字幕| 日韩精品中文字幕视频在线| 日本精品视频网站| 亚洲国产另类 国产精品国产免费| 欧美精品在线网站| 91视频8mav|