位置: 编程技术 - 正文

SQL Server在AlwaysOn中使用内存表的“踩坑”记录

编辑:rootadmin

推荐整理分享SQL Server在AlwaysOn中使用内存表的“踩坑”记录,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

最近因为线上alwayson环境的一个数据库上使用内存表。经过大概一个星期监控程序发现了一个非常严重问题这个数据库的日志文件不会截断,已用空间一直在增加(存在定时的每个小时的日志备份),同时内存表数据库文件也无法删除,下面就介绍一下后面我的处理过程,话不多说了,来一起看看详细的介绍吧。

数据库:SQL Server Enterprise Edition (-bit)

删除文件

使用一个单独非alwayson环境的数据库测试。

一、创建内存表

二、删除内存表数据库文件

备注:此时还未创建表,创建完后数据库文件执行删除就无法删除,接下来试试在线文档的删除方法方法

三、官方相关的删除方法

即使已使用“DBCC SHRINKFILE”操作清空 FILESTREAM 容器,但出于各种系统维护原因,数据库可能仍然需要保留对已删除文件的引用。 sp_filestream_force_garbage_collection (TRANSACT-SQL)将运行 FILESTREAM 垃圾回收器删除这些文件时,则可以安全进行这些操作。 除非 FILESTREAM 垃圾回收器已从 FILESTREAM 容器中删除所有文件,否则 ALTER DATABASEREMOVE FILE 操作将无法删除 FILESTREAM 容器并返回错误。 建议使用以下过程删除 FILESTREAM 容器。

1.运行DBCC SHRINKFILE (TRANSACT-SQL)带有 EMPTYFILE 选项以将此容器的活动内容移动到其他容器

2.确保已在 FULL 或 BULK_LOGGED 恢复模型中执行日志备份。

3.确保复制日志读取器作业已运行(如果相关)。

通过log_reuse_wait_desc的状态可以看到当前数据库已经无需日志备份,当然我已经执行过日志备份。

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

5.执行带有 REMOVE FILE 选项的 ALTER DATABASE,以删除此容器。

还是无法删除!!!

四、问题分析

一开始是在alwayson的环境中删除,提示由于副本的原因无法删除。后面单独在一个非alwayson的环境下的数据库测试同样是无法删除,起初以为是创建了内存表的原因后面测试仅仅创建文件组和文件然后来删除文件同样是无法删除,个人猜测有可能是buffer的缘故;在buffer中一直存在内存表相关的文件存在,通过执行DBCC DROPCLEANBUFFERS命令也无法清空buffer中的内存表对象。使尽浑身解数还是无法将它删除掉,最后只能投降了!!!线上环境等不下去;只能使用最不愿使用的生成表结构导出数据的办法来重建新的数据库。

SQL Server在AlwaysOn中使用内存表的“踩坑”记录

生成脚本重建数据库

创建一个新的数据库同时保证当前数据库可用(重命名当前的数据库,新创建的数据库使用之前的名称这样可以保证应用程序那边不需要改变),这样如果出现什么问题也可以及时的切换回来。

步骤如下(在允许停机维护的情况下进行):

1.禁用所有相关作业

2禁用应用程序登入用户

同时保证相关进程事务都已完成。

3.执行checkpoint刷新所有脏页

4.生成数据库脚本

5.重命名旧的数据库

注意:如果数据库是在alwayson中,需要先从可用性数据库中删除,否则无法重命名数据库。

6.创建新的数据库同时导入脚本到新的数据库

如果同时导出表结构和数据在ssms工具中执行可能会因为脚本过大无法执行,可以使用sqlcmd工具执行脚本导入,具体方法可以百度一下。当然还有其他方法就是只导出表结构然后通过“导出数据导入数据”的方法同步数据。

注意:如果使用“导出数据导入数据”的方法同步数据,注意勾选“启用标示插入”

7.其它

1.如果存在alwayson记得将新的数据库加入到可用性数据库组中。

2.将新的数据库加入到备份作业中。

3.对比新旧两个数据库的表数量是否相同。

4.配置登入用户新的数据库权限。

总结

内存表是新引入的功能所以对于新功能的第一个版本使用要比较慎重,特别是在线上环境。虽然在上线之前做过测试,但是显然备份这块的测试往往比较容易被忽略因为没有线上的这种环境。好在是这次影响的是一个新上的项目数据量和并发都很小且允许节假日停机维护;如果是非常大的系统对于需要导入导出数据肯定是非常头疼的事情关键还得看允许停机的时长。因为自己在生产环境踩了坑,写这篇文章希望后面的人可以避免踩坑。

备注:内存表在版本的alwayson中无法同步到辅助副本,这就导致了它的作用大打折扣,版本可以同步到辅助副本,建议有条件的直接上。

好了,

标签: SQL Server在AlwaysOn中使用内存表的“踩坑”记录

本文链接地址:https://www.jiuchutong.com/biancheng/347364.html 转载请保留说明!

上一篇:SQL Server 2012 sa用户登录错误18456的解决方法

下一篇:SQL Server AlwaysOn读写分离配置图文教程

  • 收到待报解预算收入怎么查退的什么税
  • 加工承揽属于劳务关系吗
  • 应付账款应收账款
  • 公司刚成立没有收入但是有支出怎么记账
  • 向银行借入短期借款偿还前欠货款
  • 当月出租设备需要发票吗
  • 电子商务公司开业活动流程
  • 小规模30万免税是含税还是不含税
  • 基本户购买支票需要什么
  • 甲供材能否开具增值税专用发票
  • 固定资产改变用途进项转出
  • 上月暂估收入本月开票增值税实操
  • 普通商户怎么开小票
  • 固定资产原值增加当月计提折旧吗
  • 如何解决私账流水过大的问题?
  • 企业资产净资产
  • 仲裁费用计入什么会计科目
  • 拿到一个材料如何加工
  • 出售旧机床的账务处理
  • 投资性房地产房租计入什么会计科目
  • 所得税相关分录
  • 超过一年的保证金怎么交个税
  • 所得税汇算清缴补税的会计处理
  • 税控技术服务费每年都可以抵扣吗
  • 汇算清缴时多缴的企业所得税怎么做会计分录
  • 电子税务局实名采集怎么弄
  • 折让冲减的产品销售收入
  • 房产转让的房产税怎么算
  • 企业间借款利息开票税目
  • 不动产取得以什么为要件
  • 红字发票是销货单据吗
  • 多缴纳的增值税怎么申请抵税
  • 投资者与被投资者的名人
  • iphone有没有
  • 笔记本开机黑屏不显示任何东西
  • 机械设备购置的程序是什么
  • 销售汇总表格模板
  • php yield 异步
  • php储存数据的方法
  • bestars皮纳
  • 股东无偿投入的土地需要摊销吗
  • php实现会话的步骤
  • 小规模纳税人当月应交增值税怎么算
  • 技术服务费增值税税率1%
  • 免税进项抵扣要做账吗
  • 外聘人员差旅费怎么做账
  • 固定资产折旧会影响净利润吗
  • sqlserver2008数据库还原
  • 本年利润亏损还需要交所得税吗
  • 关于工程施工的法律法规
  • 消防设施安装费收费标准
  • 利润分配的账务处理实验报告
  • 纯外贸企业进项税怎么抵扣
  • 房地产企业简易计税和一般计税的区别
  • 投资性房地产转换日的确定
  • 免增值税进项税怎么弄
  • 网银转账被退回来了
  • 残保金超比例奖励政策
  • 销售商品发生的销售退回属于期间费用吗
  • 承租人对融资租赁业务进行会计处理的方法有( )
  • sql server的go
  • mysql导入导出sql文件
  • mysql使用语句
  • xp系统提升cpu最高性能
  • mac怎么保存网页到桌面
  • win10 rs5
  • red hat linux怎么用
  • 硬盘读盘慢修复
  • ubuntu zed
  • cyb2k.exe是安全进程吗 cyb2k进程危险吗
  • 禁止windows安装程序
  • win10预览版和正式版
  • ssh远程登录设置
  • win7系统安装谷歌浏览器
  • 如何用nodejs搭建服务端
  • 比较常见的电子商务模式
  • js封装是什么意思
  • jquery的实现原理
  • 登录上海电子税务局单位社保查询不到当月未交的
  • 云南4050人员2020最新政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设