SQL Server 无法打开'msdb'数据库

SQL Server 无法打开'msdb'数据库,第1张

释放磁盘空间并且重新运行恢复 *** 作,按照下面的步骤收缩日志。

sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。

为从根本上解决这样的问题,你可以按下面的 *** 作配置SQLSERVER 2000:

a.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样

UPDATE,DELETE,SELECT就不会记录日志,日志就不会增加的很大:

USE MASTER

GO

ALTER DATABASE DB_NAME SET RECOVERY SIMPLE

b.如果你的恢复模式是全部,你一定要配置日志字段收缩:

USE MASTER

GO

sp_dboption 'databasename','trunc. log on chkpt.',true

sp_dboption 'databasename','autoshrink',true

c.通过每日备份将日志收缩:

BACKUP DATABASE DATABASE_NAME TO BACKUP_DEVICES

BACKUP LOG DATABASE_NAME TO LOG_DEVICES

OR

BACKUP LOG DATABASE_NAME with truncate_only

**检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志并没有收缩!

d.每天在备份数据库完成之后,重新启动MS SQLSERVER SERVICE.

USE DATABASE_NAME

go

DBCC SHRINKFILE(2,truncateonly)

**检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志已经收缩!

e.手动快速收缩日志:

/ *run below script,you will shrink you database log files

immediately, in my experience,you need to run the script for 3 or

4 minutes before stopping it manually */

use databasename

dbcc shrinkfile(2,notruncate)

dbcc shrinkfile(2,truncateonly)

create table t1(char1 char(4000))

go

declare @i int

select @i=0

while(1=1)

begin

while(@i<100)

begin

INSERT INTO T1 VALUES ('A')

SELECT @I=@I+1

END

TRUNCATE table T1

BACKUP LOG youdatabasename with truncate_only

end

GO

注意 只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用

sp_resetstatus。否则,可能会损坏数据库。

由于该过程修改了系统表,系统管理员必须在运行 sp_resetstatus这个过程前,启用系统表更新。要

启 用更新,使用下面的过程:

USE master

GO

sp_configure 'allow updates', 1

GO

RECONFIGURE WITH OVERRIDE

GO

过程创建后,立即禁用系统表更新:

sp_configure 'allow updates', 0

GO

RECONFIGURE WITH OVERRIDE

GO

只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即关闭 SQL Server。

1)转移master数据库。

首先,由于 SQL Server 每次启动的时候都需要读取 master 数据库,因此我们必须在企业管理器中改变 SQL Server 启动参数中 master 数据文件和日志文件的路径。

在 SQL Server 属性的“常规”选项卡下面有一个叫做【启动参数】的按钮,单击后可以看到右图所示的界面。

其中,-d 用来指定 master 数据库文件的完全合法路径,而 –l用来指定 master 数据库日志文件的完全合法路径。

将这些参数修改为新的 master 数据文件和日志文件所在的路径,如:

-dE:\SQLData\master.mdf

-lE:\SQLData\mastlog.ldf

接着,停止 SQL Server 服务,将 master.mdf 文件和 mastlog.ldf 文件拷贝到新的位置,如上例中的 E:\SQLData。

最后,只要重新启动服务即可。

(2)转移msdb数据库和model数据库。

我们同样可以使用 sp_detach_db 和 sp_attach_db 来分离和附加这两个数据库。但是对于 msdb 数据库,首先应确保 SQL Server 代理当前没有运行,否则 sp_detach_db 存储过程将运行失败,并返回如下消息:

无法除去数据库 'msdb' ,因为它当前正在使用。

接着,必须用跟踪标记 3608 启动 SQL Server,这样它不会恢复除 master之外的任何数据库。

要添加跟踪标记 3608 作为 SQL Server 的启动参数,首先调出如前所示的“启动参数”对话框,再添加新参数 -T3608。

添加跟踪标记 3608 后,停止并重新启动 SQL Server,再如下分离 msdb 或者 model 数据库:

EXEC sp_detach_db 'msdb'

GO

接着,将数据文件和日志文件移到新的位置,然后再如下重新附加 msdb 数据库或者 model 数据库:

USE master

GO

EXEC sp_attach_db @dbname = 'model',

@filename1 = 'mdf 文件新的路径名',

@filename2 = 'ldf 文件新的路径名'

GO

最后,在企业管理器中,从“启动参数”框中删除 -T3608 跟踪标记,再停止并重新启动 SQL Server。

(3)转移 tempdb 数据库。

对于 tempdb 数据库而言,可以直接使用 ALTER DATABASE 语句来为数据文件和日志文件指定新的存放位置,如下所示:

USE master

GO

ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME =

'E:\Sqldata\tempdb.mdf')

go

ALTER DATABASE tempdb MODIFY FILE(NAME = templog, FILENAME =

'E:\Sqldata\templog.ldf')

GO

引自:http://support.microsoft.com/kb/224071/zh-cn

移动 MSDB (SQL Server 7.0)

注意:如果您在移动 msdb 和 model 数据库的同时结合使用此过程,则重新附加的顺序必须首先是 model,然后是 msdb。如果首先重新附加的是 msdb,则必须将它分离,等到附加完 model 后再重新附加。

1. 确保 SQL Server 代理当前没有运行。

2. 使用与移动用户数据库相同的步骤。

注意:如果 SQL Server 代理正在运行,则 sp_detach_db 存储过程将会失败,并返回以下消息:

服务器:消息 3702,级别 16,状态 1,行 0

无法删除数据库 'msdb',因为该数据库当前正在使用。

DBCC 执行完毕。如果 DBCC 输出了错误消息,请与系统管理员联系。

回到顶端

移动 MSDB 数据库(SQL Server 2000 和 SQL Server 2005)

注意:如果您在移动 msdb 和 model 数据库的同时结合使用此过程,则重新附加的顺序必须首先是 model,然后是 msdb。如果首先重新附加的是 msdb,则必须将它分离,等到附加完 model 后再重新附加。

在 SQL Server 2000 和 SQL Server 2005 中,不能使用 sp_detach_db 存储过程分离系统数据库。运行 sp_detach_db 'msdb' 将会失败并返回以下消息:

服务器:消息 7940,级别 16,状态 1,行 1

无法分离系统数据库 master、model、msdb 和 tempdb。

要在 SQL Server 2000 上移动 MSDB 数据库,请按照下列步骤 *** 作:

1. 在 SQL Server 企业管理器中,右键单击服务器名,然后单击属性。

2. 在常规选项卡上,单击启动参数。

3. 添加一个新参数“-T3608”(不带引号)。

添加跟踪标记 3608 后,按照下列步骤 *** 作:

1. 停止并重新启动 SQL Server。

2. 确保 SQL Server 代理服务当前没有运行。

3. 按如下所示分离 msdb 数据库:

use master

go

sp_detach_db 'msdb'

go

4. 将 Msdbdata.mdf 和 Msdblog.ldf 文件从当前位置 (D:\Mssql8\Data) 移到新位置 (E:\Mssql8\Data)。

5. 在企业管理器中,从启动参数框中删除 -T3608 跟踪标记。

6. 停止并重新启动 SQL Server。

7. 按如下所示重新附加 MSDB 数据库:

use master

go

sp_attach_db 'msdb','E:\Mssql8\Data\msdbdata.mdf','E:\Mssql8\Da ta\msdblog.ldf'

go

注意:如果您试图通过使用跟踪标记 -T3608 启动 SQL Server 来重新附加 msdb 数据库,会收到以下错误:

服务器:消息 615,级别 21,状态 1,行 1

未能找到 ID 为 3,名称为 'model' 的数据库表。

回到顶端

如果您使用的是 SQL Server 2005

可以使用 SQL Server 配置管理器来更改 SQL Server 服务的启动参数。有关如何更改启动参数的更多信息,请访问以下 Microsoft Developer Network 网站:

http://msdn2.microsoft.com/zh-cn/library/ms190737. aspx (http://msdn2.microsoft.com/zh-cn/library/ms190737 .aspx)

移动 MSDB 数据库后,可能会收到以下错误消息:

错误 229:拒绝了对对象 'ObjectName' (数据库 'master',所有者 'dbo')的执行权限。

发生此问题的原因是所有权链断裂。MSDB 数据库和 master 数据库的所有者不相同。因此,MSDB 数据库的所有权已经发生更改。要解决此问题,请在 Isql.exe 命令行实用工具或 Osql.exe 命令行实用工具中运行以下命令:

USE MSDB

Go

EXEC sp_changedbowner 'sa'

Go

有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

272424 (http://support.microsoft.com/kb/272424/ ) INF:数据库范围内的对象所有权链检查取决于映射至对象所有者的登录信息

回到顶端

移动 master 数据库

1. 在 SQL Server 企业管理器中,更改 master 数据和日志文件的路径。

注意:您也可以在此更改错误日志的位置。

2. 在企业管理器中,右键单击 SQL Server,然后单击属性。

3. 单击启动参数,将会显示以下条目:

-dD:\MSSQL7\data\master.mdf

-eD:\MSSQL7\log\ErrorLog

-lD:\MSSQL7\data\mastlog.ldf

-d 是 master 数据库数据文件的完全限定路径。

-e 是错误日志文件的完全限定路径。

-l 是 master 数据库日志文件的完全限定路径。

4. 按如下所示更改这些值:

1. 删除 Master.mdf 和 Mastlog.ldf 文件的当前条目。

2. 添加指定新位置的新条目:

-dE:\SQLDATA\master.mdf

-lE:\SQLDATA\mastlog.ldf

5. 停止 SQL Server。

6. 将 Master.mdf 和 Mastlog.ldf 文件复制到新位置 (E:\Sqldata)。

7. 重新启动 SQL Server。

回到顶端

移动 model 数据库

要移动 model 数据库,必须用跟踪标记 3608 启动 SQL Server,这样它不会恢复除 master 之外的任何数据库。

注意:此时,您不能立即访问任何用户数据库。使用此跟踪标记时,除下列步骤外,不要执行其他任何 *** 作。要将跟踪标记 3608 添加为 SQL Server 启动参数,请按照下列步骤 *** 作:

1. 在 SQL Server 企业管理器中,右键单击服务器名,然后单击“属性”。

2. 在“常规”选项卡上,单击“启动参数”。

3. 添加一个新参数“-T3608”(不带引号)。

添加跟踪标记 3608 后,按照下列步骤 *** 作:

1. 停止并重新启动 SQL Server。

2. 按如下所示分离“model”数据库:

use master

go

sp_detach_db 'model'

go

3. 将 Model.mdf 和 Modellog.ldf 文件从 D:\Mssql7\Data 移到 E:\Sqldata。

4. 按如下所示重新附加 model 数据库:

use master

go

sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modello g.ldf'

go

5. 在企业管理器中,从启动参数框中删除 -T3608 跟踪标记。

6. 停止并重新启动 SQL Server。您可以使用 sp_helpfile 确认文件位置的更改:

use model

go

sp_helpfile

go

回到顶端

移动 tempdb

您可以使用 ALTER DATABASE 语句来移动 tempdb 文件。

1. 按如下所示使用 sp_helpfile 确定 tempdb 数据库的逻辑文件名:

use tempdb

go

sp_helpfile

go

每个文件的逻辑名均包含在名称列中。该示例使用了默认文件名 tempdev 和 templog。

2. 按如下所示使用 ALTER DATABASE 语句指定逻辑文件名:

use master

go

Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')

go

Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')

go

应当收到以下确认更改的消息:

文件“tempdev”在 sysaltfiles 中被修改。重新启动 SQL Server 后会删除旧文件。

文件“templog”在 sysaltfiles 中被修改。重新启动 SQL Server 后会删除旧文件。

你指的,应该是数据库文件的位置吧?

通过调用系统存储过程 SP_HELPDB就能查看数据库文件的位置。

SQL语句:    SP_HELPDB   [数据库名]

如图

filename列下的就是数据库Street存放数据库文件的位置。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9997717.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存