(2.1)备份与还原--sql server文件的概念操作

  概述:sql server是以文件形式存储数据与日志

1.数据文件

  sql server数据文件分为2类

  (1)主数据库文件

  主数据库文件包含数据库的启动信息、系统对象,并指向数据库的其他文件(从数据文件),主数据文件也可以存用户数据和对象。每个数据库必须且只能有一个主数据文件,其后缀名为.mdf。

  (2)从数据文件

  由用户自定义而成,用户存储用户数据与对象,其后缀名为.ndf.

  (3)文件组的概念

  分为2类

  【1】主文件组

  主文件组的名称是primary,它包含主要文件,以及未放入用户定义文件组的任何次要文件,所有系统表都会被分配到主文件组中,如果不指定文件组,默认也是放入主文件组中。

  默认文件组可以通过Alter database语句设置为primary之外的文件组,但是任何时候一个数据库都只能有一个默认文件组。

  【2】用户定义文件组

  用户定义文件组由用户在首次创建数据库时创建,或者是数据库创建后,通过修改数据库的方式创建。

  sql server数据库中读取和存储数据时,不以数据文件为单位,而是以文件组为单位进行操作。数据库中的每个对象都存储在某个文件组上(而不是数据库文件上),每个文件组包含至少一个数据文件。

  使用文件组而不是数据文件的好处在于:可以简化管理,增加可管理的数据文件的数目;逻辑上管理好数据库文件的分部与使用;另一方面可以突破系统的一些限制,例如:两个可用于存储数据的磁盘,但他们的大小都不足以存储整个数据库,则可以在两个磁盘上各建立一个数据文件,并加入到同一个文件组中,这样就可以同时使用2个磁盘的空间。

  使用多个文件的好处

  在大多数情况下,小型的数据库并不需要创建多个文件来存放数据。但是随着数据的增长,单个文件的弊端就会出现。

  •   首先,使用多个文件分布到不同的磁盘分区(多个硬盘)能够几大提高IO性能。
  •   其次,多个文件对于数据比较多的数据库来说,备份和恢复都会方便。
  •   但是,多文件需要占用更多的磁盘空间,因为每个文件中都有自己的一套B树组织方式和自己的增长空间。当然也有自己的碎片。
  •   总体来说,多个文件带来的优点是远远大于弊端的。

实例演示

如何创建多文件与文件组?

--1.用创建数据库的方式创建文件与文件组-- Create a new database
CREATE DATABASE MultipleFileGroups ON PRIMARY
(
    -- Primary File Group
    NAME = ‘MultipleFileGroups‘,
    FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\MultipleFileGroups.mdf‘,
    SIZE = 5MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1024KB
),
-- Secondary File Group
FILEGROUP FileGroup1
(
    -- 1st file in the first secondary File Group
    NAME = ‘MultipleFileGroups1‘,
    FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\MultipleFileGroups1.ndf‘,
    SIZE = 1MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1024KB
),
(
    -- 2nd file in the first secondary File Group
    NAME = ‘MultipleFileGroups2‘,
    FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\MultipleFileGroups2.ndf‘,
    SIZE = 1MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1024KB
)
LOG ON
(
    -- Log File
    NAME = ‘MultipleFileGroups_Log‘,
    FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\MultipleFileGroups.ldf‘,
    SIZE = 5MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1024KB
)
GO
 --2.创建文件组
 ALTER DATABASE [Test]
 ADD FILEGROUP [FG_Test_Id_01]

 ALTER DATABASE [Test]
 ADD FILEGROUP [FG_Test_Id_02]
 --3.创建文件
 ALTER DATABASE [Test]
 ADD FILE
 (NAME = N‘FG_TestUnique_Id_01_data‘,FILENAME = N‘E:\FG_TestUnique_Id_01_data.ndf‘,SIZE = 1MB, FILEGROWTH = 1MB )
 TO FILEGROUP [FG_Test_Id_01];

 ALTER DATABASE [Test]
 ADD FILE
 (NAME = N‘FG_TestUnique_Id_02_data‘,FILENAME = N‘E:\FG_TestUnique_Id_02_data.ndf‘,SIZE = 1MB, FILEGROWTH = 1MB )
 TO FILEGROUP [FG_Test_Id_02];

如何把表或索引放到特定的文件组?如何建立文件组

CREATE TABLE Customers
(
   FirstName CHAR(50) NOT NULL,
   LastName CHAR(50) NOT NULL,
   Address CHAR(100) NOT NULL,
   ZipCode CHAR(5) NOT NULL,
   Rating INT NOT NULL,
   ModifiedDate DATETIME NOT NULL,
)
ON [FileGroup1]
GO

如何标记特定文件组为默认文件组?

-- FileGroup1 gets the default filegroup, where new database objects
-- will be created
ALTER DATABASE MultipleFileGroups MODIFY FILEGROUP FileGroup1 DEFAULT
GO

这是我通常推荐的方法,因为你不需要再考虑,在创建完你的数据库对象后。因此现在让我们创建一个新的表,它会自动存储在FileGroup1文件组。

-- The table will be created in the file group "FileGroup1"
CREATE TABLE Test
(
    Filler CHAR(8000)
)
GO

现在我们进行简单的测试:我们插入40000条记录到表。每条记录8K大小。因此我们插入了320MB数据到表。这是我刚才提的轮询调度分配算法,会进行操作:SQL Server会在2个文件间发放数据:第一个文件有160M的数据,第二个文件也会有160M的数据。

-- Insert 40.000 records, results in about 312MB data (40.000 x 8KB / 1024 = 312,5MB)
-- They are distributed in a round-robin fashion between the files in the file group "FileGroup1"
-- Each file will get about 160MB
DECLARE @i INT = 1
WHILE (@i <= 40000)
BEGIN
    INSERT INTO Test VALUES
    (
        REPLICATE(‘x‘, 8000)
    )

    SET @i += 1
END
GO

接下来你可以在硬盘上看下,你会看到2个文件时同样的大小。

当你把这些文件放在不同的物理硬盘上,你可以同时访问它们。那就是在一个文件组里有多个文件的强大。

你也可以使用下列脚本获取数据库文件的相关信息。

-- Retrieve file statistics information about the created database files
DECLARE @dbId INT
SELECT @dbId = database_id FROM sys.databases WHERE name = ‘MultipleFileGroups‘

SELECT
    sys.database_files.type_desc,
    sys.database_files.physical_name,
    sys.dm_io_virtual_file_stats.* FROM sys.dm_io_virtual_file_stats
(
    @dbId,
    NULL
)
INNER JOIN sys.database_files ON sys.database_files.file_id = sys.dm_io_virtual_file_stats.file_id
GO

参考文章:

https://www.sqlpassion.at/archive/2016/08/29/files-and-file-groups-in-sql-server/

SQL Server将表数据移动到新的文件/文件组:

  (1)https://blog.csdn.net/apollokk/article/details/72472437

  (2)https://www.cnblogs.com/lyhabc/p/3480917.html    (精品推荐)

原文地址:https://www.cnblogs.com/gered/p/9175134.html

时间: 2024-10-12 19:13:47

(2.1)备份与还原--sql server文件的概念操作的相关文章

如何还原SQL Server 数据库到Always On可用性组

问题描述 ============== 如何还原SQL Server 数据库到AlwaysOn可用性组 问题解答 ==============我们无法在一个可用组的数据库上执行还原操作,如果需要的话,我们必须从可用性组中删除数据库然后再还原和重新配置.它与您在镜像或日志传送方案中所使用的类似. 下面是相关的步骤去还原SQL Server数据库到AlwaysOn可用性组 步骤1: 从可用性组中删除数据库 1)在新的主服务器上,扩展可用性组的可用性数据库的列表. 2)右键单击要还原的数据库,然后选择

SQL Server 文件和文件组

文件和文件组简介 在SQL Server中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL Server通过管理逻辑上的文件组的方式来管理文件. SQL Server通过文件组对数据文件进行管理.我们看到的逻辑数据库由一个或者多个文件组构成. 结构图如下: 文件组管理着磁盘上的文件,文件中存放的就是SQL Server的实际数据. 为什么通过文件组来管理文件 从用户的角度来说,创建对象时需要指定存储文件组的只有三种数据对象:表,索引和大对象

还原SQL SERVER系统库

还原SQL SERVER系统库 共需还原三个系统库,还原顺序:master>msdb>model 还原master (1).数据库配置管理器->数据库服务属性->启动参数->添加"-m"后,重启sql服务,数据库就进入了单用户模式. (2).打开数据库管理工具   (3).弹出连接服务窗口,点击"取消"   (4).点击"新建查询",然后用windows身份登录,用户名一定要是Administrator (5).在窗

虚拟机备份克隆导致SQL SERVER 出现IO错误案例

案例环境: 服务器配置: CPU: Intel E5-2690  RAM: 12G   虚拟机 操作系统  : Windows Server 2008 R2 Standard Edtion   x64 数据库版本: SQL SERVER 2008R2 案例介绍: 晚上收到数据库一封告警邮件SQL Server Alert System: 'Severity 016' occurred on \\xxxxx. 邮件具体内容如下所示, DATE/TIME: 2014/8/13 22:56:11 DE

还原SQL server失败导致单个用户

https://jingyan.baidu.com/article/20095761ca8343cb0721b4fb.html 还原SQL server失败导致单个用户问题: 1 DECLARE @SQL VARCHAR(MAX); 2 SET @SQL='' 3 SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID) 4 FROM master..sysprocesses 5 WHERE dbid=DB_ID('DEV_SMM_LB'); 6 EXEC(@SQL); 7

SQL Server 最小化日志操作解析,应用

Sql Server 中数据库在BULK_LOGGED/SIMPLE模式下的一些操作会采用最小化日志的记录方式,以减小tran log落盘日志量从而提高整体性能. 这里我简单介绍下哪些操作在什么样的情况下会最小化日志记录.以及现实生产环境中如何应用最小化日志. 概念:SQL Server在满足相应条件的基础上时进行一些特定的操作如Rebuild Index时会进行最小化Tran Log记录操作,从而改善系统性能. 注意:含最小化操作日志操作段日志无法按时间点恢复(point in time) 需

SQL Server 索引知识-概念

概念篇 索引概念(index concept) 一种表或视图中相关的B-tree的数据结构.索引键列由一列或多列组成.可拥有包含性列(sql2005).用于提升Sql Server 查找相关数据行效率. 聚集索引(Clustered index) 表或索引视图数据行按照聚集索引键排序.每个表只能有一个聚集索引(聚集表中数据只能按一种方式组织).表中有聚集索引则表称为聚集索引表,无聚集索引则称为堆表. 非聚集索引(Nonclustered index) 独立于数据行之外的一种数据结构.用于快速检索

对于超大型SQL SERVER数据库执行DBCC操作

原文:对于超大型SQL SERVER数据库执行DBCC操作 对于数据库维护,主要使用DBCC CHECKDB来实现,以下是对大型数据库的使用说明,小型数据库一般直接使用就可以了: 1.2008(2005我不确认)已经实现了快照检查,也就是当你执行DBCC时,DBMS会先快照出一个数据库,然后在快照上执行检查,这样对原来的库不造成锁的影响. 2.使用Physical_only选项,可以以较少的开销检查数据库的物理一致性.并且能检查出会危及用户数据安全的残缺页.校验和错误及常见的硬件故障.所以对于频

C#与sql server数据库存储过程的操作实例

通过这几天的学习和实际操作,把C#与sql server数据库存储过程的操作搞清楚了. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.