Sql-Server

了解連接字元串語法

  • October 7, 2016

我正在關注如何以程式方式創建 SQL Server 數據庫,但發現解釋語法的資源有限,比MSDN: Filegroup Options更詳細。

以 MSDN 上的以下程式碼為例:

SqlConnection myConn = 
new SqlConnection ("Server=localhost;Integrated security=SSPI;database=master");

str = "CREATE DATABASE MyDatabase ON PRIMARY " +
   "(NAME = MyDatabase_Data, " +
   "FILENAME = 'C:\\MyDatabaseData.mdf', " +
   "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " +
   "LOG ON (NAME = MyDatabase_Log, " +
   "FILENAME = 'C:\\MyDatabaseLog.ldf', " +
   "SIZE = 1MB, " +
   "MAXSIZE = 5MB, " +
   "FILEGROWTH = 10%)"

問題:

  1. 回到 SQL Server 2012,我將在程式碼Server=localhost\SQLExpress中配置管理器將實例顯示為SQL Server (SQLExpress)。現在使用 SQL Server 2016,我不明白為什麼它只是Server=localhost,因為在配置管理器中有SQL Server (MSSQLServer),我認為語法應該是Server=localhost\MSSQLServer。它與客戶端協議有關嗎?(但協議沒有區分 SQL Server 的兩個版本。
  2. 數據庫名稱 (MyDatabase) 和 NAME (MyDatabase_Data) 有什麼區別?為什麼需要為已經有名稱的數據庫分配不同的名稱。目的是什麼?
  3. 文件如何在 FILEGROWTH 中增長?每個 SQL 查詢都會增長嗎?(例如,我現在可以在一個查詢中插入足夠大的超過 1MB(MAXSIZE 的 10%)的文本數據)或者,這是否意味著增長率(每秒 1MB)?
  1. localhost 可以接受的原因是因為它使用的是 SQL Server 的預設實例。預設實例(按名稱)是 MSSQLServer,但您不需要提供它。以前 express 是一個命名實例,它需要您傳遞實例名稱(或埠)才能連接。
  2. 數據庫名稱是 MyDatabase。MyDatabase_Data 的賦值是針對數據庫內的數據文件。在此範例中,指定並命名了數據和日誌文件。您可以隨意命名它們(儘管在數據庫中不能有重複的名稱)。如果您希望使用ALTER DATABASE語句,也可以在創建數據庫後重命名它們。
  3. 文件增長取決於寫入數據庫的數據。如果數據庫處於完全或批量日誌恢復狀態,日誌文件將繼續增長,除非您進行日誌備份。但是,如果在簡單恢復中,日誌將增長到支持發生的打開事務或防止 CDC 或複制失去數據所需的大小(如果日誌繼續增長,您可以使用 log_reuse_desc 列檢查原因sys.databases)。對於數據文件,當您插入數據時,它會隨著需要而增長。通常建議不要使用基於百分比的文件增長,因為這會導致意外的大文件增長,更不用說性能問題了。

對文件增長的進一步說明。如果您沒有啟用 IFI,那麼您將在寫入數據文件時出現 IO 停頓,從而導致其增長。只要文件變大並將其歸零以確保空間清晰,這些停頓就會持續(2016 年不使用零,但概念是相同的)。啟用 IFI(需要對服務帳戶執行卷維護任務權限,這可以在安裝時使用 SQL 2016 完成)然後數據文件可以立即增長並且不需要歸零。日誌文件沒有 IFI 選項(出於安全和數據安全原因),因此該文件的任何增長都將導致 IO 在完成時停止,從而影響性能。

create database 語句中的 MAXSIZE 設置將防止文件增長超過這些值。這意味著您不能儲存超過 10MB 的數據(包括系統數據),並且單個事務的大小不能超過 5MB。這兩個值都可以使用ALTER DATABASE語句進行調整。

相關說明,不一定是答案,但它可能對您的程式碼更清晰一些,.Net 有一個 SQLConnectionStringBuilder 類,在這裡可能會派上用場。您可能希望考慮將值傳遞給該對象並使用輸出連接字元串屬性,而不是將字元串連接在一起。 .Net SQL 連接字元串生成器

引用自:https://dba.stackexchange.com/questions/151744