搜尋本站文章

2017-10-15

[SQL Server] WHERE search condition with date: Use a range of dates and don't use CONVERT/CAST or BETWEEN (2)


延續前一篇的討論
[SQL Server] WHERE search condition with date: Use a range of dates and don't use CONVERT/CAST or BETWEEN (1)


建議 使用 比較運算子 + 邏輯運算子

  1. 使用 比較運算子 + 邏輯運算子,符合 SARG,使用到索引
  2. 無須額外耗用 CONVERT/CAST 轉換資料類型
  3. 直觀的語法、語意,通用性高

WHERE TransactionDate >= '20140805' AND TransactionDate < '20140806'



為何不建議使用  BETWEEN ?

因為 BETWEEN 在處理 DATE/TIME 資料類型時,容易造成誤解,導致查詢結果不正確。

問題:以下  WHERE 搜尋條件 是找出什麼資料?

WHERE TransactionDate BETWEEN '20140805' AND '20140806'

答案會是?

  1. 20140805 當日的全部資料
  2. 20140805 ~ 20140806 兩日的全部資料
  3. 20140805 全日 加上 20140806 00:00:00:000 時間點的資料


用以下範例來討論

-- 01_檢視資料特性_Datetime



WHERE TransactionDate BETWEEN '20140805' AND '20140806'

卻是篩選出 20140805 當日 加上 20140806 00:00:00:000 時間點的資料
回傳:4 筆資料列,Cost:0.150749

-- 02_BETWEEN_僅回傳4_rows


預期

應該回傳 5 筆資料列,卻僅回傳 4 筆資料列,缺少 1 筆資料列:2014-08-06 07:00:00.000

以條件式 BETWEEN '20140805' AND '20140806' 為例
多半寫出這類的語句,應該要找的是包含這 兩天 的全部資料
預期應該回傳 5 筆資料列。

卻是

但實際上
BETWEEN '20140805 00:00:00.000' AND '20140806 00:00:00.000'

也就是:20140805 全日 加上 20140806 00:00:00:000 時間點的資料。並未包含 20140806 當日的全部資料。

解決方案

該如何有效解決問題呢?

  • 改用 比較運算子 + 邏輯運算子 來篩選出明確的日期時間範圍
    • 例如:>= (大於或等於),  <= (小於或等於), < (小於)。


WHERE TransactionDate >= '20140805' AND TransactionDate < '20140807'

-- 03_改用比較運算子_正確回傳5_rows





對照執行計畫

近一步觀察執行計畫,以 BETWEEN 比較運算子 +邏輯運算子 來對照,BETWEEN 是耗用更多的資源。

-- 10_對照兩者執行計畫


-- 11_BETWEEN_搜尋述詞


觀察

  • 搜尋述詞-起點
    • [tempdb].[dbo].[Transactions02].TransactionDate >= 純量運算子('2014-08-05 00:00:00.000')
  • 搜尋述詞-終點 
    • [tempdb].[dbo].[Transactions02].TransactionDate <= 純量運算子('2014-08-06 00:00:00.000')

留意

BETWEEN 的終點,卻是被解譯為:
<= 純量運算子('2014-08-06 00:00:00.000')

-- 12_BETWEEN_搜尋述詞_2


-- 13_BETWEEN_搜尋述詞_3



使用  比較運算子 + 邏輯運算子

如預期的結果正確回傳。
語意沒有被誤解。

-- 14_比較運算子_搜尋述詞



-- 15_比較運算子_搜尋述詞_2


-- 16_比較運算子_搜尋述詞_3




範例程式碼

20171014_WHERE_DATE_Compare_Operator
https://drive.google.com/drive/folders/0B9PQZW3M2F40MDNoMGF4Wml6M00?usp=sharing



參考資料

[SQL Server] WHERE search condition with date: Use a range of dates and don't use CONVERT/CAST or BETWEEN (1)
http://sharedderrick.blogspot.tw/2017/10/sql-server-where-search-condition-with.html

What do BETWEEN and the devil have in common?
http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx

It's Time for Time
http://www.kimballgroup.com/1997/07/its-time-for-time/








2017-10-14

[SQL Server] WHERE search condition with date: Use a range of dates and don't use CONVERT/CAST or BETWEEN (1)

在使用 WHERE 搜尋條件 去篩選 日期時間 資料型態,建議:

  1. 使用 比較運算子(Comparison Operators) 來篩選出明確的日期時間範圍
    • 例如:>= (大於或等於),  <= (小於或等於), < (小於)。
  2. 避免使用 CONVERT/CAST 或 BETWEEN。

目的是:
  1. 符合 搜尋引數(Search Arguments, SARGs) ,效能優化。
  2. 資料正確性,沒有因 不正確的假設導致不正確的結果。

建議用法:
  • 當 WHERE 搜尋條件 去篩選 日期時間 資料型態時
  • 使用 比較運算(Comparison Operators) 來篩選出明確的日期時間範圍
    • 例如:>= (大於或等於),  <= (小於或等於), < (小於)。
-- 使用 比較運算子(Comparison Operators) 來篩選出明確的日期時間範圍
-- 例如:>= (大於或等於),  <= (小於或等於), < (小於)
-- 需求:篩選 20140805 當日的資料,回傳 3 rows
SELECT TransactionID, ProductID, Quantity, TransactionDate 
FROM dbo.Transactions02
WHERE TransactionDate >= '20140805' AND TransactionDate<'20140806'

使用 比較運算子,符合 SARG,使用到索引
無須額外耗用 CONVERT/CAST 轉型

WHERE TransactionDate >= '20140805' AND TransactionDate '20140806'


對照 Subtree Cost(子樹成本)

語法 Subtree Cost(子樹成本)
使用 比較運算子,符合 SARG,使用到索引 0.104689
額外使用 CONVERT/CAST 0.722386

可以看到明顯相差達 7 倍。



資料表 Transactions01 的 TransactionDate 沒有索引

--01. 檢視資料特性_Datetime

TransactionDate 資料行的資料類型是:Datetime


若需求是 篩選出 20140805 當日 的交易資訊,預期應該有 3 筆資料列符合回傳。

但是 WHERE 條件式寫成:WHERE TransactionDate = '20140805',省略了時間值,這是篩選出 2014-08-05 00:00:00:000 時間點的資料值。
因此,僅回傳 1 筆資料列。

-- 02_只用等號_卻是僅回傳 1 row



額外 再去使用 CONVERT 或 CAST 將 DateTime 資料轉型為 字串資料類型後做比對:
  1. 是可以正確搜尋到 3 筆資料列。
  2. 但這是 違反符合 SARGs,導致 無法使用到索引。
  3. SQL Server Query Engine 也因為此資料類型的轉換,進而影響到 查詢計劃選擇中的 "CardinalityEstimate" 或 "SeekPlan"。
WHERE CONVERT(varchar(30),TransactionDate, 112) = '20140805'

-- 03_CONVERT 轉換 DateTime 資料型別 為 字串


觀察 Execution Plan,可以看到特別顯示 驚嘆號!

-- 04_Execution_Plan_issue


執行計畫內的警告訊息:
警告:

  • 運算式 (CONVERT(varchar(30),[tempdb].[dbo].[Transactions01].[TransactionDate],112)) 中的類型轉換可能會影響到查詢計劃選擇中的 "CardinalityEstimate", 
  • 運算式 (CONVERT(varchar(30),[tempdb].[dbo].[Transactions01].[TransactionDate],112)=[@1]) 中的類型轉換可能會影響到查詢計劃選擇中的 "SeekPlan"


-- 05_Execution_Plan_issue


-- 06_Execution_Plan_issue


使用 SentryOne Plan Explorer,亦可觀察到 Warnings 訊息。

-- 07_Execution_Plan_issue



建議用法

  • 使用 比較運算(Comparison Operators) 來篩選出明確的日期時間範圍
  • 例如:>= (大於或等於),  <= (小於或等於), < (小於)
WHERE TransactionDate >= '20140805' AND TransactionDate '20140806'

-- 08_沒有警告訊息的Exection_Plan


-- 09_沒有警告訊息的Exection_Plan





使用「搜尋引數(Search Argument,SARG)」

資料表 Transactions02 的 TransactionDate 索引

-- 10_資料表 Transactions02 的 TransactionDate 有索引


不符合 SARG 規範,導致無法使用索引。
WHERE CONVERT(varchar(30),TransactionDate, 112) = '20140805'

-- 11_Non SARG 01


-- 12_Non SARG 01_Execution_Plan


不符合 SARG 規範,導致無法使用索引
WHERE DATEPART(yyyy,TransactionDate)=2014 AND DATEPART(mm,TransactionDate)=8 AND DATEPART(dd,TransactionDate) = 5

-- 13_Non SARG 02


-- 14_Non SARG 02_Execution_Plan


建議語法:符合 SARG,可以使用到索引

WHERE TransactionDate >= '20140805' AND TransactionDate '20140806'

-- 015_SARG_Index


-- 016_SARG_Index_Execution_Plan




範例程式碼

20171014_WHERE_DATE_Compare_Operator
https://drive.google.com/drive/folders/0B9PQZW3M2F40MDNoMGF4Wml6M00?usp=sharing



參考資料

What do BETWEEN and the devil have in common?
http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx

It's Time for Time
http://www.kimballgroup.com/1997/07/its-time-for-time/

INF: Search Arguments That Determine Distribution Page Usage
http://support.microsoft.com/kb/169642/en-us

SQL Server 2005 Compact Edition Books Online
Query Performance Tuning (SQL Server Compact Edition)
http://msdn.microsoft.com/en-us/library/ms172984.aspx

Comparison Operators (Transact-SQL)
https://technet.microsoft.com/EN-US/library/ms188074(v=sql.105).aspx

SentryOne Plan Explorer | SQL Query Optimization
https://www.sentryone.com/plan-explorer

[SQL Server] WHERE search condition with date: Use a range of dates and don't use CONVERT/CAST or BETWEEN (2)
http://sharedderrick.blogspot.tw/2017/10/sql-server-where-search-condition-with_15.html



2017-10-12

SQL Server Version List, Service Pack, Cumulative Updates - 版本清單, 累積更新 - updated to SQL Server 2017

更新日期:2017/10/12

若要執行 安裝、更新 SQL Server Service Pack(SP)、累積更新(CU, Cumulative Updates)  等任務。

將會需要 SQL Server 版本的清單、最新的 Service Pack(SP)、最新的 累積更新(CU) 等資訊。


Version Compatibility Level Oldest Supported Level Last Version Last Build
SQL Server 2017 140 100 RTM 14.0.1000.169
SQL Server 2016 130 100 SP1 13.0.4001.0
SQL Server 2014 120 100 SP2
12.0.5000.0
SQL Server 2012 110 90 SP4 11.0.7001.0
SQL Server 2008 R2 100 80 SP3
10.50.6000.34
SQL Server 2008 100 80 SP4 10.0.6000.29
SQL Server 2005 90 70 SP4 9.0.5000
SQL Server 2000 80 70 SP4 8.0.2039

注意事項
  • SQL Server 2012 支援 相容性層級(Compatibility Level) 為 80,也就是不支援 SQL Server 2000 的資料庫相容性層級。
    • 例如:支援 Outer-Join Operators(*=、=*) 的 非 ANSI 語法。
  • SQL Server 2008 R2,最新的 Service Pack(SP) 是 SP310.50.6000.34。



請參考以下網站:

Blog: Microsoft SQL Server Version List 

提供:版本清單、最新的 Service Packs(SP)、最新的 累積更新(CU, Cumulative Updates)、下載的網址 等。

-- 01_SQL Server 版本清單


-- 02_最新的 Service Packs(SP)、最新的 累積更新(CU, Cumulative Updates)





Microsoft: 如何判斷 SQL Server 及其元件的版本、版次及更新層級


-- 03_如何判斷 SQL Server 及其元件的版本、版次及更新層級


 -- 04_每個 SQL Server 版本可用的最新更新







參考資料

Microsoft SQL Server Version List
https://sqlserverbuilds.blogspot.tw/

如何判斷 SQL Server 及其元件的版本、版次及更新層級
https://support.microsoft.com/zh-tw/help/321185/how-to-determine-the-version--edition-and-update-level-of-sql-server-a

SQL Server Version List, Compatibility Level, Oldest Supported Level - 版本清單, 相容性層級, 支援層級 - updated to SQL Server 2017
http://sharedderrick.blogspot.tw/2017/10/sql-server-version-list-compatibility.html

SQL Server Version List, Compatibility Level, Oldest Supported Level - 版本清單, 相容性層級, 支援層級 - updated to SQL Server 2017



更新日期:2017/10/12

Version Compatibility Level Oldest Supported Level Last Version Last Build
SQL Server 2017 140 100 RTM 14.0.1000.169
SQL Server 2016 130 100 SP1 13.0.4001.0
SQL Server 2014 120 100 SP2
12.0.5000.0
SQL Server 2012 110 90 SP4 11.0.7001.0
SQL Server 2008 R2 100 80 SP3
10.50.6000.34
SQL Server 2008 100 80 SP4 10.0.6000.29
SQL Server 2005 90 70 SP4 9.0.5000
SQL Server 2000 80 70 SP4 8.0.2039

注意事項
  • SQL Server 2012 支援 相容性層級(Compatibility Level) 為 80,也就是不支援 SQL Server 2000 的資料庫相容性層級。
    • 例如:支援 Outer-Join Operators(*=、=*) 的 非 ANSI 語法。
  • SQL Server 2008 R2,最新的 Service Pack(SP) 是 SP310.50.6000.34。




參考資料

Microsoft SQL Server Version List
https://sqlserverbuilds.blogspot.tw/

如何判斷 SQL Server 及其元件的版本、版次及更新層級
https://support.microsoft.com/zh-tw/help/321185/how-to-determine-the-version--edition-and-update-level-of-sql-server-a

2017-10-08

Install SQL Server 2017 Data Tools (SSDT) for Visual Studio 2015

SQL Server Data Tools 是一款免費下載的新式開發工具,可用來建置 SQL Server 關聯式資料庫、Azure SQL Database、Integration Services 封裝、Analysis Services 資料模型以及 Reporting Services 報表。
有了 SSDT,您便可設計和部署任何 SQL Server 內容類型,就像在 Visual Studio 中開發應用程式一樣容易。

目前(2017/08/30) 已經推出:

  • 適用於 Visual Studio 2015 的 SSDT
  • 適用於 Visual Studio 2017 (15.3.0 預覽) 的 SSDT 預覽版本,已提供英文版本。


-- 準備 安裝 SQL Server Data Tools


-- 下載 ISO 映像 - 適用於 VS 2015 的 SSDT


-- 安裝 SSDT


-- 已安裝 SQL Server Data Tools 2015



-- 已安裝的 商業智慧 專案





在沒有預先安裝 Visual Studio 的情況下安裝 SSDT

若您的電腦上未安裝 Visual Studio,安裝適用於 Visual Studio 的 SSDT 將會安裝 Visual Studio 的最低版本。
這個 Visual Studio 版本可在您想要的任意數目電腦上免費安裝及使用。 其提供您所有 SQL Server 專案類型,加上 SQL Server 物件總管及其他 SQL 工具體驗。

若您已安裝 Visual Studio 2015 (或更新版本),安裝 SSDT 會將一組完整的 SQL Server 工具新增到您現有的 Visual Studio 安裝中。
Visual Studio 包括許多您可能會想用的功能,例如 原始程式碼控制整合及非 SQL 語言支援。 建議您使用 Visual Studio 2015 或更新版本,以在開發 T-SQL 時取得最佳體驗。






安裝抓圖

Install SQL Server 2017 Data Tools (SSDT) for Visual Studio 2015
https://photos.app.goo.gl/Mt6hB6CkElbNT4KJ2



參考資料

Install SQL Server 2017 on Windows Server 2016
http://sharedderrick.blogspot.tw/2017/10/install-sql-server-2017-on-windows.html

Install SQL Server 2017 Reporting Services (SSRS)
http://sharedderrick.blogspot.tw/2017/10/install-sql-server-2017-reporting.html

下載 SQL Server Data Tools (SSDT)
https://docs.microsoft.com/zh-tw/sql/ssdt/download-sql-server-data-tools-ssdt

Install SQL Server 2017 Reporting Services (SSRS)


SQL Server Reporting Services 是能提供完整報表功能的伺服器報表平台。

自 CTP 2.1 起,無法再透過 SQL Server 安裝程式安裝 SSRS,SQL Server 2017 Reporting Services (SSRS) 改為移至 Microsoft 下載中心來下載安裝

下載 SQL Server 2017 Reporting Services


Version
14.0.600.451
File Name SQLServerReportingServices.exe
Date Published
9/30/2017
File Size
92.7 MB


-- 下載 SQL Server 2017 Reporting Services (SSRS)


-- 安裝 SQL Server 2017 Reporting Services (SSRS)


-- 已安裝 SSRS 報表伺服器






安裝抓圖

Install SQL Server 2017 Reporting Services (SSRS)
https://photos.app.goo.gl/EQHaRAfXwFcsOA6I3





參考資料

Install SQL Server 2017 on Windows Server 2016
http://sharedderrick.blogspot.tw/2017/10/install-sql-server-2017-on-windows.html

下載 SQL Server 2017
https://www.microsoft.com/zh-tw/sql-server/sql-server-downloads

下載 SQL Server 2017 Reporting Services
https://www.microsoft.com/zh-tw/download/details.aspx?id=55252

SQL Server 2017 Reporting Services now generally available
https://blogs.msdn.microsoft.com/sqlrsteamblog/2017/10/02/sql-server-2017-reporting-services-now-generally-available/

2017-10-07

Install SQL Server 2017 on Windows Server 2016

版本資訊:
SQL Server 2017 RTM - 14.0.1000.169 (X64)

Build Information
Note
SQL Server Version
SQL Server 2017
Product Version
14.0.1000.169
Product Level
RTM
Product Edition
Enterprise Edition (64-bit)
Database Internal Version
869


SQL Server 2017 的圖型介面工具:SSMS、SSDT,需要額外下載安裝。

SSMS(SQL Server Management Studio)

免費下載的圖形工具,可以加以利用來存取、設定、管理及開發 SQL Server 的所有元件。
SSMS 利用許多豐富的指令碼編輯器來合併一群非常廣泛的圖形工具,使所有技術層級的開發人員及管理員都能夠存取。

SSMS 17.2, Performance Dashboard built-in, 中文版本

SSDT(SQL Server 2017 Data Tools)

Install SQL Server 2017 Data Tools (SSDT) for Visual Studio 2015

SSRS(SQL Server 2017 Reporting Services)

Install SQL Server 2017 Reporting Services (SSRS)



版本資訊

-- 001_SQL Server 2017 + Windows Server 2016

-- 002_SQL Server 2017

-- 003_資料庫相容性層級:140

 -- 004_檢視伺服器屬性




Query version, edition and update level 

V1: Query SQL Server system and build information


-- V1_SQL Server system and build information
/*
Applies to: SQL Server 2012:
 SERVERPROPERTY('ProductUpdateLevel') 'ProductUpdateLevel', 
 SERVERPROPERTY('ProductBuildType') 'ProductBuildType', 
 SERVERPROPERTY('ProductUpdateReference') 'ProductUpdateReference', 
*/
SELECT @@SERVERNAME 'InstanceName',
 CASE
      WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '8%' THEN 'SQL Server 2000'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '9%' THEN 'SQL Server 2005'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '10.0%' THEN 'SQL Server 2008'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '10.5%' THEN 'SQL Server 2008 R2'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '11%' THEN 'SQL Server 2012'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '12%' THEN 'SQL Server 2014'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '13%' THEN 'SQL Server 2016'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '14%' THEN 'SQL Server 2017'
   ELSE 'unknown'
 END AS 'SQLServerVersion ', 
  CASE
     WHEN SERVERPROPERTY('IsClustered') = 1 AND SERVERPROPERTY('IsHadrEnabled') = 1 THEN 'Failover Cluster + Availability Groups'
  WHEN SERVERPROPERTY('IsClustered') = 1 THEN 'Failover Cluster'
  WHEN SERVERPROPERTY('IsHadrEnabled') =1 THEN 'Availability Groups'
  ELSE 'unknown'
  END AS 'High-Availability',
 SERVERPROPERTY('ProductVersion') 'ProductVersion',
 SERVERPROPERTY('ProductLevel') 'ProductLevel',
 SERVERPROPERTY('Edition') 'ProductEdition',
 SERVERPROPERTY('ProductUpdateLevel') 'ProductUpdateLevel', 
 SERVERPROPERTY('ProductBuildType') 'ProductBuildType', 
 SERVERPROPERTY('ProductUpdateReference') 'ProductUpdateReference', 
 DATABASEPROPERTYEX('master','Version') 'DatabaseInternalVersion'
GO




V2: Query SQL Server system and build information

適用於 SQL Server 2017
加上 作業系統平台
使用 SQL Server 2017 新增加的 sys.dm_os_host_info


-- V2_SQL Server system and build information
-- Applies to: SQL Server 2017
 
SELECT @@SERVERNAME 'InstanceName',
 CASE
      WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '8%' THEN 'SQL Server 2000'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '9%' THEN 'SQL Server 2005'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '10.0%' THEN 'SQL Server 2008'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '10.5%' THEN 'SQL Server 2008 R2'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '11%' THEN 'SQL Server 2012'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '12%' THEN 'SQL Server 2014'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '13%' THEN 'SQL Server 2016'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '14%' THEN 'SQL Server 2017'
   ELSE 'unknown'
 END AS 'SQLServerVersion ', 
  CASE
     WHEN SERVERPROPERTY('IsClustered') = 1 AND SERVERPROPERTY('IsHadrEnabled') = 1 THEN 'Failover Cluster + Availability Groups'
  WHEN SERVERPROPERTY('IsClustered') = 1 THEN 'Failover Cluster'
  WHEN SERVERPROPERTY('IsHadrEnabled') =1 THEN 'Availability Groups'
  ELSE 'unknown'
  END AS 'High-Availability',
   host_distribution 'HostDistribution', host_release 'HostRelease',
 SERVERPROPERTY('ProductVersion') 'ProductVersion',
 SERVERPROPERTY('ProductLevel') 'ProductLevel',
 SERVERPROPERTY('Edition') 'ProductEdition',
 SERVERPROPERTY('ProductUpdateLevel') 'ProductUpdateLevel', 
 SERVERPROPERTY('ProductBuildType') 'ProductBuildType', 
 SERVERPROPERTY('ProductUpdateReference') 'ProductUpdateReference', 
 DATABASEPROPERTYEX('master','Version') 'DatabaseInternalVersion'
FROM sys.dm_os_host_info 
GO



安裝抓圖

Install SQL Server 2017 on Windows Server 2016
https://photos.app.goo.gl/5MnOMWLa5iinOjRJ2




下載 SQL Server 2017

SQL Server 2017 下載
https://www.microsoft.com/zh-tw/sql-server/sql-server-downloads






參考資料

SQL Server 2017 下載
https://www.microsoft.com/zh-tw/sql-server/sql-server-downloads

安裝 SQL Server 2017 RC2 on Windows Platform
http://sharedderrick.blogspot.tw/2017/08/sql-server-2017-rc2-on-windows-platform.html

SSMS 17.2, Performance Dashboard built-in, 中文版本
http://sharedderrick.blogspot.tw/2017/08/sql-server-ssms-172-performance.html

[SQL Server] Query version, edition and update level - 版本、版次、編號
http://sharedderrick.blogspot.tw/2017/08/sql-server-query-version-edition-and.html

Install SQL Server 2017 Data Tools (SSDT) for Visual Studio 2015
http://sharedderrick.blogspot.tw/2017/10/install-sql-server-2017-data-tools-ssdt.html

Install SQL Server 2017 Reporting Services (SSRS)
http://sharedderrick.blogspot.tw/2017/10/install-sql-server-2017-reporting.html

2017-09-30

[SQL Server] Telnet : check connectivity to SQL Server


使用 Telnet 檢查 用戶端 與 SQL Server 的網路連線

若接收到訊息:

C:\Windows\system32>telnet 192.168.1.17 1433
正連線到 192.168.1.17...無法開啟到主機的連線, 在連接埠 1433: 連線失敗


若因故無法連線,可以檢查以下設定:

  1. SQL Server Configuration Manager:確認 SQL Server 有設定為使用 TCP/IP 通訊埠 1433。
  2. 防火牆(Windows Firewall):是否有正確開啟通訊埠。
  3. 存取控制清單(ACL, Access Control List):檢查網路環境的 存取控制清單(ACL, Access Control List)之設定,例如:Azure 的 端點存取控制清單(endpoint access control list) 

等設定。



使用 Telnet 檢查 SQL Server 的網路連線

在命令提示字元中,輸入:


telnet 192.168.0.1 1433

參數說明

  • 192.168.0.1:此為 SQL Server 的 IP 位址
  • 1433:SQL Server 預設的 TCP/IP 接聽埠。


-- 100_telnet_嘗試連線到 SQL Server



-- 101_telnet_連線到 SQL Server 失敗



-- 102_telnet_連線 SQL Server 成功



若要離開,可以按'CTRL+]'

-- 103_離開_telnet





安裝 Telnet 用戶端程式

  • 「封裝管理員」 :  
    • 「Package Manager」:  pkgmgr /iu:"TelnetClient"
  • 「伺服器管理員」: 「Telnet 用戶端」
    • 「Server Manager」: 「Telnet Client 」






參考資料

Install Telnet Client: 安裝 Telnet用戶端程式
http://sharedderrick.blogspot.tw/2017/09/install-telnet-client-telnet.html

Configure a Server to Listen on a Specific TCP Port
https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-a-server-to-listen-on-a-specific-tcp-port

連接性疑難排解
https://docs.microsoft.com/zh-tw/sql/connect/jdbc/troubleshooting-connectivity

什麼是端點存取控制清單?
https://docs.microsoft.com/zh-tw/azure/virtual-network/virtual-networks-acl

Security Considerations for SQL Server in Azure Virtual Machines
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/sql/virtual-machines-windows-sql-security 

2017-09-29

Install Telnet Client: 安裝 Telnet用戶端程式


預設是沒有安裝 Telnet 用戶端程式,可以使用以下方式來安裝:


  • 「伺服器管理員」: 「Telnet 用戶端」
    • 「Server Manager」: 「Telnet Client 」
  • 「封裝管理員」 :  
    • 「Package Manager」:  pkgmgr /iu:"TelnetClient"





(1)「封裝管理員」 :  pkgmgr /iu:"TelnetClient"

100_開啟命令列視窗_尚未安裝



輸入執行以下命令來安裝 Telnet Client

pkgmgr /iu:"TelnetClient"


101_pkgmgr 安裝 Telnet Client



102_使用 telnet



103_使用 telnet



104_離開 Telnet: 使用 quit





(2) 「伺服器管理員」: 「Telnet 用戶端」

105_「伺服器管理員」_「Telnet 用戶端」





參考資料

安裝 telnet 用戶端,以Windows Server 2012 R2為例
http://sharedderrick.blogspot.tw/2015/04/telnet-windows-server-2012-r2.html

安裝 telnet 用戶端,使用「封裝管理員(Pkgmgr.exe)」
http://sharedderrick.blogspot.tw/2015/04/telnet-pkgmgrexe.html

使用 telnet 測試 Web Server,以 IIS漏洞-漏洞編號CVE-2015-1635 為例
http://sharedderrick.blogspot.tw/2015/04/telnet-web-server-iis-cve-2015-1635.html