---
# System prepended metadata

title: SQL Server 組成
tags: [Sql]

---

###### tags: `Sql`

{%hackmd BJrTq20hE %}

# SQL Server 組成
1. 關聯式引擎
    * 指令解析 Parser
    * 執行計畫優化評估
2. 儲存引擎
    * 獲取資料方法評估
3. 記憶體緩衝區
    * 執行計畫快取 Plan Cache
    * 資料快取 Data Cache 
4. 檔案系統

## 運作方式

1. 使用者透過TCP/IP Port 連到指定的 SQL SERVER
2. **Parser** 會解析指令是否正確
3. 正確就會到 **Plan Cache** 查詢是否有現成的計畫快取可以使用並獲取資料。有錯誤就會拋錯到客戶端。
4. 如果沒有現成計畫快取，就會執行計畫優化評估來獲取資料
5. 如果資料已存在 **Data Cache** 會直接把資料回傳給客戶端。
6. 如果資料不存在 **Data Cache** 就會到**儲存引擎獲取資 料方法評估**，用最快的方式獲取資料，並到**檔案系統**，根據設定的index獲取資料，並把資料存到 **Data Cache**
7. **Data Cache** 再把資料回給客戶端

### 增加效能的方式
1. **省略執行計畫優化評估的過程**，這是一個較耗費資料的過程。記憶體內如果有現成的執行計畫，那就可以更快速取得資料。

2. 所有資料存取都會透過 **資料快取**，記憶體越大，效能越好。SQL Server本身就是記憶體耗能怪獸，如果有可以用的記憶體，他都會搶過來 :scream: :crocodile: 

## 備份
資料庫屬性 -> 資料庫設定設定 -> 資料庫預設位置
不要把檔案放在預設的C槽，當資料不正常變多，C槽爆炸，系統會出現錯誤或無法使用。

### 備份排程
通常是以每日或每周為一單位
以每周為例，星期日凌晨12點完整備份，一到六凌晨12點差異備份，每天隔6小時(6、12、18點)進行LOG備份



### 資料庫儲存快照 STORAGE SNAPSHOP BACKUP
比較有效率、適合大型資料庫，硬體有支援此功能。
做此備份之前，系統會凍結幾秒鐘，禁止交易(Freeze the I/O)並執行儲存快照(Snapshot)

Snapshop backup 的備份檔用來鏡像複寫(Mirror)、災難備援資料中心(Vault)

如果想要手動執行備份，記得要勾選 *只複製備份* ，才不會破壞自動備份的LNS鏈結資料

## 復原/還原 Restore/Recovery
> **在執行完 Restore 之後，資料庫一定要進行Recovery才可以上線使用**
> 
1. 確認資料檔MDG、交易記錄檔LDG是否存在
2. 選定需要的復原的檔案

以上面備份排成的時間為例:
如果想要還原到前一天的11點，就會需要前一天的完整備份，6點和12點的差異備份，最後再還原(Recovery)到指定時間點。

* 如果是要做簡單復原模式的資料庫就沒有辦法做特定時間點的復原

## 資料庫建置
初始大小 8 MB
自動成長 64MB 無上限




## 顯示所有資料庫
```sql=
--顯示所有資料庫
SELECT * FROM SYS.DATABASES

--檢查備份鏈結關係
RESTORE HEADERONLY FROM DISK ='C:\SQL_ADDRESS'

```