日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server之体系结构

發布時間:2023/12/20 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server之体系结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL Server 體系結構

SQL Server 實例

SQL Server 實例是指安裝的一個 SQL Server 數據庫引擎/服務。在同一臺計算機上可以安裝 SQL Server 的多個實例。從安全性、實例管理的數據以及其它方面來說,每個實例是完全彼此獨立的。在邏輯層面,位于同一計算機上的兩個不同實例和位于兩臺不同計算機上的實例相差無幾。當然,它們會共享服務器的物力資源(如 CPU、內存、磁盤空間)。

可以將計算機上安裝的實例之一設置為默認實例,而其它實例則必須為命名實例。在安裝期間可以決定是將一個實例安裝為默認實例,還是命名實例:安裝好以后就不能對此進行修改了。如果一個客戶端應用程序要連接到默認實例,只需指明實例所在計算機的名稱或 IP 地址。要連接到一個命名實例,客戶端要指明計算機的名稱或 IP 地址,接著再寫一個反斜杠字符(“\”),后面指明實例名稱(在安裝期間提供的)。例如,假設在名為 Server1 的計算機上安裝了兩個 SQL Server 實例,其中一個安裝為默認實例,而另一個則安裝為命名實例 Inst1。要連接到默認實例,就只要指定服務器名稱 Server1;而要連接到命名實例,則要將其指定為 Server1\Inst1。

在同一臺計算機上安裝多個 SQL Server 的實例,可能會有各種原因,這里只列舉幾個。

一個例子是像我們普通的開發者,有時候要測試不同版本之間的區別,就可以很方便的在同一個筆記本上安裝多個版本的 SQL Server 實例。

另一個例子是數據庫供應商可能擁有非常強大的數據中心,能夠容納多個 SQL Server 的安裝實例,而不必維護多臺性能較低的計算機,在每臺這樣的機器上安裝不同的實例。

數據庫

可以將數據庫認為是各種對象的容器,這些對象可以是表(table)、視圖(view)、存儲過程(stored procedure)等等。每個 SQL Server 實例可以包含多個數據庫,如圖 1-1 所示。

圖 1-1 數據庫

當安裝 SQLServer 時,安裝程序會創建幾個系統數據庫,用于保存系統數據和服務與內部目的。安裝好之后,就可以創建自己的用戶數據庫,以保存應用程序數據。

安裝程序創建的系統數據庫包括 master、Resource、model、tempdb 以及 msdb。它們各自的作用分別描述如下:

  • master? ? master 數據庫保存 SQL Server 實例范圍內的元數據信息、服務器配置、示例中所有數據庫的信息,以及初始化信息。
  • Resource? ? Resource 數據庫是 SQL Server 2005 中增加的,用于保存所有系統對象。當查詢數據庫中的元數據信息時,這種信息表面上使位于數據庫中,但實際上是保存在 Resource 數據庫中。
  • model? ? model 數據庫是新數據庫的模板。每個新創建的數據庫最初都是 model 的一個副本(copy)。所以,如果想在所有新創建的數據庫中都包含特定的對象(比如數據類型),或者是在所有新創建的數據庫中都以特定的方式來配置某些數據庫屬性,就可以先把這些對象或配置屬性放在 model 數據庫中。注意:對 model 數據庫做出的修改不會影響現有的數據庫,只影響此后新創建的數據庫。
  • tempdb? ? tempdb 數據庫是 SQL Server 保存臨時數據的地方,這些臨時數據包括工作表(work table)、排序空間(sort space)、行版本控制(row versioning)信息等等。SQL Server 允許用戶自己創建臨時表,這些臨時表的物理保存位置就是 tempdb。注意,每次重啟 SQL Server 實例時,會刪除這個數據庫的內容,并將其重新創建為 model 的一個副本。因此,當需要為測試目的而創建一些對象,而且在測試完成后不想將這些對象繼續保存在數據庫中時,通常可以在 tempdb 中創建它們。即使忘記清除這些對象,在重新啟動后也會自動清除它們。
  • msdb? ? msdb 是稱為 SQL Server Agent 的一種服務保存其數據的地方。SQL Server Agent 負責自動化處理,包括記錄有關作業(job)、計劃(schedule)和警報等實體的信息。SQL Server Agent 也是負責復制(replication)的服務。msdb 還用于保存一些有關其它 SQL Server 功能的信息,例如 Database mail 和 Service Broker。

在 SQL Server 實例中可以創建需要的任意數量的用戶數據庫。用戶數據庫內可以保存應用程序需要的各種對象和數據。

可以在數據庫級上定義一個成為 collation(排序規則)的屬性,由它確定數據庫中字符數據使用的排序規則信息(包括支持的語言、區分大小寫和排序規則等)。如果在創建數據庫時不為其指定 collation 屬性,將使用實例默認的排序規則設置。

為了對數據庫運行 T-SQL 代碼,客戶端應用程序需連接到 SQL Server 實例,要位于相關數據庫的上下文(context)中,或者能夠使用相關數據庫。

在安全性方面,為了能夠連接到 SQL Server 實例,必須讓 DBA(數據庫管理員)為用戶創建一個登錄賬號。登錄賬號可以關聯到 Windows 憑據(credentials),在這種情況下,它會調用 Windows 憑據進行身份驗證。使用 Windows 驗證的登錄,當連接到 SQL Server 時就無需提供登錄用戶名和密碼信息,因為當登錄到 Windows 時已經提供了這些信息。登錄賬號可以關聯到 Windows 憑據(credentials),需要時,它會調用 Windows 憑據進行身份驗證。當使用 SQL Server 驗證登錄來連接 SQL Server 時,就必須提供登錄的用戶名和密碼。

DBA 要將你的登錄賬號映射到有權訪問的任何數據庫中的數據庫用戶(database user)。數據庫用戶是將被授權訪問數據庫對象的實體。

到目前為止,已經主要介紹了數據庫的邏輯層面。圖 1-2 演示了數據庫的物理布局圖。

圖 1-2 數據布局

數據庫在物理上由數據文件和事務日志文件組成。當創建數據庫時,能夠定義每個文件的各種屬性,包括文件名、保存位置,以及文件自動擴展的增量(autogrowth 屬性)。每個數據庫必須至少有一個數據文件和一個日志文件(SQL Server 的默認情況)。數據文件用于保存數據庫對象數據,日志文件則保存 SQL Server 為了維護事務而需要的信息。

雖然 SQL Server 可以同時寫多個數據文件,但某一時刻只能順序方式寫一個日志文件。因此與數據文件不同,使用多個日志文件并不能提升系統的性能。如果原來的日志文件所在的磁盤空間耗盡了,就可能要增加新的日志文件。

多個數據文件在邏輯上按照文件組(FileGroup)的形式進行分組管理。創建數據庫對象(例如表或索引)時,就會將其保存在目標文件組中。對象數據可能會保存在屬于目標文件組的多個文件中。通過文件組可以控制數據庫對象的物理存儲位置。數據庫必須至少要有一個主文件組(PRIMARY),而用戶定義的文件組則是可選的。PRIMARY 文件組包含主數據文件(擴展名為 .MDF),以及數據庫的系統目錄(catalog)。可以選擇性地為 PRIMARY 增加多個輔助數據文件(secondary data file),擴展名為 .NDF。用戶定義的文件組只能包含輔助數據文件。可以指定將哪個文件組作為默認文件組。當對象創建語句沒有明確指定目標文件組時,就將它創建在默認文件組中。

文件擴展名 .mdf、.ldf 和 .ndf
數據庫文件擴展名 .mdf 和 .ldf 的含義很明確。擴展名 .mdf 代表 Master Data File(主要數據文件,不要與 master 數據庫混淆),ldf 代表 Log Data File(日志數據文件)。當討論輔助數據文件的擴展名時,一種有趣的說法是,.ndf 代表 Not Master Data File(非主要數據文件),某位開發人員提出了這種開玩笑式的說法,業界也就這么接受了。

架構(Schema)和對象

前面曾經說過數據庫是一種對象的容器,這樣說只是為了簡單而已。如圖 1-3 所示,一個數據庫可以包含多個架構,而每個架構又包含多個對象。可以將架構看做是各種對象的容器,這些對象可以是表(table)、視圖(view)、存儲過程(stored procedure)等。

圖 1-3 數據庫、架構和數據庫對象

可以在架構級別上控制對象的訪問權限。例如,可以為一個用戶授予某個架構上的 SELECT 權限,讓這個用戶能夠查詢該架構中的所有對象的數據。所以,對于決定在架構中如何組織對象,安全性是應該考慮的因素之一。

此外,架構也是一個命名空間,用作對象名稱的前綴。例如,假設在架構 Sales 中有一個 Orders 表,架構限定(schema-qualified)的對象名稱是 Sales.Orders,也稱為兩部分對象名稱(two-part name)。如果在引用對象時省略架構名稱,SQL Server 將采用一定的辦法來分析出架構名稱是什么,例如,檢查對象是否在用戶的默認架構中,如果不在,再繼續檢查對象是否在 dbo 架構中。當在代碼中引用對象時,推薦總是使用這種由兩部分構成的對象名稱。有時,如果不顯式指定架構,那么在解析對象名稱時,就會要付出一些沒有意義的額外代價。既然這樣的額外代價是沒有意義的,為什么還要為它付出?而且,在不同的架構中可能存在名稱相同的多個對象,如果這時還不顯式指定架構,那么最終得到的對象可能并不是你原本想要的。

轉載于:https://www.cnblogs.com/zze46/p/10789336.html

總結

以上是生活随笔為你收集整理的SQL Server之体系结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。