AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 342458
Accepted
Java
Java
Asked: 2024-09-19 01:12:07 +0800 CST2024-09-19 01:12:07 +0800 CST 2024-09-19 01:12:07 +0800 CST

在 SQL 2022 中添加事务日志文件后,MDF 文件的大小未更新

  • 772

我正在致力于将 SQL Server 从 SQL 2016 迁移到 SQL 2022。

我有一个过程,在从完整磁带(来自第三方供应商)恢复数据库(到“待机/只读”状态)之后,我应该将每个每小时日志文件(bak)添加到这个“待机/只读”数据库中。

我试图将在 SQL 2016(过去 4 年)中运行的 T-SQL 代码运行到这个新环境(SQL 2022)中,我收到的第一个错误消息是关于这一部分的:

 EXEC master.sys.xp_cmdshell @cmd 

因此,我使用 Google 搜索并运行了以下代码:

 EXEC sp_configure 'show advanced options', 1
 GO
 RECONFIGURE
 GO
 EXEC sp_configure 'xp_cmdshell', 1
 GO
 RECONFIGURE
 GO

当我运行代码时,似乎没有错误消息,但我没有看到数据库的日志文件的大小增加。

我将整个 T-SQL 代码放在这里以供参考:

USE Master; 
GO  
SET NOCOUNT ON 

-- 1 - Variable declaration 
DECLARE @dbName sysname
DECLARE @fileName sysname
DECLARE @standby sysname
DECLARE @backupPath NVARCHAR(500) 
DECLARE @cmd NVARCHAR(500) 
DECLARE @fileList TABLE (backupFile NVARCHAR(255)) 
DECLARE @lastFullBackup NVARCHAR(500) 
DECLARE @lastDiffBackup NVARCHAR(500) 
DECLARE @backupFile NVARCHAR(500) 

-- 2 - Initialize variables 
SET @dbName = 'us_xxxx_multi_replica1' 
SET @fileName = 'LOG_us_xxxx_multi_replica' 
SET @backupPath = 'F:\Yesterday\' 
SET @standby = 'F:\us_xxxx_multi_replica_RollbackUndo_2024-09-17_19-33-23.bak'

-- 3 - get list of files 
SET @cmd = 'DIR /b "' + @backupPath + '"'

INSERT INTO @fileList(backupFile) 
EXEC master.sys.xp_cmdshell @cmd 

-- 5 - check for log backups 
DECLARE backupFiles CURSOR FOR  
   SELECT backupFile  
   FROM @fileList 
   WHERE backupFile LIKE '%.bak'  
   AND backupFile LIKE @fileName + '%' 

OPEN backupFiles  

-- Loop through all the files for the database  
FETCH NEXT FROM backupFiles INTO @backupFile  

WHILE @@FETCH_STATUS = 0  
BEGIN  
   SET @cmd = 'RESTORE LOG [' + @dbName + '] FROM DISK = '''  
       + @backupPath + @backupFile + ''' WITH STANDBY = ''' + @standby + ''''

   FETCH NEXT FROM backupFiles INTO @backupFile  

EXEC (@cmd)

END 

CLOSE backupFiles  
DEALLOCATE backupFiles  

下面是在 SQL 2022 中处理后的结果示例(我遇到了一个问题):

  Processed 0 pages for database 'us_xxxx_multi_replica', file 'us_template_pccmulti_rrdb_replica' on file 1.
  Processed 952 pages for database 'us_xxx_multi_replica', file 'us_template_pccmulti_rrdb_replica_log' on file 1.
  System objects could not be updated in database 'us_xxxx_multi_replica' because it is read-only.
  System objects could not be updated in database 'us_xxxx_multi_replica' because it is read-only.
  RESTORE LOG successfully processed 952 pages in 1.845 seconds (4.029 MB/sec).

下面是我在 SQL 2016 中运行的结果示例(没有问题):

Processed 2336 pages for database 'us_xxx_multi_replica', file 'us_template_pccmulti_rrdb_replica_log' on file 1. 
System objects could not be updated in database 'us_xxx_multi_replica' because it is read-only. 
System objects could not be updated in database 'us_xxx_multi_replica' because it is read-only. 
RESTORE LOG successfully processed 2336 pages in 0.531 seconds (34.361 MB/sec). 
Processed 0 pages for database 'us_xxx_multi_replica', file 'us_template_pccmulti_rrdb_replica' on file 1.

可能存在什么问题?

顺便说一句,当在此虚拟机上安装 SQL 2022 时,已经安装了 SQL 2019(随虚拟机一起提供)。我们的 IT 手动安装了 SQL 2022,所以我想知道是否存在某种未正确设置的权限/配置问题。

因为当我在 SQL 2019 中运行此 T-SQL 代码时,我没有遇到以下问题

EXEC master.sys.xp_cmdshell @cmd 

从一开始。

更新:

  1. 我没有找到为什么必须处理 SQL 2022 中的“xp_cmdshell”问题(但不是在 SQL 2019 中)的原因,但它运行良好。

  2. 我意识到 SQL 2016 中的 ldf 文件大小没有增加,而只有 mdf 文件大小增加。所以,我想我不必担心 ldf 文件大小没有变化。

  3. 通过检查数据本身我能够看到差异。

sql-server
  • 1 1 个回答
  • 67 Views

1 个回答

  • Voted
  1. Best Answer
    Tibor Karaszi
    2024-09-19T23:45:25+08:002024-09-19T23:45:25+08:00

    OP 就是你,“原始发帖者”(这是在评论部分询问的)。

    看起来您预计 mdf 或 ldf 文件(数据库文件)的大小会在您恢复日志备份时增加和/或减少。是这样吗?

    此外,您似乎遇到过这种情况,这种情况发生在早期版本的 SQL Server 上,但是使用相同的过程,这种情况不会发生在较新版本的 SQL Server 中?

    此外,您似乎觉得在恢复日志备份时数据库文件的大小不会增加/减少是一个问题?

    如果我理解了您的问题,按照我上面的描述:

    您所看到的并没有什么不寻常的。最有可能的是,在您的“早期环境”中,源 SQL Server 会频繁收缩数据库文件,然后进行扩展,而当您恢复日志备份时,这种情况也会延续下去。

    但负责备份的 DBA 可能已经意识到数据库文件频繁增大和缩小并不是一件好事。也就是说,应将其保持在应有的大小。这就是为什么您从较新的系统进行的日志备份在恢复时不会改变数据库文件的大小。

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve