我必须编写一个程序来检测损坏的表并尝试修复它们。为此,我需要定期损坏表。
无论如何手动损坏表?
我损坏了数据库中与 FILESTREAM 相关的文件。
在.mdf和.ldf文件仍然完好,但是当我尝试上网的数据库,它抱怨,说有关FILESTREAM的文件是不正确的。
我不关心存储在 FILESTREAM 中的数据,但我关心其他数据。我可以从.mdf和.ldf文件中取回它吗?如何?
当我执行:
sp_attach_db @dbname = 'Demo',
@filename1 = N'<File path>.mdf',
@filename2 = N'<File path>.ldf'
Run Code Online (Sandbox Code Playgroud)
答复是:
Msg 5120, Level 16, State 105, Line 1
Unable to open the physical file "<Location>". Operating system error 2: "2(The system cannot find the file specified.)".
Msg 5105, Level 16, State 14, Line 1
A file activation error occurred. The physical file name '<Location>' may be incorrect. Diagnose and correct additional …Run Code Online (Sandbox Code Playgroud) 嗨,我正在尝试备份事务日志文件以在 SQL Server 中设置镜像
我执行
BACKUP LOG CUSTOMER TO DISK ='K:\JonDB\CUSTOMER.trn' WITH INIT
GO
Run Code Online (Sandbox Code Playgroud)
我收到
Processed 6587361 pages for database 'CUSTOMER', file 'CUSTOMER' on file 1.
Processed 0 pages for database 'CUSTOMER', file 'CUSTOMER_log' on file 1.
Processed 6 pages for database 'CUSTOMER', file 'CUSTOMER_log2' on file 1.
BACKUP DATABASE successfully processed 6587368 pages in 969.013 seconds (46.948 MB/sec).
Msg 3049, Level 16, State 1, Line 5
BACKUP detected corruption in the database log. Check the errorlog for more information. …Run Code Online (Sandbox Code Playgroud) 我有一个在 ubuntu 服务器上运行的 postgres 9.3 db。
大约一个月前,我们的 VPS 托管公司解决了服务器上的硬件问题。
问题很快得到解决,一切似乎都运行良好。
我们使用另一台服务器上的酒保运行备份 - 备份和恢复工作正常(我检查过)。
数据损坏的第一个迹象是几天前:我决定在我们的数据库上做一个完整的 pg_dump,就像我每隔一段时间做的那样,它失败了(块中的页头无效......) - 数据似乎已经很久以前就损坏了 - 大约在硬件问题发生的时候(那是损坏记录上的日期)。我求助于查找损坏的记录,然后将其删除并手动恢复。
在那之后,我能够做一个完整的 pg_dump。
为了检查其他损坏 - 我从备份中设置了不同的数据库服务器并对所有表运行 pg_repack 以验证我能够重建所有索引和表。
我的问题是:
1. 我如何确定我的数据库中没有任何额外的损坏?
2. 如何定期检查我的数据完整性?
3. 除了转储整个数据库并重新索引它(我已经这样做了)之外,我还能做些什么来验证我们数据库的完整性?
PS - 我没有启用块校验和。
我有处于可疑模式的 SQL Server 2008 R2 数据库。我试图修复它运行此查询:
EXEC sp_resetstatus ‘yourDBname’;
ALTER DATABASE yourDBname SET EMERGENCY
DBCC checkdb(’yourDBname’)
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB (’yourDBname’, REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE yourDBname SET MULTI_USER
Run Code Online (Sandbox Code Playgroud)
但修复输出是这条消息:
Warning: You must recover this database prior to access.
Msg 8921, Level 16, State 1, Line 5
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Warning: The log for database 'ServeDB' …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用switch2osm.org 上列出的 Ubuntu 包在 Ubuntu 12.04 机器上设置 OpenStreetMap 服务器。我最初使用仅限美国东北部的地图提取物安装并设置了所有内容,但现在我想安装整个地图星球。我下载了planet-latest.osm.bz2并osm2pgsql --slim -C 60000 planet-latest.osm.bz2以对数据库具有写权限的用户身份运行;这与之前安装 us-northeast.osm.pbf 的命令相同。第二天我回来发现这个命令似乎成功完成,但由于某种原因渲染守护进程没有从新数据生成新的图块。我尝试重新启动渲染,当没有效果时,我尝试使用sudo /etc/init.d/postgresql restart. 但是,服务器启动失败,日志中出现以下错误:
2012-07-13 18:54:59 UTC WARNING: page 1525147 of relation base/16385/477861 was uninitialized
2012-07-13 18:54:59 UTC WARNING: page 2247965 of relation base/16385/477861 was uninitialized
...500 more lines like this...
2012-07-13 18:54:59 UTC WARNING: page 2262926 of relation base/16385/477861 was uninitialized
2012-07-13 18:54:59 UTC PANIC: WAL contains references to invalid pages
2012-07-13 18:55:00 UTC LOG: startup process (PID 22826) …Run Code Online (Sandbox Code Playgroud) 我正在停用数据库服务器并将数据库从一台服务器迁移到另一台服务器。我试图获取数据库的属性并收到一个 SQL 错误弹出窗口。
属性所有者不可用于数据库“[数据库名称]”。此对象可能不存在此属性,或者可能由于访问权限不足而无法检索。(Microsoft.SqlServer.Smo)
事实:
我可以执行和报告的任何建议或测试?
我正在尝试使处于恢复挂起状态的 SQL Server 数据库联机并可访问。SQL Server 服务使用一个 Active Directory 帐户,该帐户是域管理员并且是sysadminsql server 上的成员。SQL Server 帐户应该拥有 SQL 文件夹中的权限,因为它是域管理员。但是,它不是 SQL Server 中的本地管理员。
错误消息是:
消息 5120,级别 16,状态 101,第 1 行无法打开物理文件“F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DBName.ndf”。操作系统错误 5:“5(访问被拒绝。)”。消息 5120,级别 16,状态 9,第 1 行无法打开物理文件“F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DBName.ndf”。操作系统错误 5:“5(访问被拒绝。)”。
尽管
alter database [DBName] set online;
Run Code Online (Sandbox Code Playgroud)
导致以下错误:
消息 945,级别 14,状态 2,第 1 行由于无法访问的文件或内存或磁盘空间不足,无法打开数据库“databs”。有关详细信息,请参阅 SQL Server 错误日志。消息 5069,级别 16,状态 1,第 1 行 ALTER DATABASE 语句失败。
你能想到解决办法吗?
我的 SQL Server 数据库有一些问题。当我运行这个:
select * from dbo.Entity
where Oid='191FAF30-4729-4145-8106-60E34A8E164C'
Run Code Online (Sandbox Code Playgroud)
...它吐出以下错误。
消息 823,级别 24,状态 2,第 2 行 在读取文件“D:\Database\db.mdf”中偏移量 0x00000021442000 的过程中,操作系统向 SQL Server 返回错误 1(函数不正确。)。
SQL Server 错误日志和系统事件日志中的其他消息可能会提供更多详细信息。这是一种严重的系统级错误情况,会威胁数据库的完整性,必须立即纠正。
完成完整的数据库一致性检查 (DBCC CHECKDB)。此错误可能由多种因素引起;有关详细信息,请参阅 SQL Server 联机丛书。
事件日志错误与上述相同。
所以我跑了一个DBCC CHECKDB,它吐出以下错误:
CHECKDB 在数据库中发现 0 个分配错误和 0 个一致性错误
当前命令发生严重错误。结果,如果有的话,应该被丢弃。
我试过
dbcc checktable ('Entity')
Run Code Online (Sandbox Code Playgroud)
但消息是:
Msg 0, Level 11, State 0, Line 0
当前命令发生严重错误。
结果,如果有的话,应该被丢弃。
版本信息:
Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
Feb 10 2012 19:39:15
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing …Run Code Online (Sandbox Code Playgroud) 我们在 DEV/QA/PROD SQL 2017 Enterprise 服务器上遇到了看似随机的错误 824。服务器运行几乎相同的代码,通过 ETL 流程将相同的日常文件摄取到我们的数据仓库中。这些错误是在 2022 年 5 月左右首次发现的,但由于日志清理,我们无法确定(供应商提供的)ETL 流程是否正在捕获这些错误、记录警告并继续处理而不是失败!
DEV/QA 已修补到 CU30(最新的 CU)——这种情况仍然存在。CU22 的生产落后了几个补丁,计划在未来几周内进行修补。
例子:
SQL Server 检测到基于逻辑不一致的 I/O 错误:校验和不正确(预期为 0xc30164e7;实际为 0x9f2bc675c)。它发生在读取文件“H:\tempdb_mssql_6.ndf”中偏移量 0x0000027de40000 处的数据库 ID 2 中的页 (7:1306400) 期间。
如前所述,这种情况在我们所有的环境中都是随机发生的。所有服务器都是虚拟化的。DEV/QA 都使用相同的 SAN。生产位于不同数据中心的单独 SAN 上。我没有 SAN 设备品牌/型号的详细信息。
在大多数情况下,当发生这种情况时,它似乎主要在 tempdb 中(但并非总是如此)。此外,suspect_pages 通常是空的。这种情况似乎在周六发生得更频繁,因为我们连续发生了 3-4 次。
另请注意,错误中列出的预期/实际值通常是相同的 - 但并非总是如此。
还注意到,特定的存储过程似乎更容易引发此错误,但是,它已经发生在 ETL 作业中的多个其他位置,再次影响不同的数据库。似乎触发此错误的存储过程最常添加一个 PERSISTED 计算列,然后添加一个基于该计算列的 ROW_NUMBER() - 到 5 个表,大小范围从 200K 到 750 万行。我们昨天(在 QA 中)修改了此过程,以限制使用 ROW_NUMBER() 值更新的行数(仅当 rownum=1 时),并将更新从一次性全部更改为 25K 批量方法。今天在 QA 中再次发生该错误 - 因此我们删除了计算列上的 PERSISTED 选项。我们实际上正在尝试在质量检查中阻止这种情况,因为它似乎受到的影响最大。
DBCC CHECKDB …
corruption ×10
sql-server ×6
postgresql ×2
backup ×1
dbcc ×1
dbcc-checkdb ×1
errors ×1
filestream ×1
mirroring ×1
recovery ×1
security ×1
ubuntu ×1