MDF数据文件个数问题

qk119770095 2009-03-05 10:17:56
有关MSSQLSERVER数据库的问题:书上说主要数据文件只能有一个,但是为什么在数据文件里可以有多个扩展名为MDF的文件啊?
( 在新建数据库后会自带一个扩展名为MDF的文件,但是在添加数据文件时也还可以添加一个扩展名为MDF的数据文件,请专家解释下,谢谢)
...全文
190 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
hao1hao2hao3 2010-09-14
  • 打赏
  • 举报
回复
晕!这是什么时候的帖子了?17楼太牛了。
flyinsky333 2010-09-14
  • 打赏
  • 举报
回复
ok。学习了。
Zoezs 2009-03-06
  • 打赏
  • 举报
回复
应该是楼主理解有误,每个库只能有一个,但是有多个库啊,那不就有多个MDF。
你装的数据库,是数据库系统,包含多个库文件。
claro 2009-03-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qk119770095 的回复:]
其实我就是不明白为什么一个数据库中可以有多个扩展名为MDF的数据文件,书上讲了主要数据文件只能有有一个的啊,麻烦大家再解释解释。
[/Quote]
书上也没错,楼主理解有误。
一个数据库可以有多个实例,你本机安装了SQL2000,可以新建数据库A,数据库B,数据库C,分别来管理,而对应的也会存在A.MDF、B.MDF、C.MDF。
好比一个果盘里只能放一种水果即苹果,但可以放多个苹果。
orochi_gao 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sdhdy 的回复:]
尽信书则不如无书,书上说的一个应该就是指建立数据库最早的那个mdf文件。
[/Quote]

CREATE DATABASE [DBTEST] ON PRIMARY
( NAME = N'DBTEST_data1', FILENAME = N'G:\SQLdb\DBTEST1.mdf'),
( NAME = N'DBTEST_data2', FILENAME = N'G:\SQLdb\DBTEST2.mdf')
LOG ON
( NAME = N'DBTEST_log1', FILENAME = N'G:\SQLdb\DBTEST_log1.ldf'),
( NAME = N'DBTEST_log2', FILENAME = N'G:\SQLdb\DBTEST_log2.ldf')
chuifengde 2009-03-05
  • 打赏
  • 举报
回复
楼主应该把主数据文件和mdf文件区分开来理解,主数据文件只能有一个,主数据文件可以用mdf扩展来标识,也可以不用它来标识,只不过mdf是默认的主数据文件扩展名罢了,同理ndf,ldf亦如此]
create database test
on primary
(
name=t1,
filename='d:\t1'
),
(
name=t2,
filename='d:\t2.mdf'
)
log on
(
name=t3,
filename='d:\t3.ldf'
)


看看这个例子,t1是实际的mdf,t2的实际上应是ndf,但扩展名就可以随意
chuifengde 2009-03-05
  • 打赏
  • 举报
回复
书上只提到了mdf,ndf,ldf,没提到别的扩展名,那是不是别的扩展名就不能创建呢?当然不是(不用扩展名都能创建),这三个扩展名只是让用户用"肉眼"好区分哪是主,哪是次,哪是日志,真正的主,次,日志文件,可以从sysfiles中用fileid来区分,1是"mdf",2是第一个"ldf"再往下就是"ndf","ndf"之后又是"ldf",至于用什么扩展名就不要计较了
智者潜行 2009-03-05
  • 打赏
  • 举报
回复
书上说........
sdhdy 2009-03-05
  • 打赏
  • 举报
回复
尽信书则不如无书,书上说的一个应该就是指建立数据库最早的那个mdf文件。
qk119770095 2009-03-05
  • 打赏
  • 举报
回复
其实我就是不明白为什么一个数据库中可以有多个扩展名为MDF的数据文件,书上讲了主要数据文件只能有有一个的啊,麻烦大家再解释解释。
chuifengde 2009-03-05
  • 打赏
  • 举报
回复
mdf,ndf和ldf主要是用来更清楚表示哪个物理文件是主,次数据文件及日志文件,如果你不用这些扩展名,或用别的扩展名一样可以创建数据库,这些讲到主要文件是一个,次要的可有一个或多个,日志也可以多个我想应该是从文件物理结构来区分的,而不是从扩展名上
wuyi8808 2009-03-05
  • 打赏
  • 举报
回复
可以有多个
jlj84237485 2009-03-05
  • 打赏
  • 举报
回复
帮顶一下
dawugui 2009-03-05
  • 打赏
  • 举报
回复
通常情况
一个MDF
一个LDF

特殊情况
一个MDF
多个LDF
多个NDF


有三种类型的文件用来存储数据库:

主文件包含数据库的启动信息。主文件还可以用来存储数据。每个数据库都包含一个主文件。


次要文件保存所有主要数据文件中容纳不下的数据。如果主文件大到足以容纳数据库中的所有数据,就不需要有次要数据文件。而另一些数据库可能非常大,需要多个次要数据文件,也可能使用多个独立磁盘驱动器上的次要文件,以将数据分布在多个磁盘上。


事务日志文件保存用来恢复数据库的日志信息。每个数据库必须至少有一个事务日志文件(尽管可以有多个)。事务日志文件最小为 512 KB。
每个数据库至少有两个文件,一个主文件和一个事务日志文件。

尽管 'os_file_name' 可以是任何有效的操作系统文件名,但如果使用以下建议的扩展名,则可以更加清楚地反映文件的用途。

文件类型 文件扩展名
主要数据文件 .mdf
次要数据文件 .ndf
事务日志文件 .ldf
wushilin201 2009-03-05
  • 打赏
  • 举报
回复
在SQL2005和SQL2008中,,,如果需要使用分区表,,,就必须建立多个数据文件(MDF)来存放,,
存放的准则是不同的数据文件,放在不同的硬盘上,以提高IO的读写速度。
dawugui 2009-03-05
  • 打赏
  • 举报
回复
一个MDF
一个LDF
多个NDF
interfacejava 2009-03-05
  • 打赏
  • 举报
回复
就只有一个mdf
NewDBA 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 chuifengde 的回复:]
楼主应该把主数据文件和mdf文件区分开来理解,主数据文件只能有一个,主数据文件可以用mdf扩展来标识,也可以不用它来标识,只不过mdf是默认的主数据文件扩展名罢了,同理ndf,ldf亦如此]

SQL codecreate database test
on primary
(
name=t1,
filename='d:\t1'
),
(
name=t2,
filename='d:\t2.mdf'
)
log on
(
name=t3,
filename='d:\t3.ldf'
)



看看这个例子,t1是实际的mdf,t2的实际上应是n…
[/Quote]

学习了~~~
//附加数据库 sp_attach_db 当使用 sp_attach_db 系统存储过程附加数据库时。 sp_attach_db:将数据库附加到服务器。 语法 sp_attach_db [ @dbname = ] 'dbname' , [ @filename1 = ] 'filename_n' [ ,...16 ] 参数 [@dbname =] 'dbname' 要附加到服务器的数据库的名称。该名称必须是唯一的。dbname 的数据类型为 sysname,默认值为 NULL。 [@filename1 =] 'filename_n' 数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。 参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。 该列表还必须包括数据库分离后所有被移动的文件。 返回代码值:0(成功)或 1(失败) eg:下面的示例将 pubs 中的两个文件附加到当前服务器。 EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf' EXEC sp_attach_db @dbname = N'Ty20051029101451aaa', @filename1 = N'd:\5屏幕\Ty20051029101451aaa_data.mdf', @filename2 = N'd:\5屏幕\Ty20051029101451aaa_log.ldf' ---解决问题了 //删除数据库 DROP DATABASE 从Microsoft? SQL Server? 删除一个或多个数据库。删除数据库将删除数据库所使用的数据库文件和磁盘文件。 语法 :DROP DATABASE database_name [ ,...n ] 参数 :database_name 指定要删除的数据库名称。从 master 数据库中执行 sp_helpdb 以查看数据库列表。 eg: exec sp_helpdb database_name exec Drpo DataBase [Ty20051029101451aaa] //分离数据库 可以使用 sp_detach_db 存储过程分离该数据库,然后使用带有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。 sp_detach_db Archive GO CREATE DATABASE Archive ON PRIMARY (FILENAME = 'c:\program files\microsoft sqlserver\mssql\data\archdat1.mdf') FOR ATTACH GO //显示当前数据库信息 --select * from Master..sysDatabases //新建---不行啊 CREATE DATABASE TestOA ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE TestOA From disk='C:\Documents and Settings\Administrator\桌面\帐套\data\Template.Dat' ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE exec sp_detach_db Km20051030011601 --分离数据库 exec sp_attach_single_file_db km20051030011601,'D:\TestDatabase\Km20051030011601.mdf'--只附加.mdf文件

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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