数据库无法备份,求助啊

coklo 2008-11-30 01:57:09
某天我看数据库文件夹里,莫名其妙多了三个文件夹,PowerEasy0000,SF6.5,pk_dnt_posts1_msg,感觉以前都是没有的,就动手删除了,结果只删除掉两个:PowerEasy0000,SF6.5,

今天我想备份,结果出现如图所示,哪位高人帮忙解答一下啊,是怎么回事,该如何解决。


...全文
685 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
ys_go 2009-01-19
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 coklo 的回复:]
谢谢楼上几位大哥的帮忙,虽然没直接派上用场,但非常感谢你们的帮忙。呵呵。
[/Quote]
还是自己来的好。:)
-狙击手- 2008-12-06
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 coklo 的回复:]
无意发现解决方法:
点击展开数据库----存储---全文目录---目录下发现pk_dnt_posts1_msg,SF6.5,PowerEasy0000,这三个文件名,将其删除,重新备份,成功。
[/Quote]

汗一个
coklo 2008-12-06
  • 打赏
  • 举报
回复
谢谢楼上几位大哥的帮忙,虽然没直接派上用场,但非常感谢你们的帮忙。呵呵。
coklo 2008-12-06
  • 打赏
  • 举报
回复
无意发现解决方法:
点击展开数据库----存储---全文目录---目录下发现pk_dnt_posts1_msg,SF6.5,PowerEasy0000,这三个文件名,将其删除,重新备份,成功。
coklo 2008-12-05
  • 打赏
  • 举报
回复
按以下操作:
USE 要备份的数据库名 
GO
DECLARE @fg sysname
SELECT @fg = fg.[name]
FROM sys.filegroups AS fg JOIN
sys.database_files AS f
ON fg.data_space_id = f.data_space_id
WHERE f.[name] = 'sysft_SF6.5'

EXEC('ALTER DATABASE 要备份的数据库名 REMOVE FILEGROUP ' + @fg)
GO
BACKUP DATABASE 要备份的数据库名 TO DISK = '备份文件的路径和备份文件名称'
WITH init
GO

我执行的是:
USE jiude 
GO
DECLARE @fg sysname
SELECT @fg = fg.[name]
FROM sys.filegroups AS fg JOIN
sys.database_files AS f
ON fg.data_space_id = f.data_space_id
WHERE f.[name] = 'sysft_SF6.5'

EXEC('ALTER DATABASE jiude REMOVE FILEGROUP ' + @fg)
GO
BACKUP DATABASE jiude TO DISK = 'E:\xvfdhggdfnfcshuju\yuanlai\wdgtw4e54w3333\a02231657059.mdf'
WITH init
GO

其中:jiude 为我要备份的数据库,E:\xvfdhggdfnfcshuju\yuanlai\wdgtw4e54w3333\a02231657059.mdf 为我的数据库位置和数据库文件名。
执行后,出现以下错误:
消息 156,级别 15,状态 1,第 1 行
关键字 'PRIMARY' 附近有语法错误。
消息 3007,级别 16,状态 1,第 1 行
不允许对文件或文件组 "sysft_pk_dnt_posts1_msg" 进行备份,因为它没有联机。可以使用 FILEGROUP 或 FILE 子句执行 BACKUP,以限制在选项中只包括联机数据。
消息 3007,级别 16,状态 1,第 1 行
不允许对文件或文件组 "sysft_SF6.5" 进行备份,因为它没有联机。可以使用 FILEGROUP 或 FILE 子句执行 BACKUP,以限制在选项中只包括联机数据。
消息 3007,级别 16,状态 1,第 1 行
不允许对文件或文件组 "sysft_PowerEasy" 进行备份,因为它没有联机。可以使用 FILEGROUP 或 FILE 子句执行 BACKUP,以限制在选项中只包括联机数据。
消息 3013,级别 16,状态 1,第 1 行
BACKUP DATABASE 正在异常终止。



在我数据库文件E:\xvfdhggdfnfcshuju\yuanlai\wdgtw4e54w3333里包括了pk_dnt_posts1_msgSF6.5PowerEasy0000,这三个文件夹,是我觉得为多余的,不再需要的。
you_tube 2008-12-05
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 coklo 的回复:]
如何::::::::
将那些你确定不再需要的没有联机的文件组移除?????????
[/Quote]

USE 要备份的数据库名
GO
DECLARE @fg sysname
SELECT @fg = fg.[name]
FROM sys.filegroups AS fg JOIN
sys.database_files AS f
ON fg.data_space_id = f.data_space_id
WHERE f.[name] = 'sysft_SF6.5'

EXEC('ALTER DATABASE 要备份的数据库名 REMOVE FILEGROUP ' + @fg)
GO
BACKUP DATABASE 要备份的数据库名 TO DISK = '备份文件的路径和备份文件名称'
WITH init
GO

这样就行了
shuiniu 2008-12-05
  • 打赏
  • 举报
回复
Sorry!写好了没有测试。


USE 要备份的数据库名
GO
DECLARE @fg sysname
SELECT @fg = fg.[name]
FROM sys.filegroups AS fg JOIN
sys.database_files AS f
ON fg.data_space_id = f.data_space_id
WHERE f.[name] = 'sysft_SF6.5'

--GO 这个GO给注释掉就可以了

EXEC('ALTER DATABASE 要备份的数据库名 REMOVE FILEGROUP ' + @fg)
GO
BACKUP DATABASE 要备份的数据库名 TO DISK = '备份文件的路径和备份文件名称'
WITH init
GO
coklo 2008-12-04
  • 打赏
  • 举报
回复
如何::::::::
将那些你确定不再需要的没有联机的文件组移除?????????
coklo 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 shuiniu 的回复:]

3.2可以将那些你确定不再需要的没有联机的文件组移除,然后再备份数据库
例如:
USE 要备份的数据库名
GO
DECLARE @fg sysname
SELECT @fg = fg.[name]
FROM sys.filegroups AS fg JOIN
sys.database_files AS f
ON fg.data_space_id = f.data_space_id
WHERE f.[name] = 'sysft_SF6.5'
GO
EXEC('ALTER DATABASE 要备份的数据库名 REMOVE FILEGROUP ' + @fg)
GO
BACKUP DATABASE 要备份的数据库名 TO DISK = '备份文件的路径和备份文件名称'
WITH init
GO
[/Quote]
按该操作出现:
消息 137,级别 15,状态 2,第 1 行
必须声明标量变量 "@fg"。
消息 3007,级别 16,状态 1,第 1 行
不允许对文件或文件组 "sysft_pk_dnt_posts1_msg" 进行备份,因为它没有联机。可以使用 FILEGROUP 或 FILE 子句执行 BACKUP,以限制在选项中只包括联机数据。
消息 3007,级别 16,状态 1,第 1 行
不允许对文件或文件组 "sysft_SF6.5" 进行备份,因为它没有联机。可以使用 FILEGROUP 或 FILE 子句执行 BACKUP,以限制在选项中只包括联机数据。
消息 3007,级别 16,状态 1,第 1 行
不允许对文件或文件组 "sysft_PowerEasy" 进行备份,因为它没有联机。可以使用 FILEGROUP 或 FILE 子句执行 BACKUP,以限制在选项中只包括联机数据。
消息 3013,级别 16,状态 1,第 1 行
BACKUP DATABASE 正在异常终止。
coklo 2008-12-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wufeng4552 的回复:]
SQL code---參考
/*
这是因为数据库中全文目录是未联机。[/Quote]
感觉说对了,但我本身就启用了全文索引的噢。估计我是把全文索引的文件夹删了。
shuiniu 2008-12-03
  • 打赏
  • 举报
回复
1.首先你要确定文件/组为什么没有联机,通过下面的查询来确定数据库文件的状态。
USE 要备份的数据库名
GO
SELECT [file_id],[name],physical_name,state_desc
FROM sys.database_files
GO

2.先尝试通过可用的备份来还原这些文件/组
参考: RESTORE 的文件/组还原。
注:可以从包含文件/组的数据库备份中单独还原某个文件/组

3.如果无法恢复这些没有联机的文件/组,那么你可以有两种方法来备份数据。

3.1 使用文件/组备份,备份时只指定那些联机的文件/组
例如:
BACKUP DATABASE 要备份的数据库名 FILEGROUP = ... ,FILE= ... TO DISK = ...

3.2可以将那些你确定不再需要的没有联机的文件组移除,然后再备份数据库
例如:
USE 要备份的数据库名
GO
DECLARE @fg sysname
SELECT @fg = fg.[name]
FROM sys.filegroups AS fg JOIN
sys.database_files AS f
ON fg.data_space_id = f.data_space_id
WHERE f.[name] = 'sysft_SF6.5'
GO
EXEC('ALTER DATABASE 要备份的数据库名 REMOVE FILEGROUP ' + @fg)
GO
BACKUP DATABASE 要备份的数据库名 TO DISK = '备份文件的路径和备份文件名称'
WITH init
GO

leo_bogard 2008-12-03
  • 打赏
  • 举报
回复
up
水族杰纶 2008-12-03
  • 打赏
  • 举报
回复
---參考
/*
这是因为数据库中全文目录是未联机。 要执行完整备份, SQL Server 2005 需要所有数据库文件和将联机数据库中全文目录。
因为一个或多个下列条件都满足全文目录可能联机:• 全文目录文件夹删除或者损坏。
• 您没有启用全文索引数据库。
• 是从 Microsoft SQL Server 2000 数据库备份还原数据库。 因此, 文件夹是全文目录数据库中不存在其中还原数据库服务器上。
• 从 SQL Server 2000 升级 SQL Server 2005, 您运行的实例。 但是, 全文搜索服务无法访问在升级过程。
• 从位置附加数据库。 期间附件但是, 您指定为该全文目录文件夹正确位置。
解决问题:
1、创建全文索引
xxxx数据库—>属性—>文件—>使用全文索引
2、重新执行完整备份
*/


kye_jufei 2008-12-03
  • 打赏
  • 举报
回复
try user sql storedprocedure!
eg:

USE [MES]
GO
/****** Object: StoredProcedure [dbo].[p_backupdb] Script Date: 12/03/2008 08:05:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER proc [dbo].[p_backupdb]
@dbname sysname='', --要备份的数据库名称,不指定则备份当前数据库
@bkpath nvarchar(260)='', --备份文件的存放目录,不指定则使用SQL默认的备份目录
@bkfname nvarchar(260)='', --备份文件名,文件名中可以用\DBNAME\代表数据库名,\DATE\代表日期,\TIME\代表时间
@bktype nvarchar(10)='DB', --备份类型:'DB'备份数据库,'DF' 差异备份,'LOG' 日志备份
@appendfile bit=1 --追加/覆盖备份文件
as
declare @sql varchar(8000)
if isnull(@dbname,'')='' set @dbname=db_name()
if isnull(@bkpath,'')='' set @bkpath=dbo.f_getdbpath(null)
if isnull(@bkfname,'')='' set @bkfname='\DBNAME\_\DATE\_\TIME\.BAK'
set @bkfname=replace(replace(replace(@bkfname,'\DBNAME\',@dbname)
,'\DATE\',convert(varchar,getdate(),112))
,'\TIME\',replace(convert(varchar,getdate(),108),':',''))
set @sql='backup '+case @bktype when 'LOG' then 'log ' else 'database ' end +@dbname
+' to disk='''+@bkpath+@bkfname
+''' with '+case @bktype when 'DF' then 'DIFFERENTIAL,' else '' end
+case @appendfile when 1 then 'NOINIT' else 'INIT' end
print @sql
exec(@sql)

you_tube 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 brio8425 的回复:]
弱弱的问下:什么叫offline状态的文件组?
[/Quote]

没有联机的文件,就是你打开企业管理器看不到的数据库表
brio8425 2008-12-03
  • 打赏
  • 举报
回复
弱弱的问下:什么叫offline状态的文件组?
  • 打赏
  • 举报
回复
{ 改成(
coklo 2008-12-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 happyflystone 的回复:]
或:

BACKUP DATABASE database_name
FILE = { logical_file_name | @logical_file_name_var }
BACKUP DATABASE database_name
FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }
BACKUP DATABASE database_name
READ_WRITE_FILEGROUPS
[/Quote]
按该操作出现以下问题:
消息 102,级别 15,状态 1,第 2 行
'{' 附近有语法错误。
消息 102,级别 15,状态 1,第 4 行
'{' 附近有语法错误。
-狙击手- 2008-12-02
  • 打赏
  • 举报
回复
或:

BACKUP DATABASE database_name
FILE = { logical_file_name | @logical_file_name_var }
BACKUP DATABASE database_name
FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var }
BACKUP DATABASE database_name
READ_WRITE_FILEGROUPS
-狙击手- 2008-12-02
  • 打赏
  • 举报
回复
点击新建查询后,
运行ALTER DATABASE 数据库名 REMOVE FILEGROUP 文件组名
加载更多回复(4)

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧