sql数据库质疑的一般处理命令
SQL数据库置疑解决方案(原因分析、预防措施、修复方法)附图
SQL数据库置疑解决方案一、数据库置疑产生的原因1、SQL Server所在分区空间是否够?数据库文件大小是否达到最大文件限制?FAT32的格式只支持4G以内的文件。
2、数据库文件损坏或被非正常删除时出现这种情况。
3、病毒防火墙的扫描也会引起数据库置疑。
4、当SQL Server启动时,将会尝试获得对数据库文件的排他访问权,如果此时该文件被其他程序占用,或者遗失,数据库将会被标记为置疑。
5、电脑非法关机也会造成数据库置疑。
6、电脑磁盘有坏道有可能造成数据库置疑。
二、数据库置疑的预防1、数据库存放的盘符,空间是否够大,经常检查盘符的空间。
2、数据库存放的盘符的格式设置为NTFS格式。
3、进行病毒清除时,尽量把SQL服务停掉,再进行检查。
4、尽量减少非正常关机。
5、建议客户购买后备电源。
6、给客户实施软件之后一定要做好自动备份。
7、建议客户每隔一定时间手动备份一次。
三、数据库置疑的修复1、正常的备份、SQL数据库恢复方式正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断开,或者停掉整个数据库服务器,然后复制文件。
卸下数据库的命令:Sp_detach_db 数据库名连接数据库的命令:Sp_attach_db或者sp_attach_single_file_dbs_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′[,...16]sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′使用此方法可以正确恢复SQL Sever7.0和SQL Server 2000的数据库文件,要点是备份的时候一定要将mdf和ldf两个文件都备份下来,mdf文件是数据库数据文件,ldf是数据库日志文件。
例子:假设数据库为pdm,其数据文件为pdm_data.mdf,日志文件为pdm_log.ldf。
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:\posdb\Baddb_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')
如以上还是不行,试把数据库设为紧急模式,再把数据导出到一个新的数据库(如有坏区)。
sql数据库质疑修复
Sql数据库质疑处理方法1.首先停止sql服务、将质疑的数据库文件复制到其他盘进行备份、备份完之后将质疑数据库删除掉然后启动sql服务重新安装建立一个新的数据库。
2.停止sql服务然后用备份出来的数据库后缀名为MDF的文件替换新的MDF文件。
且删除掉后缀名为LDF的文件3.启动sql服务4.执行下列语句:Use Mastergosp_configure 'allow updates', 1reconfigure with overridegobegin tranupdate sysdatabases set status = 32768 where name = '数据库名'--Verify one row is updated before committingcommit trango5.停止sql再重新启动sql服务,然后运行下列语句:use mastergoDBCC TRACEON(3604)DBCC REBUILD_LOG('数据库名称','D:\Program Files\Microsoft SQL Server\MSSQL\Data\数据库名称_log.ldf')--(注:在这里输入自己的数据库路径)Go6.停止sql然后重新启动sql服务,然后运行下列语句:use mastergoupdate sysdatabases set status = 8 where name = '数据库名称'gosp_configure 'allow updates', 0reconfigure with overridego7. 运行dbcc checkdb(db_name) 检查修复好的质疑数据库是否正常。
SQL2000数据库质疑语句
USE master
GO பைடு நூலகம்
sp_configure 'allow updates', 1
GO
RECONFIGURE WITH OVERRIDE
GO
--修改系统数据库为可以修改,只有这样数据库的系统表才能修改
--第二步
GO
--执行上述语句后,80%会返回如下的消息:
--警告: 数据库 ‘UFDATA_001_2003’ 的日志已重建。已失去事务的一
--致性。应运行 DBCC CHECKDB 以验证物理一致性。将必须重置数据库
--选项,并且可能需要删除多余的日志文件。
--此时该数据库的状态应该是处于DBO ONLY的状态.
reconfigure with override
update sysdatabases set status = 32768
where name = 'UFDATA_001_2005'
--将该数据库状态设置为紧急状态(32768)
--第三步
--停止数据服务,把原来的LDF文件改名(不能删除),然后再
--第四步(在master库中执行)
update sysdatabases set status = 4194316 where name = 'UFDATA_001_2005'
--修改为正常状态
--最后
--修改系统数据库状态为不可写:
sp_configure 'allow', 0
reconfigure with override
解决SQLServer 2008 数据库质疑
解决SQLServer2008数据库质疑(挂起)问题Step1.执行语句,改变数据库状态EXEC SP_RESETSTATUS'Your DBName'GOStep2:重置数据库状态之后,我们就应该对质疑的数据库执行DBCC CHECKDB命令,查看下为什么数据库会出现质疑状态.DBCC CHECKDB('Your DBName')WITH NO_INFOMSGS,ALL_ERRORMSGSGoStep3:找到原因之后,那么就好解决了.看报错信息中,已说明了PK中存在重复值.首先,将每个索引的脚本导出为sql文件.之后再将表中主键栏位里的duplicate的行删除掉Step4:现在最好再立即执行下DBCC CHECKDB命令确认下是否还有错误信息.之后确认没有,那么再将之前索引的脚本创建进去.Step5:在Index创建完毕之后,立即执行下DBCC CHECKDB命令确认下是否还有错误信息.确认无误,那么就需要立即对数据库执行一次完全备份作业.针对SQL2000挂起情况进行修复Step1:设置数据库为紧急模式Use Mastersp_configure'allow updates',1reconfigure with overrideGOUPDATE sysdatabases SET status=32768where name='TEST'GOStep2:停止数据库服务通过Windows服务或者SQLServer管理器.Step3:把原始数据库的数据文件DBNAME_DAT.MDF,DBNAME_LOG.LDF移走Step4:启动SQL Server服务Step5.重新建立一个同名的数据库TEST;USE masterGOCREATE DATABASE TESTON(NAME=DBNAME_DAT,FILENAME='C:',SIZE=10,FILEGROWTH=5)LOG ON(NAME='DBNAME_LOG',FILENAME='g:',SIZE=5MB,FILEGROWTH=5MB)GOStep6:设置数据库运行在单用户的模式:USE MASTERGOALTER DATABASE TEST SET SINGLE_USERGOStep7:停掉SQL服务Step8:把原来的数据文件再覆盖回来Step9:启动SQL Server服务Step10:设置数据库为紧急模式Use Mastersp_configure'allow updates',1reconfigure with overrideGOUPDATE sysdatabases SET status=32768where name='TEST'GOStep11:修复数据库错误DBCC CHECKDB('TEST',REPAIR_ALLOW_DATA_LOSS)Step12.恢复数据库为多用户模式USE MASTERGOALTER DATABASE TEST SET MULTI_USERGOStep13.恢复SQLSERVER原始的配置USE MATERGOUPDATE sysdatabases SET status=4194320where name='TEST'GOStep14:配置SQLSERVER不允许更新系统表USE MASTERGOsp_configure'allow updates',0reconfigure with overrideGOStep15:重新启动MSSQLSERVER服务,最好重新启动操作系统.Step16:备份数据库特殊情况:不知道为什么,质疑修复后,数据库恢复正常了。
SQL2000数据库置疑的恢复方法
1、将数据库设置为单用户迷失
sp_dboption '你的数据库名', 'single user', 'true'
2、修复表
DBCC CHECKTABLE('表名',repair_allow_data_loss)
3、取消单用户模式
sp_dboption '你的数据库名', 'single user', 'false'
二、重新启动SQL服务器 来自三、建立新数据库文件夹 如:newdat
四、复制空数据库到新建的数据库文件夹
五、在 sql 企业管理器中附加新数据库 如:newdat
六、用SQL的DTS工具将旧库数据全部导入新库
导入时注意:以pb打头的表不要选择导入
七、导入过程中,如发现某个表被损坏不能导入,可用下面的指令恢复后再导入
操作步骤:
一、打开查询分析器,修改被置疑的数据库为强制启动状态
选择 master 数据库,按以下指令顺序逐条执行
sp_configure 'allow updates',1
RECONFIGURE WITH OVERRIDE
update sysdatabases set status=-32768 Where name='被质疑的数据库名'
检查sql数据库是否损坏的语句
一、检查数据库完整性的重要性在数据库管理中,数据库的完整性是非常重要的。
如果数据库损坏或不完整,可能会导致数据丢失或系统崩溃。
定期检查数据库的完整性是保证数据安全和系统稳定性的关键步骤。
二、检查数据库完整性的方法1. 使用DBCC CHECKDB命令DBCC CHECKDB是SQL Server提供的一个用于检查数据库完整性的命令。
它可以检查数据库中所有对象的完整性,包括表、索引、视图等。
可以通过以下语句来运行DBCC CHECKDB命令:DBCC CHECKDB ('database_name');2. 使用DBCC CHECKTABLE命令DBCC CHECKTABLE命令可以用来检查数据库中特定表的完整性。
可以通过以下语句来运行DBCC CHECKTABLE命令:DBCC CHECKTABLE ('table_name');3. 使用DBCC CHECKFILEGROUP命令DBCC CHECKFILEGROUP命令可以用来检查文件组的完整性。
可以通过以下语句来运行DBCC CHECKFILEGROUP命令:DBCC CHECKFILEGROUP ('filegroup_name');4. 使用DBCC CHECKALLOC命令DBCC CHECKALLOC命令可以用来检查分配给数据库对象的存储空间的完整性。
可以通过以下语句来运行DBCC CHECKALLOC命令:DBCC CHECKALLOC;三、检查数据库完整性的注意事项1. 在进行完整性检查之前,应该备份数据库以防止任何意外发生。
2. 在生产环境中进行完整性检查时,应该避免对数据库进行写操作,以免影响正在运行的业务。
3. 对于大型数据库,完整性检查可能需要较长的时间,应该安排在系统负载较低的时段进行。
四、检查数据库完整性的建议1. 定期检查数据库完整性,例如每周或每月进行一次完整性检查。
sql2000中MSDB数据库置疑状态的解决方法
sql2000中MSDB数据库置疑状态的解决方法问题:我的SQL Server 2000的MSDB数据库,因为不正常关机,造成了置疑状态,请问采用什么方法能够弥补?解决方法一:你可以采用以下的代码进行修复:USE MASTERGOSP_CONFIGURE 'ALLOW UPDATES',1RECONFIGURE WITH OVERRIDEGOUPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='msdb'Gosp_dboption 'msdb', 'single user', 'true'GoDBCC CHECKDB('msdb')Goupdate sysdatabases set status =28 where name='msdb'Gosp_configure 'allow updates', 0reconfigure with overrideGosp_dboption 'msdb', 'single user', 'false'Go解决方法二:MSDB数据库解决过程难点:由于MSDB数据库不能删除,将其文件拷出来,再次附加数据库,但新的附加数据库不能叫MSDB,也就是不能同名,遇到了困难。
1:先停止整个数据库,将该数据库的文件msdbdata.mdf和msdblog.ldf拷贝粘贴出来到另一个目录下。
2:将以上的文件再拷贝到另一个目录下,也就是说复制两次。
3:选择数据库右击鼠标 --》所有任务--》附加数据库将复制出的一个备份文件附加上去,其中,数据库名称叫MSDB1,用户是SA或ADMINISTRATOR。
4:将MSDB1数据库备份,备份成一个文件,当时我的叫MSDB。
SQL2000数据库置疑解决方法
服务器: 消息 5030,级别 16,状态 1,行 1
未能排它地锁定数据库以执行该*作。
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系ቤተ መጻሕፍቲ ባይዱ管理员联系。
说明您的其他程序正在使用该数据库,如果刚才您在F步骤中使用SQL Server Enterprise Manager
sp_configure 'allow updates',0
go
reconfigure with override
go
go
reconfigure with override
go
F.设置SD11001N_2011为紧急修复模式
update sysdatabases set status=-32768 where dbid=DB_ID('SD11001N_2011')
此时可以在SQL Server Enterprise Manager里面看到该数据库处于"只读/置疑/脱机/紧急模式"可以
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='SD11001N_2011'
Go
sp_dboption 'SD11001N_2011', 'single user', 'true'
一般执行结果如下:
CHECKDB 发现了 0 个分配错误和 0 个一致性错误(在数据库 'test' 中)。
SQL数据库置疑解决方法
SQL数据库置疑解决方法
一、SQL数据库置疑
1.数据库安全问题
为了保护数据库,需要确保数据库中的信息不被恶意攻击、篡改或盗窃,从而避免造成不可挽回的损失。
2.数据库可靠性问题
可靠性是指数据库系统必须在不同的时间片段可靠运行,即使是在发生系统故障的情况下,用户也能够一直获取服务。
只有数据库系统可靠性良好,才能够实现数据库系统的高安全性要求。
3.数据库性能问题
要满足用户的需求,必须保证数据库服务器能够达到最佳性能,避免出现数据库访问运行缓慢的问题,以及查询数据库时出现的查询延时、查询次数多等问题。
4.数据库维护问题
数据库系统是一个复杂的系统,在日常运行中难免会出现数据库系统故障、业务变更需求等情况。
数据库系统维护对于保证系统可靠性,提高系统性能至关重要。
1.数据库安全问题
(1)做好安全设置,为数据库设置正确的授权,只允许拥有访问权限的用户进行访问,并设置访问日志,记录访问和更改的用户,以及操作的时间等信息。
(2)定期备份数据库,将备份数据存放到安全的位置。
SQL2000数据库置疑解决方法
--最后完成
SQLSERVER数据库文件损坏处理2例
WINDOWS2000
SQLSERVER2000
这段时间遇到了好几起由于数据库文件损坏,而造成客户系统暂停使用的情况。在恢复过程中查阅参考了几篇网上的技术文章,实际操作过后感觉有必要承前启后一下户报告中午正常使用的系统,下午无法打开,报告的是连接数据库错误。电话中初步判断是数据库启动失败。首先告知客户无法立即恢复,先转成手工操作。
到达客户处,首先检查“事件查看器”,发现系统日志文件损坏,事件查看器无法显示系统日志。只能首先删除清空,并重建事件日志文件。然后再启动sqlserver,这时候就可以在事件查看器中看到sqlserver启动失败的错误信息了。错误大概是说 “启动过程中master数据文件损坏,数据库无法恢复”。由于master是系统数据库,因此SQLSERVER无法启动。
SQL2000数据库置疑解决方法
按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sql server
3.用备份的数据库MDF的文件覆盖掉这个新建的同名数据库文件
4.再重启sql server
5.此时打开企业管理器时新建的同名数据库会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)
附加数据库错误提示:
“错误3456:未能恢复日志记录(***:***:x)事务 ID(0:***xx)......等等”
怀疑是日志文件损坏,只能寄希望于数据文件没有损坏。删除数据库日志文件,单独附加数据库文件,结果还是失败,报告“日志文件不符”。
由于远程操作过于缓慢,只能将客户数据文件压缩传回本地,再想办法进行修复。
MSSQL数据库置疑的说明及修复方法
MSSQL数据库置疑的说明及修复方法✧M SSQL 官方对suspect(‘置疑’,SQL2005中文为‘可疑’)状态的解释:“至少主文件组可疑或可能已损坏。
在SQL Server 启动过程中无法恢复数据库。
数据库不可用。
需要用户另外执行操作来解决问题。
”✧S QL Server 数据库置疑通常由于以下几种情况导致:1、因SQL服务意外退出导致数据库置疑,例如突然断电导致数据库日志文件损坏,下次启动后数据库变为置疑状态。
2、数据库文件所在的磁盘分区没有可用空间,导致恢复数据库的操作不能完成,数据库变为置疑状态。
3、数据库文件组已满,这种情况通常发生在MSDE或SQL 2005 Express,因为它们对数据库文件限制了大小,不超过2G或4G;当单个的数据库文件接近2G或4G很容易出现数据库置疑的情况;另外,当数据库文件所在磁盘分区格式为FAT32时,也有可能出现这种情况,FAT32格式的磁盘分区单个文件不能超过4G,当单个的数据库文件接近4G很容易出现数据库置疑的情况。
4、数据库文件设置为不自动增长,或设置为自动增长但限制了文件大小。
5、此外,其它非法的操作也有可能导致数据库置疑。
✧以下提供几种解决V3数据库置疑的办法:解决客户那里出现数据库置疑通常使用第一或第二种方法,解决问题时请根据实际情况处理提示:按以下方法修复数据库后,还需要用户密切观察一下V3服务器是否能正常运行、服务器是否有出错;查看服务器是否有出错可以右击服务管理器-‘工具’-‘日志’,在弹出的事件日志窗口中,查看应用程序日志中是否有OSERVER3的错误信息;如果有出错信息可能会出现数据收集不完整等问题,请即时联系我们解决。
问题一:SQL 2005 数据库置疑的解决方法SQL SERVER 2005,数据库置疑,可以尝试通过以下办法解决:--第一步:新建查询,执行以下SQL 语句;USE masterGOSP_CONFIGURE'ALLOW UPDATE',GORECONFIGURE WITH OVERRIDEGOALTER DATABASE OCULAR3 SET EMERGENCY--设置OCULAR3为紧急模式GOSP_DBOPTION'OCULAR3','SINGLE USER','TRUE'--设置OCULAR3为单用户模式GO--第二步:继续执行以下SQL语句DBCC CHECKDB('OCULAR3')--检查数据库的结构完整性,可能需要比较长时间GO--第三步:继续执行以下SQL语句DBCC CHECKDB('OCULAR3','REPAIR_ALLOW_DATA_LOSS')--修复数据库,可能需要比较长时间;执行到这一步,如果提示需要在单用户模式下运行,那么可以重启一下SQL SERVER服务再执行;GO--第四步:SP_DBOPTION'OCULAR3','SINGLE USER','FALSE'--设置OCULAR3为多用户模式GOALTER DATABASE OCULAR3 SET ONLINE--设置OCULAR3为正常模式GOSP_CONFIGURE'ALLOW UPDATE',0GORECONFIGURE WITH OVERRIDEGO--第五步:继续执行以下SQL语句DBCC CHECKDB('OCULAR3')–再次检查数据库的结构完整性GO问题二:SQL SERVER 2000,因为断电导致数据库被破坏而置疑,可以通过以下办法解决:--第一步:新建查询,执行以下SQL 语句;USE masterGOSP_CONFIGURE'ALLOW UPDATE',1GORECONFIGURE WITH OVERRIDEGO--设置数据库为紧急模式UPDATE sysdatabases SET status= 32768 WHERE name='OCULAR3'GOSP_DBOPTION'OCULAR3','SINGLE USER','TRUE'--设置OCULAR3为单用用户模式GO--第二步:继续执行以下SQL语句DBCC REBUILD_LOG('OCULAR3','d:\ocular3_log_log.ldf')--重建日志文件,--通常重建的日志文件放在与其它数据库文件相同目录下。
SQL2005数据库质疑图文解决办法
各位亲们,
本人也不容易,给力支持支持!
谢谢哦!
数据库质疑决解办法
1.打开开始菜单——所有程序——Microsoft SQL Server 2005——SQL Server Management Studio
如图划黑框的内个:
2.单击打开SQL Server Management Studio,点击连接
打开左边下拉框里面的数据库,找到后面显示黄色括号里面可疑的内个,点击打开,然后点击最左上角的新建查询,把下面语句复制上去
ALTER DA TABASE damiwan_Code SET EMERGENCY
ALTER DA TABASE damiwan_Code SET SINGLE_USER
DBCC CheckDB (damiwan_Code, REPAIR_ALLOW_DA TA_LOSS)
ALTER DA TABASE damiwan_Code SET MULTI_USER
上面damiwan_Code 是我的数据库别跟我填写一样。
填写你自己的哦
如图:
3.点击上面的√,再点击执行(数据量大,时间可能长哦),如图:
然后就ok 了如果还是不行请按照下面的操作试试
4.右击我的电脑点击管理,再点开服务和应用程序,打开SQL Server 配置管理器,点击SQL Server 2005服务,在右边的对话框里面的启动服务,右击都重新启动下。
如图:
就ok 了!!!。
sql数据库置疑修修复语句
SQL数据库置疑修复是一个复杂且细致的过程,需要数据库管理员具备丰富的经验和技能。
当数据库置疑时,通常意味着数据库的结构或数据可能已损坏,因此需要使用特定的修复语句和步骤来尝试恢复。
以下是一个关于SQL数据库置疑修复的详细指南,包括可能使用的修复语句和步骤。
修复前的准备备份数据库:在进行任何修复操作之前,务必先备份置疑的数据库。
这是为了防止进一步的数据丢失,如果修复操作不成功,还可以从备份中恢复数据。
评估损坏程度:使用DBCC CHECKDB命令检查数据库的完整性,并确定损坏的程度。
例如:sqlDBCC CHECKDB('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;这个命令会返回有关数据库中任何错误或不一致性的信息。
修复过程根据损坏的程度和类型,可以尝试以下修复步骤:使用REPAIR_REBUILD修复:如果损坏的是索引,可以使用REPAIR_REBUILD选项尝试修复。
例如:sqlDBCC CHECKDB('YourDatabaseName', REPAIR_REBUILD);这个命令会尝试重建损坏的索引。
可以多次执行此命令,直到没有更多的修复动作为止。
2. 使用REPAIR_ALLOW_DATA_LOSS修复:如果REPAIR_REBUILD无法解决问题,或者存在更严重的数据损坏,可以使用REPAIR_ALLOW_DATA_LOSS选项。
但请注意,这个选项可能会导致数据丢失。
例如:sqlDBCC CHECKDB('YourDatabaseName', REPAIR_ALLOW_DATA_LOSS);在执行此命令之前,请务必确保已经备份了数据库,并且了解可能的数据丢失风险。
3. 其他修复方法:如果上述方法均无法解决问题,可能需要考虑更复杂的修复策略,如恢复备份、使用第三方工具或寻求专家的帮助。
sql命令大全
sql命令大全(oracle)转载1、set verify on/off 控制输出行不显示old和new2、set define ‘&’定义变量字符3、set echo off/on 禁止或者启用sql脚本中的sql语句和命令4、accept varname vartype format a../$... prompt ‘....’;undefine varname5、变量中被定义为&1,&2意味者第一个变量和第二个变量6、ttitle和btitle 代表的页眉和页脚7、break on 和compute 用于为列添加小计8、内联视图select colnum from (select colum from tablename where condition);9、union:两个表不重复的所有行,intersect:两个表共有的行,minus:第一个表有而第二个表没有的行。
10、translate(x,from_string,to_string)用作密码文件的形成。
11、decode(value,search_value,result,default_value)条件查询,可以实现if的功能或者case的功能。
12、casewhen condition then result1when condition then result2····when condition then resultNelse default_resultend 注意case一般存在from前面13、使用connect by和start with可以实现层次化查询,可以通过lpad命令实现目录树的功能,lpad(x,num)它指用x字符在左边填充num个。
14、1、rollup可以为每个分组返回小计记录,cube,可以返回每一个列组合的小计记录,同时在末尾加上总计记录,他们都是group by的一种扩展。
SQL2000数据库置疑的解决方法
SQL2000数据库置疑的解决方法首先,在任何操作之前,必须要备份数据库(重要)一、分离数据库1、点击“程序》Microsoft SQL Server》企业管理》”,打开企业管理器2、展开服务器组,然后展开服务器,选中要分离的数据库3、点击鼠标右键“所有任务》分离数据库”,出现如下窗口4、点击确定,该选定的数据库就被分离。
5.分离后,把原数据库里面.MDF(主数据文件).LDF(事务日志文件)这两个文件复制到目标盘下,例:D盘下注意事项,只有“使用本数据库的连接”数为0时,该数据库才能分离。
所以分离数据库时尽量断开所有对要分离数据库操作的连接,如果还有连接数据库的程序,会出现数据库的连接状态窗口,显示正在连接此数据库的机器以及名称,点击清除按钮将从服务器强制断开现有的连接。
二、附加数据库1、在附加数据库之前,首先要移动数据库文件在附加数据库之前,您必须将与数据库关联的 .MDF(主数据文件).LDF(事务日志文件)这两个文件复制到目标硬盘下,或是同一服务器的不同硬盘目录下。
这两个文件一般位于C:\Program Files\Microsoft SQL Server\MSSQL\Data目录下。
2、点击“程序》Microsoft SQL Server》企业管理》”,打开企业管理器3、展开服务器组,然后展开服务器4、右击"数据库",然后选择“所有任务》附加数据库”,弹出窗口5、输入要附加的数据库的MDF名称。
如果不确定文件位于何处,单击浏览("...")搜索。
若要确保指定的 MDF 文件正确,请单击"验证"。
在"附加为"框内,输入数据库的名称。
数据库名称不能与任何现有数据库名称相同。
指定数据库的所有者6、单击"确定"按钮。
新附加的数据库的数据库节点即创建在"数据库"文件夹中重启双机1.此时数据库分离,附加完成,必须重启一次双机修复置疑1,双机重启后,数据库置疑下面所有修复置疑的语法,在没有特别提到时,默认数据库都请选择(Master)数据库)2,修复置疑(必须在SQL的查询分析器中才能进行数据修复置疑工作)A、打开查询分析器,当数据置疑之后在查询分析器中是看不到置疑的数据库名称的,所以进入查询分析器之后,所选数据库默认(Master)数据库即可。
SQL server 2008 数据库置疑的处理办法
SQL server 2008 数据库置疑的处理办法1 把问题数据库备份后直接删除停掉SQLSERVER服务,把服务器上出问题的数据库, 假设名称为ErrorDB的数据库文件及日志文件备份到其他目录,然后直接将其删除,把其数据库文件及日志文件也删除2 新建同名数据库启动SQLSERVER服务,新建同名数据库ErrorDB,文件目录和日志和原来一致3 用备份的数据库文件替换新的数据库文件停掉SQLSERVER服务,把备份的数据库文件替换新的数据库文件(只替换数据库文件,不替换日志文件)启动SQLSERVER服务,打开数据库,这时数据库应该是不能访问的-------------------设置应急模式、单用户模式、检查修复数据,取消单用户模式----------------------4 将数据库设置为应急状态alter database ErrorDB set emergency执行后,为了保险起见,重新停止、开启的SQLSERVER服务再打开数据库,已经可以看到里面的内容了,如表,视图,存储过程等数据库名称后有紧急标志,能看到数据库结构,但无法进行备份等操作5 将数据库设置为单用户模式ALTER DATABASE ErrorDB SET SINGLE_USER6 对数据库进行检查修复dbcc checkdb(EIMSDb,REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(EIMSDb,REPAIR_REBUILD)操作后,仍然停止启动SQLSERVER服务(不确定是否需要,我只是为了想无干扰查看执行后的数据库状况)重新打开数据库,已经是正常状态了,没有应急提示了7 取消单用户模式exec sp_dboption EIMSDb, N'single', N'false'至此,数据库恢复完毕,对数据库进行BAK重启网站,访问正常。
SQL语句错误排查与解决方案
SQL语句错误排查与解决方案SQL(Structured Query Language)是一种专门用于管理和处理数据库的语言。
在使用SQL语句进行数据库操作时,经常会遇到各种错误。
本文将探讨SQL语句错误的排查和解决方案,以帮助读者更好地处理这些问题。
一、SQL语法错误1.1 语法错误介绍SQL语句由关键字和操作符组成,当遵循特定的语法规则时,SQL语句才能被正确解释和执行。
然而,由于疏忽或不熟悉语法规则,编写的SQL语句很容易出现语法错误。
1.2 排查与解决方案当执行SQL语句时,如果遇到语法错误,数据库系统会给出相应的错误提示信息。
检查这些提示信息对于排查语法错误至关重要。
常见的SQL语法错误包括使用了错误的关键字、操作符、拼写错误、缺少必要的引号等。
在排查过程中,可以使用以下方法:1) 检查SQL语句的关键字和操作符是否正确。
2) 检查SQL语句是否严格遵循语法规则,例如是否缺少引号、括号是否匹配等。
3) 将SQL语句分解为多个独立的查询,并逐个查询,以确定哪一部分语句引发了错误。
4) 对照数据库系统的错误提示信息,查找相关的语法错误。
二、数据类型错误2.1 数据类型错误介绍数据库中的列具有特定的数据类型,例如整数、字符、日期等。
当我们在SQL 语句中使用了错误的数据类型时,数据库会返回错误信息。
2.2 排查与解决方案在处理数据类型错误时,需要注意以下几点:1) 确保在插入或更新数据时,将数据正确地转换为与目标列数据类型相匹配的类型。
可以使用类型转换函数或运算符来实现。
2) 检查数据库中列的数据类型是否与应用程序代码中的数据类型相匹配。
如果存在不匹配的情况,可能需要修改应用程序代码或更改数据库表结构。
三、约束错误3.1 约束错误介绍在数据库中,可以定义各种约束来保证数据的完整性和一致性。
常见的约束包括主键约束、唯一约束、外键约束等。
当违反了这些约束时,数据库会返回错误信息。
3.2 排查与解决方案处理约束错误时,可以采取以下措施:1) 检查约束的定义是否正确。
常规SQL SERVER数据库置疑后恢复步骤
常规SQL SERVER数据库置疑后恢复步骤--1.恢复步骤:--a.将smlog_log.ldf文件备份到其它目录下;--b.将源目录下的smlog_log.ldf文件改名为smlog_log_bak.ldf;--c.执行以下语句修改数据库的状态:use Mastergoupdate sysdatabases set status=32768 where name='数据库名称' --修改状态,設為緊急狀態goshutdown with nowait --停止数据库服务器go--d.退出SQL并在(COMMAND)命令行模式中通过下面的代码重新启动SQL:sqlservr -c -T3608 -T4022 --安全模式启动SQL SERVER--e.在查询分析器中执行以下语句来查看刚刚修改过状态的数据库状态:select Name,Status from sysdatabases where Name='数据库名稱'--f.执行以下代码新建日志文件:dbcc traceon(3604)--跟踪dbcc rebuild_log('数据库名称','日志文件全路徑') --文件名要有全路径和扩展名--dbcc rebuild_log('prs_msc','d:\mscsql\mssql\data\prs_msc_log.ldf --g.将数据库置回正常状态:update sysdatabases set status=0 where name='数据库名称'--h.重新启动数据库后执行以下语句检查数据库:DBCC CHECKDB --如果执行完有错误用以下语句修复--i.要修复数据库必需将数据库改为单用户模式:Exce sp_dboption '数据库名称','single user','true'---('false'恢复多用户)--j.执行以下语句修复数据库:DBCC CHECKDB('数据库名称',REPAIR_ALLOW_DATA_LOSS) REPAIR_ALLOW_DATA_LOSS:是比较高级的修复方式REPAIR_FAST:是简单快速的修复方式/*處理状态就为"置疑"的數據庫备份数据文件,然后按下面的步骤处理:1.新建一个同名的数据库(数据文件与原来的要一致)2.再停掉sql server(注意不要分离数据库)3.用原数据库的数据文件覆盖掉这个新建的数据库4.再重启sql server5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用数据库的脚本创建一个新的数据库,并将数据导进去就行了.*/USE MASTERGOSP_CONFIGURE 'ALLOW UPDATES',1GORECONFIGURE WITH OVERRIDEGOUPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的数据库名'Gosp_dboption '置疑的数据库名','single user','true'GoDBCC CHECKDB('置疑的数据库名')Goupdate sysdatabases set status=28 where name='置疑的数据库名' Gosp_configure 'allow updates',0GOreconfigure with overrideGosp_dboption '置疑的数据库名', 'single user','false'Go关于SQL数据库置疑的修复方法发布日期:2008/11/17 18:10:22 来源:作者:点击:1078斑竹广告联盟问题现象:数据库后面有“置疑”字样,查看系统事务日记出现以下错误:错误1---------------------------------------------错误: 823,严重度: 24,状态: 2I/O error 23(数据错误(循环冗余检查)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
寒山sql数据库修复中心/设置数据库允许直接操作系统表。
此操作可以在SQL Server Enterprise Manager里面选择数据库服务器,按右键,选择"属性",在"服务器设置"页面中将"允许对系统目录直接修改"一项选中。
也可以使用如下语句来实现*/use ais09gosp_configure 'allow updates',1goreconfigure with overridegosp_dboption 'ais09','single user','true'go/*设置为紧急修复模式(操作数据库切记切换为master)1077936153/4194328(正常) -32768(只读\脱机\紧急模式) 32768(紧急模式)*//*select * from sysdatabases*/update sysdatabases set status=-32768 where dbid=DB_ID('ais09')go/*执行真正的恢复操作,重建数据库日志文件*/dbcc checkdb('ais09','REPAIR_REBUILD')/*REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD */gosp_dboption 'ais09','single user','false'go/*设置数据库为正常状态*/sp_dboption 'ais09','dbo use only','false'go/*最后一步,我们要将步骤E中设置的"允许对系统目录直接修改"一项恢复。
因为平时直接操作系统表是一件比较危险的事情*/sp_configure 'allow updates',0goreconfigure with overridego二种模式:use ais19exec sp_dboption ais19,'single user',truedbcc checkdb('ais19','repair_rebuild')exec sp_dboption ais19,'single user',false三种模式:1. DBCC CHECKDB重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误。
use masterdeclare @databasename varchar(255)set @databasename='需要修复的数据库实体的名称'exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(@databasename,REPAIR_REBUILD)exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态然后执行DBCC CHECKDB('需要修复的数据库实体的名称') 检查数据库是否仍旧存在错误。
注意:修复后可能会造成部分数据的丢失。
2. DBCC CHECKTABLE如果DBCC CHECKDB 检查仍旧存在错误,可以使用DBCC CHECKTABLE来修复。
use 需要修复的数据库实体的名称declare @dbname varchar(255)set @dbname='需要修复的数据库实体的名称'exec sp_dboption @dbname,'single user','true'dbcc checktable('需要修复的数据表的名称',REPAIR_ALLOW_DATA_LOSS)dbcc checktable('需要修复的数据表的名称',REPAIR_REBUILD)------把' 需要修复的数据表的名称'更改为执行DBCC CHECKDB时报错的数据表的名称exec sp_dboption @dbname,'single user','false'3. 其他的一些常用的修复命令DBCC DBREINDEX 重建指定数据库中表的一个或多个索引用法:DBCC DBREINDEX (表名,'') 修复此表所有的索引。
===================================SQL SERVER数据库的检测及修复方法随着K/3产品的推广,要求客户服务人员对SQL SERVER数据库的了解也进一步提高。
在K/3的使用过程中,数据库文件被频繁地使用,由于某些原因,数据库有可能被损坏,本文将针对这种情况的数据库检测及修复方法做一简单讲解。
希望各位在实际工作过程中有新的发现时,及时给我们提供信息,以便做进一步的更新。
1.1 SQL SERVER数据库的检测SQL SERVER提供了数据库检测的命令,可用DBCC CHECKDB对数据库中各个对象的分配及结构的正确性进行检测,并可通过一参数控制,将所有的错误信息显示出来。
其语法如下:DBCC CHECKDB('database_name' [,NOINDEX | { REPAIR_ALLOW_DATA_LOSS| REPAIR_FAST| REPAIR_REBUILD}]) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}]参数说明:'database_name'代表被检测的数据库实体名;NOINDEX指非系统表的非聚族索引不检测;REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST| REPAIR_REBUILD 指直接修复发现的错误,其中REPAIR_ALLOW_DATA_LOSS代表,若此错误不能修复时,系统将直接删除相关数据。
带此三个参数的任一个时,数据库必须处于单用户模式,可在Enterprise Manager中的数据库属性中设置;ALL_ERRORMSGS代表将检测到的错误信息全部显示出来,否则,对于每张表最多只显示200条错误信息;NO_INFOMSGS代表隐藏所有的信息及占用空间的报告。
经过检测,对于错误的对象,将以OBJECT ID的形式报告具体出错的信息,可根据OBJECT ID到系统表sysobjects中查找到相关的表,即NAME。
1.2 SQL SERVER问题数据库的修复经过数据库检测后,可针对出现的问题采取相应的措施进行处理。
如通过检测后,发现对象的物理存放存在问题,可用DBCC CHECKALLOC来进行修复:DBCC CHECKALLOC ('database_name' | REPAIR_REBUILD }] ) [WITH {ALL_ERRORMSGS | NO_INFOMSGS}]若是非系统对象的索引出错,则可用DBCC DBREINDEX进行修复:DBCC DBREINDEX ( [ 'database.owner.table_name' [, index_name [, fillfactor ] ] ] ) [WITH NO_INFOMSGS]以上两种情况,也可直接使用DBCC CHECKDB(‘db_name',repair_rebuild)来修复。
另外一种情况是在进行检测时,提示无法建立数据连接,此时表明,数据库已损坏。
对于这种情况,我们可采取如下措施来尝试修复。
首先,在SQL Enterprise中新建一数据库(如数据库名为test),建好数据库后,停止SQL Server Service Manager,并将客户数据库的MDF文件更名为test _data.mdf(即新建数据库的主文件名),然后用更名后的文件覆盖新建数据库同名文件,接着,启动SQL Server Service Manager。
对Master数据库将系统表设置为可更改状态Use MasterGosp_configure 'allow updates', 1reconfigure with overrideGo将数据库设为紧急状态:update sysdatabases set status = 32768 where database '停止并重新启动SQL Server Service Manager,并重建Log文件:DBCC TRACEON (3604)DBCC REBUILD_LOG(' test ','test _log_ldf')将数据库设置为单用户模式,然后进行检测:sp_dboption ' test ', 'single user', 'true'DBCC CHECKDB(' test ')Go此数据库执行CHECKDB的过程中发现一些表的索引被破坏,于是针对具体的表进行重建索引的操作:DBCC DBREINDEX(表名)如执行以上操作仍然不能解决,若索引破坏的表是临时表或不是关键表,则可从新建账套中引入,若是主表,则可能通过近期的备份来(部份)恢复。
若没有一个备份,则无法修复。
1.3 SQL Server数据库为什么易损坏呢?以下是微软提供的一些可能引起数据库损坏的原因及一些预防措施:操作问题,包括冷起动机器、热拔硬盘、删除一些数据库文件;硬件问题,包括磁盘控制器的问题;操作系统问题,包括与系统相关的一些致命错误。
1.4 预防措施:1、定期/不定期执行CHKDSK(不带参数),以检测硬盘物理结构并修复一些CHKDSK报告的问题;2、常备份数据。
1.5 应用数据库修复举例declare @databasename varchar(255)set @databasename='AIS20021224170730'------一定要手工输入---------执行一般性修复还存在问题时,进行允许数据丢失的修复---------许数据丢失的修复要求在单用户下进行,此时请退出中间层,客户端,sql的其他模块---所有功能退出,在查询分析器master里设置数据库为单用户exec sp_dboption @databasename, N'single', N'true'-----在查询分析器master里,进行修复数据库dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)dbcc checkdb(@databasename,REPAIR_REBUILD)------还原数据库状态exec sp_dboption @databasename, N'single', N'false'第2章数据库日志损坏的修复请遵照如下步骤来试图重建数据库事务日志.注意: 由于事务日志丢失, 数据库可能有没有提交的数据.注:都要替换成真实的数据库名字2.1 步骤1:创建一个新的数据库,命名为原来数据库的名字.2.2步骤2:停止SQL Server2.3步骤3:把老数据库的MDF文件替换新数据库的相应的MDF文件, 并把LDF文件删除2.4步骤4:重新启动SQL Server 服务,然后运行如下命令:复制代码代码如下:Use MasterGosp_configure 'allow updates', 1reconfigure with overrideGobegin tranupdate sysdatabases set status = 32768 where db_name'-- Verify one row is updated before committingcommit tran2.5步骤5:停止SQL然后重新启动SQL Server 服务,然后运行如下命令:DBCC TRACEON (3604)DBCC REBUILD_LOG('db_name','c:\mssql7\data\dbxxx_3.LDF')Go2.6步骤6:停止SQL然后重新启动SQL Server 服务,然后运行:复制代码代码如下:use masterupdate sysdatabases set status = 8 whereGosp_configure 'allow updates', 0reconfigure with overrideGo2.7步骤7:运行dbcc checkdb(db_name)检查数据库的完整性.第3章数据库质疑的一般处理1、执行如下SQL(打开修改系统表的开关):EXEC sp_configure 'allow updates', 1RECONFIGURE WITH OVERRIDE2、修改数据库Master中的表:sysdatabases将status字段数值更改为43、再执行如下SQL:EXEC sp_configure 'allow updates', 0RECONFIGURE WITH OVERRIDE。