·天新网首页·加入收藏·设为首页·网站导航
数码笔记本手机摄像机相机MP3MP4GPS
硬件台式机网络服务器主板CPU硬盘显卡
办公投影打印传真
家电电视影院空调
游戏网游单机动漫
汽车新车购车试驾
下载驱动源码
学院开发设计
考试公务员高考考研
业界互联网通信探索
SQL SERVER将一个文件组的数据移动到另一个文件组
http://www.21tx.com 2013年12月19日 cnblogs 桦仔

1 2 下一页

移动数据:

1、有表分区

2、没有表分区

我这里只讨论没有表分区的情况,表分区的情况还不是很明白

例子

比如:你有三个文件组,其中一个是主文件组

测试脚本:

USE master
GO
    
    
IF EXISTS(SELECT * FROM sys.[databases] WHERE [database_id]=DB_ID('Test'))
DROP DATABASE [Test]
    
--1.创建数据库
CREATE DATABASE [Test]
GO
    
USE [Test]
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];
    
    
--4.创建表,这个表的数据存放在[FG_Test_Id_01] 文件组上
CREATE TABLE aa(id INT ,cname NVARCHAR(4000)) ON [FG_Test_Id_01] 
GO
    
    
--5.插入数据
INSERT INTO [dbo].[aa]
SELECT 1,REPLICATE('s',3000)
GO 500
    
    
--6.查询数据
SELECT * FROM [dbo].[aa]
    
    
--7.创建聚集索引在[FG_Test_Id_02]文件组上
CREATE CLUSTERED INDEX PK_ID ON [dbo].[aa]([id]) WITH(ONLINE=ON) ON [FG_Test_Id_02]
GO
    
    
--8.我们查看一下文件组的逻辑文件名
EXEC [sys].[sp_helpdb] @dbname = TEST -- sysname
    
    
    
--9.收缩一下FG_Test_Id_01文件组文件
DBCC SHRINKFILE(FG_TestUnique_Id_01_data,1)
    
    
--10.你可以选择drop掉聚集索引,也可以选择不drop掉聚集索引
DROP INDEX PK_ID ON [dbo].[aa]
    
USE master
GO
DROP DATABASE [Test]

上面的脚本虽然简单,但是隐藏了非常多的知识点

知识点1:创建了两个文件组,现在数据库有三个文件组,包括主文件组,当你不指定任何参数的时候默认创建出来的数据文件是1MB大小

SQL SERVER将一个文件组的数据移动到另一个文件组

知识点2:插入数据,因为表是创建在[FG_Test_Id_01]文件组上,所以数据都会放在E:FG_TestUnique_Id_01_data.ndf

1CREATETABLE aa(id INT ,cname NVARCHAR(4000)) ON[FG_Test_Id_01]

2GO

SQL SERVER将一个文件组的数据移动到另一个文件组

知识点3:创建聚集索引,其实这句话里面包含了几个动作,在E:FG_TestUnique_Id_02_data.ndf文件上分配页面,并把aa表的数据

放进去E:FG_TestUnique_Id_02_data.ndf文件,其实这里聚集索引成为了移动数据的中介,我在

SQLSERVER聚集索引与非聚集索引的再次研究(上)文章写到:聚集索引叶子节点就是数据,我们把聚集索引(一定要是聚集索引,非聚集索引不是)

建立在E:FG_TestUnique_Id_02_data.ndf文件上实际上就是把数据页面聚集索引页面移动到E:FG_TestUnique_Id_02_data.ndf文件里

因为SQLSERVER是没有 ALTER TABLE aa(id INT ,cname NVARCHAR(4000)) ON [FG_Test_Id_01] 这种语法上

就是说你一旦建表并且表中已经有数据之后,如果你要移动表数据,只能通过聚集索引这个中介来移动表数据

SQL SERVER将一个文件组的数据移动到另一个文件组

1CREATECLUSTEREDINDEX PK_ID ON[dbo].[aa]([id]) WITH(ONLINE=ON) ON[FG_Test_Id_02]2GO

从下图可以看出数据都已经移动到E:FG_TestUnique_Id_02_data.ndf文件上

SQL SERVER将一个文件组的数据移动到另一个文件组

上一篇: 关于SQL Server 2005没有服务器名称
下一篇: SQL Server 重置Identity标识列的值(INT爆了)

1 2 下一页

关于我们 | 联系我们 | 加入我们 | 广告服务 | 投诉意见 | 网站导航
Copyright © 2000-2011 21tx.com, All Rights Reserved.
晨新科技 版权所有 Created by TXSite.net