sqlserver和Oracle内部的错误数据修复(DBCC、DBMS_REPAIR)
数据库长时间运行后,因断电、操作系统、物理存储等的原因可能会造成数据库内部的逻辑或物理错误,我们可以使用一般的方式尝试修复。
对于sqlserver 我们可以使用DBCC命令:
-- sqlserver
use dbName
GO --exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态
ALTER DATABASE dbName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO DBCC CHECKDB(dbName, REPAIR_ALLOW_DATA_LOSS)
GO
DBCC CHECKDB(dbName, REPAIR_REBUILD)
GO --exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态
ALTER DATABASE dbName SET MULTI_USER
GO
官方参考:
https://msdn.microsoft.com/zh-cn/library/ms176064.aspx
http://blogs.msdn.com/b/apgcdsd/archive/2014/05/05/dbcc-checkdb.aspx
对于Oracle可以使用DBMS_REPAIR.SKIP_CORRUPT_BLOCKS跳过坏块后,读取并重建数据表。
常见的物理坏块(Physical Block Corruptions)有块头和块尾信息不一致(Fractured/Incomplete),checksum值无效,数据块信息全部为0等情况,并且可能伴随错误ORA-1578和ORA-1110 。
为了及时发现物理坏块和准确定位坏块产生的原因,oracle建议设置初始化参数DB_BLOCK_CHECKSUM=TYPICAL(默认值)。一般情况下,物理坏块是由于底层OS/disk系统错误/损坏,导致数据块被修改,数据块标志为坏块(corruption)。
1. 当前数据库初始化参数配置DB_BLOCK_CHECKSUM=TYPICAL,因此从disk读取数据块时校验checksum:
SQL> show parameter DB_BLOCK_CHECKSUM
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_checksum string TYPICAL
2. 查询表dept时发现有坏块,报错信息ORA-1578和ORA-1110,坏块为file # 4, block # 133
SQL> select * from dept;
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 4, block # 133)
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'
修复数据坏块的方法可以通过备份恢复或者DBMS_REPAIR.SKIP_CORRUPT_BLOCKS跳过坏块,后者貌似执行起来更方便:
SQL> alter session set db_file_multiblock_read_count=1;
SQL> execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('SCCOT','DEPT');
SQL> create table dept_new as select * from dept;
sqlserver和Oracle内部的错误数据修复(DBCC、DBMS_REPAIR)的更多相关文章
- C#操作SqlServer MySql Oracle通用帮助类Db_Helper_DG(默认支持数据库读写分离、查询结果实体映射ORM)
[前言] 作为一款成熟的面向对象高级编程语言,C#在ADO.Net的支持上已然是做的很成熟,我们可以方便地调用ADO.Net操作各类关系型数据库,在使用了多年的Sql_Helper_DG后,由于项目需 ...
- 数据库相关知识积累(sqlserver、oracle、mysql)
数据库相关知识积累(sqlserver.oracle.mysql) 1. sqlserver :断开所有连接: (还原数据库) 1.数据库 分离 2. USE master GO ALTER DAT ...
- EntityFramework CodeFirst SQLServer转Oracle踩坑笔记
接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...
- 针对各主流数据mysql、sqlserver、oracle中文乱码问题。
针对各主流数据mysql.sqlserver.oracle当以编码格式gbk存放数据时,要注意字符串类型的字段,要采用宽字符串nvarchar存放,前提是当你的应用程序是utf8编码,而数据库是gbk ...
- SQLServer与Oracle的对照
近期去铁科院面试,项目组长问了我这样一下问题:SQLServer与Oracle的差别是什么?从进入软件行业.从開始CS的编码到BS的编码过程中使用的都是SQLServer.在半年前開始敲DRP ...
- SQLServer访问Oracle查询性能问题解决
原文:SQLServer访问Oracle查询性能问题解决 1. 问题 系统有个模块,需要查询Oracle数据库中的数据.目前是通过建立链接服务器实现的. SQLServer访问Oracle实现 可参考 ...
- ThinkPHP 3.2.3+ORACLE插入数据BUG修复及支持获取自增Id的上次记录
TP+ORACLE插入数据BUG修复以及获取自增Id支持getLastInsID方法 这些天在做Api接口时候,发现用TP操作Oracle数据库,发现查询修改删除都能执行, 但一旦执行插入操作老是报错 ...
- Access、SQLServer、Oracle常见SQL语句应用区别
Access.SQLServer.Oracle常见SQL语句应用区别 关劲松 PMP 如果要兼容Access.SQL Server.Oracle三个数据库版本:我们在编写SQL语句的过程中,尽量使用一 ...
- spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置
spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...
随机推荐
- PHP往mysql数据库中写入中文失败
该类问题解决办法就是 在建立数据库连接之后,将该连接的编码方式改为中文. 代码如下: $linkID=@mysql_connect("localhost","root&q ...
- loadrunner四大部分
loadrunner主要分一下四部分 1.VuGen 主要进行录制,回放,参数化,脚本修改,可以对脚本进行recording options,General options,runtime opti ...
- 用Python3实现表达式求值
一.题目描述 请用 python3 编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 二.输入描 ...
- codeforces 721C (拓排 + DP)
题目链接:http://codeforces.com/contest/721/problem/C 题意:从1走到n,问在时间T内最多经过多少个点,按路径顺序输出. 思路:比赛的时候只想到拓排然后就不知 ...
- PHP与Golang如何通信?
PHP与Golang如何通信? 最近遇到的一个场景:php项目中需要使用一个第三方的功能(结巴分词),而github上面恰好有一个用Golang写好的类库.那么问题就来了,要如何实现不同语言之间的通信 ...
- android Intent的常用flags
首先,我们常见的由MainActivity跳转到另外一个Main1Acticity的代码: Intent mIntent=new Intent(MainActivity.this, Main1Acti ...
- wdcp的安装方法与常见问题
wdcp(WDlinux Control Panel)是一套用PHP开发的Linux服务器管理系统,通过面板来操作可以彻底放弃用ssh 命令来操作的繁琐,让Linux服务器系统变得更容易使用,可以在线 ...
- Razor视图引擎-基础语法
所有以 @开头 或 @{ /* 代码体 */ } (在@与{直接不得添加任何空格) 的部分代码都会被ASP.NET引擎进行处理. 在 @{ /*代码体*/ } 内的代码每一行都必须以";& ...
- mysql 信息查询
show tables information 除了查询数据,管理数据之外,还有其他方面的信息方便和约束着 -- show information about characterset,查询mys ...
- SQL if exists database总是出现语法错误
SQL if exists总是出现语法错误.望高手纠正._百度知道 http://zhidao.baidu.com/link?url=7VyzcX0V1A3lhBQ1emNt2sTk7QGDuijOq ...