Sql 亚马逊 RDS 日志文件问题上的服务器
Sql server on amazon RDS LogFile issue
我在 Amazon RDS 上有一个 Sql Server 2008 r2 Express 实例,配备 30gb SSD。此实例的存储 space 今天已满。事实上,我决定从我的一个数据库中清除一些软删除的行。所以我在 sql management studio 上写了我的查询,但我收到了那个错误。
Msg 9002, Level 17, State 4, Line 1
The transaction log for database 'db_name' is full. To find out why space in the >log cannot be reused, see the log_reuse_wait_desc column in sys.databases
那个实例上有很多数据库,我只在一个数据库中遇到了这个问题。
我尝试了很多不同的方法来解决如下问题:
- 试图清理一些存储,从其他数据库中删除数据
- 试图将 log_reuse_wait_desc 更新为空
- 尝试按照此 post how to change log_reuse_wait and log_reuse_wait_desc
中所述更改数据库配置并缩小日志文件
尝试使用该查询
将 "tracefile retention" 更改为 0
exec rdsadmin..rds_set_configuration 'tracefile retention',0;
其中一些 运行 和一些 returns 错误,但其中 none 是我的解决方案。
有什么方法可以解锁我的数据库吗?真烦人,除了这个数据库中的 select 数据,我不能做任何操作!!
在阅读了有关 MS SQL SERVER 日志记录的多个小时后,我找到了问题的根源和 "Solution"。
MS Sql 服务器在没有日志记录的情况下无法工作,但它为我们提供了足够的模式来自定义我们想要的日志记录类型。您可以在此处找到恢复模型 https://msdn.microsoft.com/en-us/library/ms189275.aspx。
现在我不知道每个数据库可用于登录 Amazon rds 的确切存储量,但如果您遇到我在问题中描述的此类问题,您可以使用下面描述的场景来面对它们.
第一步(检查实例的数据库大小)
EXEC sp_MSForEachDB 'SELECT DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name, (size*8)/1024 SizeMB
FROM sys.master_files
WHERE DB_NAME(database_id) = ''?'' '
第二步(设置所需的恢复模型)
如果您的查询已经有问题,那么解决这些问题的最佳方法是 select 使用这样的查询简单地恢复模型。
ALTER DATABASE <db_name> SET RECOVERY SIMPLE
ATTENTION it's not the best model, it's the most "free" model. When you have >complete your job you have to choose the appropriate RECOVERY MODEL depended on >your project.
第三步(缩小日志文件)
如果您在第二步中使用了 select 简单恢复模型,那么您可能已经解决了问题并且可以执行查询,但我建议您缩小日志文件。 select 根据这里的手册 https://msdn.microsoft.com/en-us/library/ms189493.aspx.
缩小日志文件的方法非常简单
下面我给你举个例子,找到日志文件名并缩小它的代码。
Declare @logName nvarchar(255)
SELECT @logName= name FROM sys.master_files WHERE database_id = db_id() AND type = 1
DBCC SHRINKFILE(@logName, 250, TRUNCATEONLY)
结论
如您所知,我离真正的解决方案还很远,因为它取决于 Amazon RDS 配置,但我在这里的所有回答都是在谈论症状的解决方案,而不是必须解决的真正问题的解决方案当您的项目需要执行大量查询(更新、删除)时,请使用将数据库日志文件保持在正常大小的方法。
我在 Amazon RDS 上有一个 Sql Server 2008 r2 Express 实例,配备 30gb SSD。此实例的存储 space 今天已满。事实上,我决定从我的一个数据库中清除一些软删除的行。所以我在 sql management studio 上写了我的查询,但我收到了那个错误。
Msg 9002, Level 17, State 4, Line 1 The transaction log for database 'db_name' is full. To find out why space in the >log cannot be reused, see the log_reuse_wait_desc column in sys.databases
那个实例上有很多数据库,我只在一个数据库中遇到了这个问题。
我尝试了很多不同的方法来解决如下问题:
- 试图清理一些存储,从其他数据库中删除数据
- 试图将 log_reuse_wait_desc 更新为空
- 尝试按照此 post how to change log_reuse_wait and log_reuse_wait_desc 中所述更改数据库配置并缩小日志文件
尝试使用该查询
将 "tracefile retention" 更改为 0exec rdsadmin..rds_set_configuration 'tracefile retention',0;
其中一些 运行 和一些 returns 错误,但其中 none 是我的解决方案。
有什么方法可以解锁我的数据库吗?真烦人,除了这个数据库中的 select 数据,我不能做任何操作!!
在阅读了有关 MS SQL SERVER 日志记录的多个小时后,我找到了问题的根源和 "Solution"。
MS Sql 服务器在没有日志记录的情况下无法工作,但它为我们提供了足够的模式来自定义我们想要的日志记录类型。您可以在此处找到恢复模型 https://msdn.microsoft.com/en-us/library/ms189275.aspx。
现在我不知道每个数据库可用于登录 Amazon rds 的确切存储量,但如果您遇到我在问题中描述的此类问题,您可以使用下面描述的场景来面对它们.
第一步(检查实例的数据库大小)
EXEC sp_MSForEachDB 'SELECT DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name, (size*8)/1024 SizeMB
FROM sys.master_files
WHERE DB_NAME(database_id) = ''?'' '
第二步(设置所需的恢复模型)
如果您的查询已经有问题,那么解决这些问题的最佳方法是 select 使用这样的查询简单地恢复模型。
ALTER DATABASE <db_name> SET RECOVERY SIMPLE
ATTENTION it's not the best model, it's the most "free" model. When you have >complete your job you have to choose the appropriate RECOVERY MODEL depended on >your project.
第三步(缩小日志文件)
如果您在第二步中使用了 select 简单恢复模型,那么您可能已经解决了问题并且可以执行查询,但我建议您缩小日志文件。 select 根据这里的手册 https://msdn.microsoft.com/en-us/library/ms189493.aspx.
缩小日志文件的方法非常简单下面我给你举个例子,找到日志文件名并缩小它的代码。
Declare @logName nvarchar(255)
SELECT @logName= name FROM sys.master_files WHERE database_id = db_id() AND type = 1
DBCC SHRINKFILE(@logName, 250, TRUNCATEONLY)
结论
如您所知,我离真正的解决方案还很远,因为它取决于 Amazon RDS 配置,但我在这里的所有回答都是在谈论症状的解决方案,而不是必须解决的真正问题的解决方案当您的项目需要执行大量查询(更新、删除)时,请使用将数据库日志文件保持在正常大小的方法。