第一篇:SQLserver2000数据库修复办法总结
SQLserver2000数据库修复办法总结
Praymid 戴华倪
总结步骤如下:
1、检测数据库,使用命令(Dbcc checkdb)
拿到数据库后附加到本地SQLserver使其运行,打开企业管理器,查看它。同时打开查询分析器,在里面输入
Dbcc checkdb 检测数据库命令然后回车 即可以看到数据库的分析资料看到问题,评注:拿到问题先不要盲目的卸载SQLServer,本次因为新手,上手后就把数据库卸载,这样就耗费了一天的时间,过没有任何作用,测试服务器的完整性可以拿一个好的数据库做对比,自己可以建一个“test”,如果测试数据库运行正常,则不需要对服务器做任何改动。千万不要改动系统,麻烦会更大。
提示:错误会以红色显示。
2、简单修复:命令:dbcc checkdb 输入以下两句尝试修复。
DBCC CHECKDB('AIS20110120172605',repair_allow_data_loss)DBCC CHECKDB('AIS20110120172605',repair_rebuild)不管他究竟哪里错了,先用这两句试试一般的索引系统文件丢失,SQLserver都可以解决这个问题,基本就差不多了。但是对于主键索引损坏,这个命令基本修不好,所以对一个满身是伤的数据库,他可以修复70%。
注:修复时系统提示必须要在单用户模式下才可以生效,用户可以去企业管理器,对要修理的数据库:右击属性—选项—限制访问—单用户。也可以使用以下语句实现:
ALTER DATABASE AIS20110420091143 SET single_USER GO 改为单用户
ALTER DATABASE AIS20110420091143 SET MULTI_USER GO 改为多用户。
继续使用dbcc checkdb检测,如果继续报错。再次运行:
DBCC CHECKDB('DataBasename')with NO_INFOMSGS,PHYSICAL_ONLY 然后再运行:
DBCC CHECKDB(' DataBasename ',repair_allow_data_loss)WITH TABLOCK 再次运行:DBCC CHECKDB('DB name')系统显示修复成功,说明本次问题主要由索引等数据库系统本身问题引起,这样的修复可能会导致数据丢失,但是绝对不会是大批丢失,基本没有影响。
2、检测表:命令:dbcc checktable(‘tablename’)接上述检测提示:我们可以看到一个id号,这个基本就是这个错误的表在系统表“sysobjects”里面的注册信息。
输入如下语句即可以看见:
select * from sysobjects where id=1205579333(错误提示号码)接下来检测这张表究竟是什么问题。输入:dbcc checktable(‘tablename’)
接下来将会得到一些错误提示,基本上就是检测表的时候那些,提示什么B树错误,父节点,子节点错误,这些都别管,因为这个可能就是索引引起的错误:
尝试用下列语句修复:
DBCC CHECKtable('Tablename',repair_rebuild)执行完后查看提示:如果出现下面的提示
CREATE UNIQUE INDEX 终止,因为发现了索引 ID 1 的重复键。最重要的主键为 '3'。这里基本上就可以确定就是索引出的问题,而且数据表没有被修复的可能很可能就是内容产生的问题。根据提示,我们得出的结论就是主键重复。
这是我们使用select查询语句是看不到的甚至表里面打开也没有反映。此时,关闭查询分析器,打开企业管理器,找到那个数据表,然后右击选择设计表,选择主键,右击,取消主键,回到查询分析器,找到该表,右击选择索引,这时候表以前所有的索引都能看见了,但是上面的唯一性选项很明显没有了,然后给表里面添加一个新的字段,字段名 id 需要生成编号:
语句如下: alter table t_item add id integer identity 该字段用完后删除,语句如下: alter table t_item drop column id 在查询分析器这里右击索引,选择唯一性选项,然后点击确定,系统会提示重复键,和最重要的主键ID,根据id数字,进行查询
如提示最重要的键值是3则,select * from t_item where fitemid=3 有时候查询的结果,是合法的,比如这个3可能只有一条,这个时候,就右击索引,点击编辑勾选唯一性,在列上面去掉一个,从上往下第一个开始,但是必须记住他的名字,最好写下来,这时候,你会发现错误信息里面的ID换成了另外一个数字,继续用select语句查询该数字,字段仍然是该表的第一个字段,你会发现他有两条,仔细对比这两条,什么都是一样的,每一个字段的值都一样,这显然不符合逻辑,用刚才添加的id记录删除一条,语句如下:
Delete tablename where id=两着任何一个,删除完后,右击恢复刚才被点掉的那一条列名,勾选上唯一性,点击确定,则正常,回到企业管理器,打开表设计,设置主键。完成。
回到查询分析器,输入dbcc checktable 显示正常,再次检测数据库,显示正常。删除刚才增加的列,修复完成。
结论:修复这类数据表,别急着导出数据,新建库文件,这个应该还不到那一步,最好就是能这样修复,少动干戈,如果是主键重复,你导出数据,在把这个错误的数据倒进来(这里假设能正常导入),表的错误会依然存在。
第二篇:用友软件数据库置疑修复办法
用友软件数据库置疑修复办法 www.teniu.cc技术支持网站—维护工具中下载SQL数据库检测修复工具(编号9005),打开工具登录进入后,点击检测数据库(仅检测):发现修复后存在0个分配错误和9个一致性错误。
表修复完成后,再使用修复数据库,反复修复,一直到提示没有一致性错误为止。如下图:提示CHECKDB修复成功了9个一致性错误。
6、修复当前数据库所有用户表以及重建索引后即可。打开软件后即可正常登录使用。
三、总结
在软件使用中,如果出现如:UFStock-连接失败等各种异常错误信息,都可以使用SQL数据库检测修复工具尝试进行检测修复,这是一个很好的解决问题的思路,多学善用。
另外:如果使用工具无法修复的帐套,则可能是系统表损坏严重,则只能转由数据库DBA进行付费修复或者联系专业的数据库修复公司。谢谢!
第三篇:Sql Server 2008 R2数据库损坏修复
Sql Server 2008 R2数据库损坏修复
某外贸连锁店使用的SQL 2008R2数据库,正常使用中突然服务器断电导致的损坏,再次附加发现数据库报错不能正常运行,客户那边运维自己尝试了修复以及重建日志但是故障依旧,后来发现自己解决不了联系到我们进行处理。数据库大小800M,底层数据看了一下正常,先用工具检测看下页面损坏情况,可以看到确实是有页面损坏,直接新建库替换重新生成日志在看损坏情况,(2008R2重建方法可以自行网上寻找)替换之后日志重建成功,但是DBCC 检测发现报错系统表预检查: 对象 ID 3。无法使用闩锁类型 SH 读取并闩锁页(1:37297)。由于不可修复的错误,CHECK 语句已终止。
这种报错很多见,在SQL2000下修复容易一些,但是2008R2很多修复语句是不通用的。这种故障一般是系统页面损坏导致,损坏的表ID是3.,通过语句查询ID3所在的系统表。将损坏的系统表进行修复或许重建,再次重建日志,DBCC检测之后发现数据库正常,且表内数据可以正常访问!
现在高版本的数据库有页面自动修复功能,所以损坏的几率也就下降了很多,但是还是有不少意外情况发生,这已经是3天内修的第5个2008数据库了,全部完整修复可正常使用!目前可完整高效率修复MSSQL 6.5 7.0 2000 2005 2008 2008r2 2012 据库置疑,可疑,恢复挂起,Suspicious,系统表损坏!索引断裂,页撕裂,通讯中断,一致性错误,数据库还原还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复和某些表打不开的错误修复!
第四篇:sql server 数据库质疑(挂起)修复步骤
数据库修复步骤
1.将已破坏的老数据库更名如Baddb_Data.Mdf ==>Baddb_Data.Md_ ,并在原来位置新建一同名数据库 如Baddb_Data.Mdf.2.停止SQL, 将新数据库更名(Baddb_Data.Mdf ==> Baddb_Data.Md2), 待修复老数据库更名为原先名称Baddb_Data.Md_ ==> Baddb_Data.Mdf 3.启动SQL , 并进入查询分析器中, 执行如下命令: USE MASTER sp_configure 'allow', 1 reconfigure with override update sysdatabases set status = 32768 where name = 'Baddb' 4.把LDF文件改名,再执行
DBCC REBUILD_LOG('Baddb', 'E:posdbBaddb_Log.LDF')5.恢复数据库紧急模式
update sysdatabases set status = 0 where name = 'Baddb' 6.执行
restore database Baddb WITH RECOVERY sp_configure 'allow', 0 reconfigure with override 7.检查数据库看看有没有错误, 应该可以看到数据了
DBCC CHECKDB('Baddb')如以上还是不行,试把数据库设为紧急模式,再把数据导出到一个新的数据库(如有坏区)
第五篇:数据库总结
数据库老师画的重点
数据库:数据库是长期存储在计算机内、有组织、可共享的大数据集合。数据库操纵功能:查询select、插入insert、删除delete、修改update 数据库系统的特点:1数据结构化2数据的共享高,冗余度低,易扩充3数据独
立性高4数据由DBMS统一管理和控制
数据模型的组成要素:数据结构、数据操作、完整性约束 概念模型:要出大体,画图 信息世界中的基本概念————
1、实体:客观存在并可以相互区别的事物称为实体
2、属性:实体所具有的某一特性
3、码(key):唯一标识实体的属性集称为码
4、域(domain):域是一组具有相同数据类型的集合
5、实体型(entity type):具有相同属性的实体必然具有共同的特征和性质。用实体名
及属性名集合来抽象和刻画同类实体,称为实体型。
6、实体集(entity set):同一类型的实体的集合
7、联系:在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中
反应为实体(型)内部的联系和实体(型)之间的联系。实体内部的联系通常是指
组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系
最常用的数据模型:
1、层次模型(Hierarchical Model)
2、网状模型(Network Model)
3、关系模型(Relational Model)
4、面向对象模型(Object Oriented Model)
5、对象关系模型(Object Relational Model)其中层次模型和网状模型统称为格式化模型
数据库系统的三级模式结构:
1、模式(scheme):模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。他是数据库系统模式结构的中间层,既不设计涉及数据的物理存储细节和硬件环境,也与具体的应用程
序、所使用的应用开发工具及高级程序设计语言无关。
2、外模式(external schema):外模式也称为子模式(subschema)或用户模式,他是数
据库用户(包括应用程序员和最终用户)能看见和使用
的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
3、内模式(internal scheme):内模式也称存储模式(storage schema),一个数据库只有
一个内模式。他是数据库物理结构和存储方式的描述,是
数据在数据库内部的表达方式。数据库的二级映像功能与数据库独立性————
为了能够在系统内部实现这3个抽象层次的联系和转换,数据库管理系统在这三个模式之间提供了两层映像:
·外模式/模式 映像 ·模式/内模式 映像
正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性 关系(relation):D1*D2*D3··*Dn的子集叫做在域D1、D2、D3···Dn上的关系,表示
为R(D1、D2、D3···Dn)
这里的的R表示关系的名字,n是关系的目或度(degree)关系中每个元素是关系中的元组,通常用t表示 当n=1时,称关系为单元关系(unary relation),或一元关系 当n=2时,称该关系为二元关系(binary relation)
关系是笛卡尔积的有限子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性(attribute)。n目关系必有n个属性。
若关系中的某一属性组的值能够唯一的标识一个元组,则称该属性组为候选码(candidate key)
若一个关系有多个候选码,则选定其中一个为主码(primary key)候选码的诸属性称为主属性(prime attribute)。不包含在任何候选码中的属性称为非主属性(non-prime attribute)或非码属性(non-key attribute)P46 没有搞明白干嘛使得!!!!!!!!!!!
关系的三类完整性约束:实体完整性、参照完整性、用户定义的完整性 实体完整性和参照完整性被称作关系的两个不变性
1、实体完整性(entity integrity):主码中的属性即主属性不能取空值
2、参照完整性(referential integrity):
若属性(或属性组)F是基本关系R的外码,它与基本关系S的的主码K相对应(基
本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
·或者取空值(F的每个属性值均为空值)·或者等于S中某个元组的主码值
SQL(Structured Query Language),即结构化查询语言,是关系数据库的标准语言。SQL 的特点:
1、综合统一
2、高度非过程化
3、面向集合的操作方式
4、以同一种语法结构提供多种使用方式
5、语言简洁、易学易用 SQL的动词:
数据查询:select 数据定义:create、drop、alter(房间)修改表
数据操纵:insert、update(家具)修改数据、delete 数据控制:grant、revoke
绘制ER图————
在ER图中有如下四个成分:
矩形框:表示实体,在框中记入实体名。菱形框:表示联系,在框中记入联系名。
椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下
划一下划线。
连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上
标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对
多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体
连线方向各写N,M。
基本表是本身独立存在的表,在SQL中一个关系就对应一个基本表。一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也可以放在存储文件中。存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构是任意的,对用户是透明的。
视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图。
基本表的定义、删除与修改:
1、定义基本表:create table ***()
2、定义主键:Primary key == not null(中间不用连接符号)unique
3、定义外码的语句:foreign key(某个字段)references 某表(某字段)
4、定义主码语句:primary key(***,***)
5、修改基本表:alter table 某表名 add 列名<数据类型>[完整性约束]
drop <完整性约束名>(字段名)
alter column<列名><数据类型>
6、删除表:drop table 表名[restrict | cascade级联删除]
7、建立索引:create [unique] [clustered] index 索引名
on 表名(列名[asc | desc],······)·clustered 表示是聚簇索引
·unique表明此索引的每一个索引值只对应唯一的数据记录 ·用户可以在最经常查询的列上建立聚簇索引以提高查询效率 ·在一个基本表上只能建立一个聚簇索引
·建立局促索引后,更新该索引列上的数据时,往往导致表中记
录的物理顺序的额变更,代价较大,因此对于经常更新的列不
宜建立聚簇索引
8、删除索引:drop index <索引名>
上机的时候不太一样:drop index 表名。索引名字
9、数据的查询:
select [all | distinct] <目标列表达式>,······ from 表名或者视图名,··· where 条件表达式
group by 列名1 [having 条件表达式] order by 列名2 [asc | desc] ·如果有group by 子句,则结果按“列名1”的值进行分组,该属性列值相
等的元组为一个组。通常会在每组中作用聚集函数。如果group by 子句带
having短语,则只有满足指定条件的组才予以输出。
·如果有order by 子句,则结果表按“列名2”的值的升序或降序排序 ·select Sname Name,‘Year of Birth:’Birth,2013-Sage Birthday,lower
(Sdept)Department
from Student
lower表示小写
常用的查询条件————
比
较:大于、等于、小于、不等于(< >/!=)、大于/小于等于、不小于、不大于、not+上述比较运算符
确定范围:between and,not between and 确定集合:in,not in 字符匹配:like,not like 空
值:is null,is not null 多重条件(逻辑运算):and,or,not
例子————
·select Sname,Sage
from Student
where Sdept(not)in(‘cs’,‘ma’,‘is’)
字符匹配:[not] like ‘字符串’[escape‘换吗字符’] 百分号表示任意长度、下划线表
示任意单个字符 聚集函数————
count([distinct | all] *)
统计元组个数 count([distinct| all] 列名)
统计一列中值的个数 sum([distinct| all] 列名)
计算一列值的总和(此列必须是数值型)avg([distinct| all] 列名)
计算一列的平局值(此列必须是数值型)max([distinct| all] 列名)
求一列中的最大值 min ·如果指定distinct短语,则表示在计算时要取消指定列中的重复值。如果不指定distinct
短语或者指定all短语(all为缺省值),则表示不取消重复。
·注意在聚集函数遇到空值时,除count(*)外,都跳过空值而只处理非空值。·注意where子句中不能用聚集函数作为条件表达式
group by子句————
where 子句与having 短语的区别在于作用对象不同。Where 子句作用对象作用于基本表或试图,从中选择条件的元组。Having短语作用于组,从中选择满足条件的组。
例子:select Sno from SC
group by Sno having count(*)>3 查询了选修3门以上课程的学生学号 链接查询—————— 例子:
非自然链接
·select Student.*,SC.*
from Student,SC
Where Student.Sno=SC.Sno
自然链接
·select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from Student,SC
where Student.Sno=SC.Sno
自身链接
·select FIRST.Cno,SECOND.Cpno
from Course FIRST,Course SECOND
where FIRST.Cpno=SECOND.Cpno
外连接
·select Student.Sno,Sname,Sage,Sdept,Cno,Grade
from Student left outer join SC
on Student.Sno=SC.Sno ·左外链接列出左边关系中所有的元组,右外连接列出右边关系中的所有元组
嵌套查询
·select Sname from Student
where Sno in(select Sno from SC where Cno=‘2’)
·找出每个学生超过他选修课程平均成绩的课程号
Select Sno,Cno From SC x Where Grade >=(select avg(Grade)
From SC y Where y.Sno=x.Sno)
授权————
Grant 权限,····· On 对象类型 对象名,····· To 用户,·····
[with grant option]只一句表示权限的传递
例子: ·Grant all privileges
On Student,Course
To U1,U2
·grant update(Sno),select
on Student
to u4
·revoke update(Sno)
on table Student
from u4
一个满足BCNF的关系模式有:
·所有非主属性对每一个码都是完全函数依赖
3NF 编辑
3NF,即第三范式是要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。满足第三范式(3NF)必须先满足第二范式(2NF)
2NF(第二范式)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个惟一属性列被称为主关键字或主键、主码。