第VI章、データベースおよびデータベースオブジェクト
要約:
1、データベースの組成および特性を理解します
2、SQL Server2008のインストールと構成を把握
図3は、データベースを作成し、維持する方法を習得します
4、アーキテクチャの定義とメンテナンス方法のマスター
5、作成とメンテナンス方法を習得パーティションテーブル、索引とビュー
セクションI、データベースの作成とメンテナンス
1.1、SQL Serverデータベースの概要
SQL Serverの開発の歴史
SQL Server 7.0の(1999年、正式に企業データベースのランクの中で)
(製品に代わって2000年、)SQL Server 2000の
SQL Server 2005の(2005、コードネーム "ユーコン")
(2008年に、主要な製品バージョン)SQL Server 2008の
SQL Server 2012の
SQL Serverの2014
SQL Serverの機能
保護データベースクエリ
サーバ管理業務に費やす時間を短縮
アプリケーションの安定性を高めます
システムの実行パフォーマンスの最適化と予測
- SQL Serverのバージョン
Enterprise Editionの(エンタープライズ版):包括的なデータプラットフォームを提供するために、エンタープライズアプリケーションのために。
スタンダード版(スタンダード版):部門アプリケーションのためのサポートを提供します。
デベロッパー版(開発版):Enterprise Editionの所有は、使用制限を備えています。
ワークグループ・エディション(ワークグループ・エディション):各ブランチアプリケーションのためのサポートを提供します。
オンライン(ウェブ版):低コストのWEBアプリケーションソリューションを提供しています。
モバイル機器向けのモバイル(コンパクト)をサポート。
無料版(エクスプレス):学習と小さなアプリケーションを構築するために適しました。
- SQL Server 2008のリソース要件をインストールします。
最小ハードウェア要件
請求 | 32位 | 64位 |
---|---|---|
プロセッサ | PcntiumⅢ以上 | Itaniumの、Opteronプロセッサ、AthclonまたはXCONは、EM64Tサポート/ Pcntiumを持っています |
プロセッサ速度 | 1.0GHz以上 | 1.6GHzの以上 |
メモリ | 512メガバイト | 512メガバイト |
- SQL Serverデータベース内の分類
システムデータベース(自動的に作成)
- マスター:すべてのシステムレベルの情報、メタデータ、エンドポイント、接続、およびシステム構成サーバー。
- MSDB:エージェント・アラームサービスのスケジュールとオペレーションを使用する際にオペレータを記録し、この情報を保存します。
- tempdbの:一時的なオブジェクトと中間結果を格納するために使用される、あなたが起動するたびに再作成しました。
- モデル:すべてのテンプレートデータベース、公共データベースストアのユーザー情報へ。
- リソース:読み取り専用データベース。オブジェクトエクスプローラで見られるよりも少ないです。
ユーザーデータベース(データストレージおよびユーザトラフィックに関連します)
1.2、SQL Serverデータベースの構成
- オペレーティングシステムファイルのセットにマッピングされたSQL Serverデータベース:
データファイル
.mdfファイル:プライマリデータファイル。唯一のサイズ3メガバイトよりも小さくありません。
.NDF:セカンダリデータファイル。0以上であり、ディスクまたは複数のディスク上に保存することができます。
ログファイル
.LDF:トランザクション・ログ・ファイル。少なくとも1つのログファイル。
1.2.1ディストリビューション、データベース・ストレージ・スペース
あなたはユーザーデータベースを作成すると、モデルのデータベースが自動的に新しいライブラリにコピーされます。
データ・ストレージの最小単位:データのページ(ページ、ページと呼ばれます)。
図1は、連続したディスク・スペースの8KBのページです。(連続したストレージ・スペース)
ページ・サイズは、データのデータベーステーブルの行の最大サイズを決定します。
ページを折りたたむことができない行が格納されています。
1.2.2運動
例:データ・テーブルデータの10000行、行あたり3000バイト、計算テーブルのメモリスペースが必要です。
答え:2分の10000 * 8キロバイト= 40メガバイト
宇宙利用6000/8000 = 75%
1.3、データベースのファイル・グループ
ファイルグループの二つのタイプ:
プライマリファイルグループ(PRIMARY)
システム定義は、メインデータファイルや他のファイルグループに他のデータファイル明示的に割り当てられていない、すべてのページは、マスタ・ファイル・グループに割り当てられているシステムテーブルが含まれています。
ユーザー定義ファイルグループ
あなたは、データベースを定義または変更するとファイルグループがキーワードで指定されました。
注意:
ログファイルには、別途、グループファイル、ログ領域とデータ領域管理ではありません。
ファイルには、複数のファイル・グループのメンバーにすることはできません。
ファイルに複数のファイルグループが含まれている場合、すべてのファイルが満たされた後、サイクルが自動的に増加します。
データベースファイルを加えた後、ファイルが他のグループに移動することはできません。
デフォルトのファイルグループとしてのみのファイルセットを指定することができます。
1.4、データベースファイルの属性
データファイルとログファイルは、必要な情報のデータベースを定義しました。
ファイル名と場所
論理ファイル名、物理ファイル名
初期サイズ
あなたは、modelデータベースのプライマリデータファイルのサイズより小さくすることはできません
成長
あなたは成長からのファイル(デフォルト)かどうかを指定できます
最大サイズ
最大リミットファイル成長。無制限のデフォルト
成長
あなたは成長からのファイル(デフォルト)かどうかを指定できます
最大サイズ
最大リミットファイル成長。無制限のデフォルト
1.5、T-SQLを使用してデータベースを作成します
データベースを作成するには、2つの一般的な方法があります。
データベースSQL Server Management Studioを(視覚的に作成)を作成することにより、
T-SQLステートメントを介してデータベースを作成します(コンソールを作成します)
T-SQL
CREATE DATABASE database_name
//指定创建的数据库逻辑名 如Studentdb
[ ON
[<filespec> [, … n] ]
[, <filegroup> [,…n] ]
//指定创建的数据库主文件(mdf)存放的路径比如 e:\Studentdb.mdf
]
[
LOG ON {<filespec> [,…n]}
//指定创建的数据库日志文件(ldf)存放的路径比如e:\Studentdb_log.ldf
]
[COLLATE collation_name]
[FOR LOAD| FOR ATTACH]
説明:
PRIMARY:プライマリ・データベース・ファイルとして指定された、あなたは最初のファイルは、メイン・データ・ファイルでデフォルト値を指定しないでください。
LOG ON:自動的にログ・ファイル、データ・ファイルの合計サイズが512キロバイトの25%以上を作成します。
NAME:唯一の論理ファイル名。
FILENAME:物理ファイル名。
SIZE:初期サイズ、.mdfファイルサイズが小さいモデルより、1メガバイトをデフォルト.NDFではありません。
MAXSIZE:最大サイズが指定されていない、ファイルが自動的にディスクがいっぱいになるまで成長します。
UNLIMITED:無制限の成長、一般的に指定されたログファイルの2TB、データは16TBをファイル。
FILEGROWTH:指定したファイルは自動的に増分ではなく、より多くのMAXSIZEデフォルトのデータファイルの1メガバイトよりも、ログファイルは、現在のファイルの10%です。
FILEGROUP:唯一の論理ファイル名のセットは、システム名にすることはできません。
DEFAULE:デフォルトのファイルグループとして設定されたファイルを指定します。
ケース:
CREATE DATABASE Studentdb
//数据库名
ON
( NAME = 'Studentdb_Data',
//主数据文件逻辑名
FILENAME = 'E:\Studentdb.mdf',
//主数据文件存放位置
SIZE = 3MB,
//主数据文件初始大小
MAXSIZE = 50MB,
//主数据文件最大大小
FILEGROWTH = 10%
//超过初始大小后文件增长率
)
LOG ON
( NAME = 'Studentdb_Log',
//日志文件逻辑名
FILENAME = 'E:\ Studentdb.ldf',
//日志文件存放位置
SIZE = 2MB,
//日志文件初始大小
MAXSIZE = 5MB,
//日志文件最大大小
FILEGROWTH = 1MB
//超过初始大小后文件增长率
)
GO
//执行建数据库的命令
1.6、データベースを変更
データベーススペースを拡張
既存のデータベースファイルのサイズを拡大
データベースの新しいファイルを追加します。
データベースのスペースを縮小
データベースでそのリリースの未使用スペースは、最初の末尾からファイルを縮小します。
自動シュリンク:AUTO_SHRINK、デフォルトはfalseを。
ハンドシュリンク:ファイルサイズでデータベースを縮小。
データベース全体の大きさに比例して縮小。
データベースファイルの追加と削除
ALTER DATABASE DATABASE
{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE logical_file_name
| ADD FILEGROUP filegroup_name
| REMOVE FILEGROUP filegroup_name
| MODIFY FILE < filespec >
| MODIFY NAME = new_dbname
| MODIFY FILEGROUP filegroup_name {filegroup_property
| NAME = new_filegroup_name }
| SET < optionspec > [ ,...n ] [ WITH < termination > ]
| COLLATE < collation_name >
}
指定されたファイルのサイズを展開します。
ALTER DATABASE STU_DB
MODIFY FILE(NAME=student_data, SIZE=8MB)
新しいデータファイルを追加します。
ALTER DATABASE STU_DB
ADD FILE(NAME=student_data2,
FILENAME=‘E:\Data\student_data2.ndf’,
SIZE=6MB,FILEGROWTH=0)
データベース全体のサイズを縮小します。
DBCC SHRINKDATABASE
指定されたファイルのサイズを縮小します。
DBCC SHRINKFILE
例1:
DBCC SHRINKDATABASE(students,20)
収縮のデータベースファイルは、空き領域の20%を使用しています
例2:
DBCC SHRINKFILE(students_data1,4)
4メガバイトにデータベースのサイズを縮小
データベースファイルを削除します。
ALTER DATABASEのSTU_DB
REMOVEファイルstudent_log1
注意:
あなたは、ファイルを追加すると、各グループ内のデータファイルが占める割合を埋めるために、ログファイルは順次増加しています。
ファイルを削除するには、空です。
1.7、データベースをデタッチとアタッチ
データベースをデタッチ
役割:1つのデータベースサーバから別のデータベースを達成するためには、再構築する必要はありません。
インスタンスから削除され、それが削除されていないデータファイルを行い、データファイルを維持し、ファイルが完全で一貫しているログに記録するログファイルを。
使用sp_detach_dbシステムストアドプロシージャ
如:EXEC sp_detach_db'student '' true」に
追加のデータベース
データベースにデータベース管理システムを再接続分離。
あなたは、物理的な保存場所とファイル名のプライマリデータファイルを指定する必要があります。
CREATE DATABASEを......
FOR ATTACH | ATTACH_REBUILD_LOG
例:
CREATE DATABASE students
On(FILENAME=‘F:\Data\Students_data1.mdf’)
FOR ATTACH
セクションII、アーキテクチャ
アーキテクチャ(また、パターンとして知られているスキーマは、) 、データベースが固有の同じデータベーススキーマ名内、コンテナオブジェクト、フレームワークの一つ以上を含むデータベースであり、データベースの論理的な名前空間です。
定義されたフレームワーク
CREATE SCHEMA [<构架名>]
AUTHORIZATION<用户名>
削除フレームワーク
DROP SCHEMA [<构架名>]
セクションIII、パーティションテーブル
3.1、基本概念
パーティションテーブルは、データテーブルは異なるサブセットに水平に分割され、データベースの1つ以上のファイルグループに格納されたデータのサブセット。いくつかのより小さなテーブル、ロジック、または大きなテーブルに物理的に大きなテーブル。
パーティションの使用の合理化は、データベースのパフォーマンスを向上させることができます。
パーティションテーブルは、現在のデータサイズ、および将来のデータ量かどうかに依存するだけでなく、テーブル内のデータの動作特性に作成します。
表には、いくつかの異なる方法を使用して大量のデータが含まれている(あるいは含まれています)
データは、このような分離今年のように、セグメント化されています。
3.2、パーティションテーブルを作成します
三つのステップ:
(1)は、パーティション関数を作成します。どのような方法パーティション内のDBMS(データベース管理システム)を教えて
PARTITION関数を作成
(2)パーティションスキームを作成:分割機能は、グループに生成されたファイルを分割する役割をマッピングすることです
PARTITIONスキームを作成
(3)テーブルを作成するパーティションの使用
列のタイトル:
例1:
分割カラムコル(INT)の左側にパーティション関数を作成します。
CREATE PARTITION FUCNTION myPF1(int)
AS RANGE LEFT FOR VALUES(1,100,1000);
パーティション | 1 | 2 | 3 | 4 |
---|---|---|---|---|
値 | COL1 <= 1 | col1の> 1、COL1 <= 100 | COL1> 100 AND COL1 <= 1000 | COL1> 1000年 |
あなたは、パーティションの右側を使用している場合
CREATE PARTITION FUCNTION myPF1(int)
AS RANGE RIGHT FOR VALUES(1,100,1000);
パーティション | 1 | 2 | 3 | 4 |
---|---|---|---|---|
値 | COL1 <1 | COL1> = 1つの、COL1 <100 | COL1> = 100、COL1 <1000年 | COL1> = 1000 |
例2:
最初のパーティション関数を作成し、パーティションスキームを作成して、パーティションテーブルを作成しました。
//创建分区函数
CREATE PARTITION FUCNTION myPF1(int) AS RANGE LEFT FOR VALUES(1,100,1000);
GO
//创建分区方案
CREATE PARTITION SCHEME myPS1 AS PARTITION myPF1 TO (
test1fg, test2fg, test3fg, test4fg)
GO
CREATE TABLE PartitionTable(
Coll int,
Col2 char(10)
ON myPS1(coll))
説明:
TOのPARTITION SCHEME myPS1 AS PARTITIONのmyPF1 //パーティション関数を作成します(
test1fg、test2fg、test3fg、test4fgファイルの// 4グループ)
TABLE PartitionTable CREATE(
コル。INT、
Col2にチャー(10)
ON myPS1(コル)//行のパーティション)
第四四半期、インデックス
4.1、インデックスを作成します
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]
INDEX index_name
ON table_name(column_name…)
//填充因子(系数):指定一个0~100之间的值,表示索引页填充的百分比
[WITH FILLFACTOR=x]
INDEX:インデックスキーワード
UNIQUEは、オプションの一意のインデックスを表し、
CLUSTERED、NONCLUSTEREDは、クラスタ化インデックスまたは非クラスタ化インデックスを表し、
あるいはFILLFACTORのパーセンテージは、インデックスページが空間により占有充填することを示し、曲線因子、0と100の間の指定された値を表します。
4.2、インデックスを削除
DROP INDEX
//テーブルまたはインデックス付きビュー、およびインデックス名を削除する列のインデックス
'tablename.indexname | viewtable.indexname'
//複数を指定することができ、削除するインデックスを示し
[、... n]は
第V章、インデックス付きビュー
5.1、基本概念
また、仮想テーブルとして知られている標準的なビューは、同じベーステーブルを用いて、結果セットを返します。結果セットは、永続的に標準ビューに格納されていません。
ビューのユニークなクラスタ化インデックス、作成インデックス付きビューもマテリアライズド・ビューとして知られているが、。割出し後、結果セットのビューは、データベースに格納されています。
ベーステーブルへの変更は、インデックス・ビューに格納されたデータに反映されます。
5.2、行事インデックス付きビュー
いくつかの更新基礎データ、インデックス付きビューより良いです
バッチ形式の基礎となるデータは定期的に更新されており、主に読み取り専用のデータとして扱われている場合は、更新前のすべてのインデックス付きビューの削除を検討し、再構築し、更新のパフォーマンスを向上させます。
- インデックス付きビューは、クエリのこれらのタイプのパフォーマンスを向上させることができます
行と高分子多数の接続を処理
一般的に行われ、多くのクエリおよび集計操作を接続します
- インデックス付きビューは、通常のクエリのこれらのタイプのパフォーマンスは向上しません。
書き込み操作の多数OLTPシステム
データベース更新操作の数が多いです
重合は、クエリを伴わまたはリンクされていません
重合度の高いベースデータBY GROUP。
5.3、インデックス付きビューの定義
- 条件が満たされなければならない前に、ビューにクラスタ化インデックスを作成します。
あなたはインデックス付きビューを定義する場合、ビューは、ベーステーブルではなく、他のビューを参照することができます。
だから、参照ベーステーブルと同じデータベース内のビュー、同じ所有者。
しなければならないのSCHEMABINDINGのビルド表示するオプション。
式のビューで参照されるすべての機能が決定されなければなりません。
ビュー上に作成された最初のインデックスがユニークであるクラスタ化インデックス、他の後に作成されました、。
CREATE VIEW;WITH SCHEMABINDING; CREATE
UNIQUE CLUSTERED INDEX …
例:
1、
1、在SQL Server 2008中,主要数据文件必须建立在( )文件组中。
答案:主
2、
2、不同的数据库管理系统采用的日志文件格式不完全一样,概括起来主要有以记录为单位的日志文件和以( )为单位的日志文件两种。
答案:数据块
3、
3、在SQL Server 2008中,每个数据页可存储8060字节的数据。设表T有10000行数据,每行占用4031字节,则存储该表数据大约需要( )MB存储空间,其空间利用率大约是( )%。(存储空间和空间利用率均保留到整数,小数点后按四舍五入处理)
解:行数据不能跨页存储
4031<8060<4031*2,所以每个页只能存储1行数据
10000*1*8(每页的大小8KB)=80000KB=80MB
[4031/8060]=0.5=50%
答案:80、50
4、
4、在SQL Server 2008中,如果数据库tempdb的空间不足,可能会造成一些操作无法进行,此时需要扩大tempdb的空间。下列关于扩大tempdb空间的方法,错误的是( )
A.手工扩大tempdb中某数据文件的大小
B.设置tempdb中的数据文件为自动增长方式,每当空间不够时让其自动增长
C.手工为tempdb增加一个数据文件
D.删除tempdb中的日志内容,以获得更多的数据空间
答案:D[删除文件,必须是文件内容为空的时候]
5、
5、设有职工表(职工号,姓名,地址1,地址2),其中,职工号为主码。现要求地址1和地址2组合起来不能有重复值。在SQL Server 2008环境中有下列创建该表的语句:
Ⅰ.CREATE TABLE 职工表(
职工号 int PRIMARY KEY,
姓名 nchar(10),
地址1 nvarchar(20),
地址2 nvarchar(20),
UNIQUE(地址1,地址2)
)
Ⅱ.CREATE TABLE 职工表(
职工号 int PRIMARY KEY,
姓名 nchar(10),
地址1 nvarchar(20),
地址2 nvarchar(20)UNIQUE(地址1,地址2)
)
Ⅲ.CREATE TABLE 职工表(
职工号 int PRIMARY KEY,
姓名 nchar(10),
地址1 nvarchar(20)UNIQUE,
地址2 nvarchar(20)UNIQUE
)
Ⅳ.CREATE TABLE 职工表(
职工号 int PRIMARY KEY,
姓名 nchar(10),
地址1 nvarchar(20) UNIQUE(地址1,地址2),
地址2 nvarchar(20)
)
上述语句能正确实现此约束的是( )
A.仅Ⅰ和Ⅲ
B.仅Ⅱ和Ⅳ
C.都正确
D.仅Ⅰ、Ⅱ和Ⅳ
答案:D
两个地址不能相同的约束语句是:
UNIQUE(地址1,地址2)
6、
6、在进行数据库物理设计时,为提高查询效率,需要在基本表的一些列上建立索引。有下列情况:
Ⅰ.查询语句的WHERE子句中引用率比较高的列
Ⅱ.经常参与连接操作的列
Ⅲ.经常在order by子句中出现的列
Ⅳ.经常使用LIKE操作符且字符串前后均带有%的列
上述情况中一般情况下适合建立索引的是( )
A.以上全部
B.仅Ⅰ和Ⅲ
C.仅Ⅱ、Ⅲ和Ⅳ
D.仅Ⅰ、Ⅱ和Ⅲ
答案:D