我的服务器今天崩溃了,我认为是由于我们的一个 INNODB 表上的并发 truncate table 命令。服务器可以重新启动,但是在它启动后,每次我尝试发出 SQL 命令时,都会出现以下错误:
ERROR 2006 (HY000): MySQL server has gone away
Run Code Online (Sandbox Code Playgroud)
这是日志中发生的事情:
121206 01:11:12 mysqld restarted
121206 1:11:13 InnoDB: Started; log sequence number 275 559321759
InnoDB: !!! innodb_force_recovery is set to 1 !!!
121206 1:11:13 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.0.95-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 Source distribution
InnoDB: Error: trying to load index PRIMARY for table
InnoDB: but the index tree has been freed!
121206 1:11:37 - mysqld got signal 11 ;
This could …Run Code Online (Sandbox Code Playgroud) 我有一个 200 GB 的 Firebird 数据库(使用 Firebird 2.1.3 创建,目前运行的是 2.1.5),它似乎已损坏。当我尝试进行备份时,我得到:
数据库文件出现损坏 <>
错误的页面类型
页面 0 是错误的类型(预期 0 发现 1)
gds_get_segment 失败
gfix 以一个结尾
僵局
我该如何解决?
更新
虽然这个特定的数据库不是固定的,但我想解决方案是尝试 IB FirstAID。
推荐阅读:
运行DBCC CHECKDB (dbname) WITH NO_INFOMSGS, ALL_ERRORMSGS结果出现此错误:
表错误:对象 ID 813245952、索引 ID 1、分区 ID 72057594073972736、分配单元 ID 72057594083213312(类型行内数据)的多个 IAM 页包含相同间隔的分配。IAM 页面 (1:4611577) 和 (1:2040821)。CHECKDB 在表“tablename”(对象 ID 813245952)中发现 1 个分配错误和 0 个一致性错误。CHECKDB 在数据库“dbname”中发现 1 个分配错误和 0 个一致性错误。Repair_allow_data_loss 是 DBCC CHECKDB (dbname) 发现的错误的最低修复级别。
有没有人以前遇到过这个问题并有修复的解决方案?
注意:- 我还没有运行该语句repair_allow_data_loss。
我们最近将我们的 Intranet 生产数据库从 SQL Server 2008 迁移到了全新的 SQL Server 2008 R2 服务器。
由于 DBCC 错误(检查数据库完整性任务),备份作业自迁移以来一直失败。
昨天我尝试在生产数据库上使用 repair_rebuild 选项运行 DBCC CHECKDB,随后的 DBCC CHECKDB 没有显示任何错误。针对生产数据库的 DBCC CHECKDB 再次显示错误消息,备份已完成,但维护计划当然失败了:我有(一长串)以下错误消息:
Table error: page (1:1100029), whose header indicates that it is allocated to object ID 373210913, index ID 1, partition ID 72057701886525440, alloc unit ID 72057702118457344 (type In-row data), is allocated by another object.
Msg 2534, Level 16, State 2, Line 1
Table error: page (1:1100030), whose header indicates that it is allocated to object …Run Code Online (Sandbox Code Playgroud) 因此,我在 RDS 中的生产数据库显然在版本更新期间崩溃或重新启动,并且在重新启动后 mysql 无法加载 innodb 表之一:正如日志中的以下错误所证明的那样。
140324 16:22:23 [ERROR] Cannot find or open table dbname/table_name from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
how you can resolve …Run Code Online (Sandbox Code Playgroud) 我有一个 3 节点 Percona XtraDB 集群,根据mysqlcheck,其中一些表已损坏(一些索引包含错误的条目数):
mydb.mytable
Warning : InnoDB: Index 'foo' contains 1393929 entries, should be 1393918.
Warning : InnoDB: Index 'bar' contains 1393921 entries, should be 1393918.
error : Corrupt
Run Code Online (Sandbox Code Playgroud)
OPTIMIZE TABLE在集群上运行的最佳实践是什么?
我在没有用户的测试环境中做了一些实验,似乎OPTIMIZE TABLE一个节点上的an不会自动将其影响传播到其他节点。这与此命令修改索引和表的存储空间,而不是其内容或其定义的事实一致。
在每个节点的生产环境中运行命令,让它在下一个节点中运行之前完成它可能有什么缺点?
考虑到 MySQL(和 Percona XtraDB Cluster,据我所知)不支持分布式表锁,这对用户会有什么影响?这会使集群处于不一致的状态吗?
因此,正如我之前提到的,我是一名 SQL Server DBA/顾问,正在帮助客户使用他们的 Oracle 数据库。大多数情况下,我已经能够在文档和谷歌的帮助下弄清楚我需要做什么并解决问题,但我目前正在尝试处理一些似乎难以理解的事情。
其中一个数据库是 Oracle 10g LIMS 数据库,它已经存在(并升级)了至少 10 年(可能是 20 年)。这是一个关键的应用程序,但在过去的几年里,他们遇到了许多可靠性问题。为了尝试了解它的真正问题所在以及我们可能能够对此做些什么,我们让托管/MS 提供商在另一台(相同)服务器上制作了它的物理副本。(我很确定提供商将其解释为“RMAN 备份和还原”)。
我的想法是,我可以进行任何分析、调查、修复尝试,并使用我想要的任何工具,而不会影响生产。到现在为止还挺好。我dbv对所有数据文件运行了 DBVerify ( ),没有问题。
然后我ANALYZE TABLE .. VALIDATE STRUCTURE CASCADE ONLINE;在数据库中的每个表上运行。对于其中两个表,该命令比其他 2500 个表(组合)花费的时间长得多,所以我取消了它们并让其他表完成,他们没有问题也没有报告错误等。
事实证明,这两个表也是最大的应用程序数据表。然后我从最大的表(23GB,36M 行)开始,并决定按部分(没有 CASCADE)分析它,首先是表本身,然后是索引。在30-60分钟内完成表(我不记得确切),但ANALYZE INDEX .. VALIDATE STRUCTURE ONLINE;对于第一指标无法完成。
我决定让它运行一段时间,看看我是否能找到一种方法来监控它的进展。谷歌搜索这个我发现很多(旧)声称可以监控分析表,v$session_longops但查看它从未显示我的命令中的任何内容,我得出的结论是这必须仅适用于统计信息收集功能,而不是验证功能。在尝试了很多事情之后,我最终发现通过查看v$session执行命令的行,我可以使用 P1* 和 P2* 列来跟踪正在读取的文件和块。
这表明它确实在从预期的数据文件中读取数据,并从中读取不同的块。这一点以及命令运行时服务器上的磁盘利用率为 100% 的事实(没有其他任何东西)使我确信它确实在做某事并且没有被阻止/锁定/挂起。所以我只是让它运行。
现在已经超过 3 天(+72 小时),它没有显示完成的迹象,我在这里有点不知所措。
附加信息:
表的 DDL:
-- Unable to render TABLE DDL for object O$LIMS.N__RESULTS with DBMS_METADATA attempting internal generator.
CREATE …Run Code Online (Sandbox Code Playgroud) 我损坏了数据库中与 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) 有一个较旧但较大的数据库(在 san 上为 6tb),其页面验证选项仍设置为 TORN_PAGE_DETECTION。将页面验证更改为校验和模式时,如何将新的校验和应用于所有现有页面?对页面验证模式进行此更改时是否有任何需要注意的大开销?这是否需要在较长的维护窗口期间完成?
SQL 2014 当前数据库兼容级别 = 120
corruption ×10
sql-server ×5
mysql ×3
innodb ×2
amazon-rds ×1
backup ×1
checksum ×1
crash ×1
filestream ×1
firebird ×1
index ×1
mirroring ×1
optimization ×1
oracle ×1
oracle-10g ×1
percona ×1
performance ×1
recovery ×1