DBCC SHRINKFILE会杀死活动事务吗?

时间:2018-12-28 15:37:48

标签: sql-server database transactions database-administration dbcc

我创建了一个作业,每天可以将源数据库中数GB的数据加载到目标数据库中。一开始,这项工作运行良好,没有任何问题。

在过去2周中,由于事务日志已满,作业失败。

我已经在SQl作业中添加了一个步骤,以在加载开始之前清除日志,但仍然发生相同的错误。

我已经监视了错误发生之前等待错误的等待几分钟的最后一张表。我怀疑它正在等待清理日志。

如果在作业当前正在运行时在此DB上运行@Autowired private Validator validator; public Flux<UserContactsModel> getUserContacts(@RequestBody Mono<@Valid LoginModel> loginDetail) { return loginDetail .filter(this::validate) .map(....); } private boolean validate(LoginModel loginModel) { Set<ConstraintViolation<LoginModel>> constraintViolations = validator.validate(loginModel); if (CollectionUtils.isNotEmpty(constraintViolations)) { StringJoiner stringJoiner = new StringJoiner(" "); constraintViolations.forEach( loginModelConstraintViolation -> stringJoiner .add(loginModelConstraintViolation.getPropertyPath().toString()) .add(":") .add(loginModelConstraintViolation.getMessage())); throw new RuntimeException(stringJoiner.toString()); } return true; } 命令,它还会清除/杀死活动的事务吗?

1 个答案:

答案 0 :(得分:1)

  

如果作业是在此数据库上运行DBCC SHRINKFILE命令   当前正在运行,它将清除/杀死活动交易,因为   好吧

不,DBCC SHRINKFILE不会终止交易

  

我在SQL作业中添加了一个步骤,以在加载前清除日志   开始。

如果您要缩小文件,并且没有可用空间,则不会清除缩小日志文件。您需要backup the log file,最好根据您的RPO and RTO进行一些更改,或者在批量插入过程中将recovery model交换为类似BULK LOGGED的内容。 More on how to do TLOG backups.