搜尋本站文章

2008-05-31

SQL Server與使用防火牆(1) -- SQL Server & Firewall



壞人別來!在資料庫內存放了企業營運所需要的資料,這些資料皆是惡意人士所想要窺探的機密。

一般而言,要防護資料,避免被侵入的第一步是:設定存取資料庫的連線密碼。

但是在實務上,卻面臨到幾個棘手的問題難以處理,例如:有些資料庫程式是根本尚未設定密碼;密碼太過於簡單;密碼是很多人都知道的;密碼是寫死在應用程式的連線字串內,造成不容易修改等等問題。

換句話說,單獨僅使用密碼來保護資料庫系統,卻會因為密碼設計的太簡陋,密碼無法定期修改、密碼遭人竊取等等問題,讓密碼機制所提供的保護效果大打折扣。

在此建議您,請將密碼機制與防火牆系統整合搭配,進行保護資料庫系統。
...

完整文章免費下載:
第76期之一《SQL Server與使用防火牆(1)》

http://www.dbworld.com.tw/

2008-05-27

查詢目前資料庫內,每一個資料表的磁碟空間使用資訊 -- Displaying disk space information about eyvery table



雖然我們可以使用 sp_spaceused 來顯示指定資料表及其索引的磁碟空間資訊。但是僅能對單一資料表來執行。
筆者這邊利用[動態管理檢視]來查詢目前資料庫內,每一個資料表的使用空間資訊,請參考以下的範例:

--查詢目前資料庫內,每一個資料表的使用空間資訊
SELECT a3.name AS N'結構描述',  a2.name AS N'資料表',  a1.rows AS N'資料列筆數',  (a1.reserved + ISNULL(a4.reserved,0))* 8.0/1024 AS N'配置的空間總量(MB)',  a1.data * 8.0/1024 AS '資料(MB)',  
(CASE WHEN (a1.used + ISNULL(a4.used,0)) > a1.data THEN (a1.used + ISNULL(a4.used,0)) - a1.data ELSE 0 END) * 8.0/1024 AS N'索引(MB)',  
(CASE WHEN (a1.reserved + ISNULL(a4.reserved,0)) > a1.used THEN (a1.reserved + ISNULL(a4.reserved,0)) - a1.used ELSE 0 END) * 8.0/1024 AS N'尚未使用(MB)'  
FROM  (SELECT   ps.object_id, SUM ( CASE  WHEN (ps.index_id < 2) THEN row_count  ELSE 0 END  ) AS [rows],  
SUM (ps.reserved_page_count) AS reserved, SUM (  CASE WHEN (ps.index_id < 2) THEN (ps.in_row_data_page_count + ps.lob_used_page_count + ps.row_overflow_used_page_count)  
ELSE (ps.lob_used_page_count + ps.row_overflow_used_page_count)  END ) AS data,  
SUM (ps.used_page_count) AS used  
FROM sys.dm_db_partition_stats ps  
GROUP BY ps.object_id) AS a1 LEFT OUTER JOIN
(SELECT it.parent_id,  SUM(ps.reserved_page_count) AS reserved,  SUM(ps.used_page_count) AS used  
FROM sys.dm_db_partition_stats ps  INNER JOIN sys.internal_tables it ON (it.object_id = ps.object_id)  
WHERE it.internal_type IN (202,204)  
GROUP BY it.parent_id) AS a4 ON (a4.parent_id = a1.object_id)  
INNER JOIN sys.all_objects a2  ON ( a1.object_id = a2.object_id )   
INNER JOIN sys.schemas a3 ON (a2.schema_id = a3.schema_id)  
WHERE a2.type <> N'S' and a2.type <> N'IT'  
ORDER BY a3.name, a2.name


請參考下圖所示:

2008-05-12

檢視資料庫,其硬碟使用空間與資料實際使用空間;Displays the disk space reserved and used by the whole database


檢視資料庫,其硬碟使用空間與資料實際使用空間

先前使用 undocumented command:DBCC showfilestats 與 'DBCC SQLPERF(LOGSPACE) 等方式,取得資料庫的硬碟使用空間與資料實際使用空間之資訊。
筆者這邊再提供一個方式,利用目錄檢視:sys.database_files,也可以取得相關的磁碟空間的使用資訊。

這範例是包含:資料檔案與交易記錄檔案的空間使用資訊。

USE [目標資料庫]
GO
SELECT name N'邏輯名稱' , size/128.0 N'使用的磁碟空間(MB)' ,
CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 N'資料實際上使用的空間(MB)'
,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 N'剩餘的可用空間(MB)'
FROM sys.database_files;


請參考下圖所示:


參考資料:
檢視全部的資料庫,其交易記錄檔案所使用的空間資訊; Transaction log space usage statistics for all databases
http://sharedderrick.blogspot.com/2008/01/transaction-log-space-usage-statistics.html

顯示資料庫所使用的磁碟空間、資料實際所使用的空間; Displays the disk space reserved and used by the whole database
http://sharedderrick.blogspot.com/2008/01/displays-disk-space-reserved-and-used.html

顯示每一個資料庫的所使用的磁碟空間之完整版本; Displays the disk space reserved and used by the each database
http://sharedderrick.blogspot.com/2008/01/displays-disk-space-reserved-and-used_02.html

2008-05-11

SSIS 上手03:初探控制流程(下)


SSIS 上手03:初探控制流程(下)

前言
在設計資料轉換程式時,若資料來源是存放在資料夾內的數個檔案時,那我們該如何擷取資料夾內的每一個檔案,當作資料來源進行後續的資料轉換程式設計呢?在本文中,我們將討論[容器]物件,在[容器]物件內的[Foreach 迴圈容器],讓您可以輕鬆列舉每一個檔案作為資料來源,以利後續的程式處理。

認識容器
[容器]是 SSIS 2005 新增加的物件,利用[容器]可以組織封裝內的[工作],並且可以提供適當的服務給在[容器]內的[工作]。

可以將[容器]應用在需要重複執行的[控制流程]上,也可以利用[容器],群組各個[工作]為數個單位,而且因應實務繁複的需求上,[容器]還可以在包含其他[容器]。

在 SSIS 上,目前有提供 4 種容器類型可供您選用:[Foreach 迴圈]容器、[For 迴圈]容器、[時序]容器、[工作主機]容器。

我們可以將容器應用在以下的方面:

  • 群組啟用或停用:位於[容器]內的[工作],可以依實際需求,在執行階段,設定指定的群組停用而不執行。
  • 處理集合物件內的每個元素。舉例來說:在資料夾內的數個檔案,可以列舉每一個檔案;在 ADO 內的資料集(DataSet),可以列舉每一筆資料列等等功能。
  • 重複執行[工作],直到運算式評估的結果為 False。例如:我們可以設計讓指定的[工作],重複執行所需要的次數。
  • 管理交易:我們可以將所需要的數個[工作],群組到[容器]內,以[容器]為單位進行交易一致性的設計;若是[容器]內的工作全部都執行成功,才算是[容器]執行成功,否則就算是執行失敗。使用[容器]來管理交易,讓我們無須分別逐一設定各個[工作]的交易模式。
完整文章免費下載:
第75期之二《SSIS 上手03:初探控制流程(下)》
http://www.dbworld.com.tw/

2008-05-06

SSIS 2005 與 Access 2007 (*.accdb)


若是要使用 SSMS ,將資料匯入到 Access 2007時,請參考以下方式:

SQL Server 匯入和匯出精靈的注意事項:
若要連接至使用 Microsoft Office Excel 2003 或更舊版本的資料來源,請針對 [資料來源],選取 [Microsoft Excel]。
若要連接至使用 Microsoft Office Excel 2007 的資料來源,請針對 [資料來源],選取 [Microsoft Office 12.0 Access 資料庫引擎 OLE DB 提供者]、按一下 [屬性],然後在 [資料連結屬性] 對話方塊的 [全部] 索引標籤中,針對 [擴充屬性],輸入 Excel 12.0。
若要連接至使用 Microsoft Office Access 2003 或更舊版本的資料庫,請針對 [資料來源],選取 [Microsoft Access]。
若要連接至使用 Microsoft Office Access 2007 的資料庫,請針對 [資料來源],選取 [Microsoft Office 12.0 Access 資料庫引擎 OLE DB 提供者]。
若要連接至使用 Excel 2007 或 Access 2007 的資料來源,您無法選取 [Microsoft Jet 4.0 OLE DB Provider]。

實做步驟如下:

1. 請事先建立好 Access 2007 的資料庫之檔案:*.accdb。
請參考下圖所示:



2. 執行 SSMS,在[物件總管],註冊指定的 SQL Server。
3. 展開[資料庫],點選[Northwind]資料庫,作為此次範例之用。
4. 滑鼠右鍵,選擇:[工作]\[匯出資料]。
5. 在[SQL Server 匯入和匯出精靈]視窗,點選[下一步]。


6. 在[選擇資料來源]視窗,填入以下的參數:
在[資料來源]方塊,下拉選擇:[SQL Native Client]。
在[伺服器名稱]方塊,輸入目標伺服器的名稱。
在[驗證]區域,點選:[使用 Windows 驗證]。
在[資料庫]方塊,選擇:Northwind。
請參考下圖所示:




點選[下一步]。

7. 在[選擇目的地]視窗,填入以下的參數:
在[目的地]方塊,選擇:Microsoft Office 12.0 Access Database Engine OLE DB Provider。
請參考下圖所示:


8. 再點選[屬性]按鈕。
9. 在[資料連結內容]視窗,填入以下的參數:
在[連線]頁籤,在[資料來源]方塊部分,輸入 Access 2007 的資料庫檔案的完整路徑,例如:C:\Database1.accdb。
請參考下圖所示:


10. 點選[測試連線],在[Microsoft 資料連結]視窗,點選[確定]。
11. 點選[下一步]。
12. 在[指定資料表複製或查詢]視窗,點選[從一或多個資料表或檢視複製資料]。
13. 點選[下一步]。
14. 在[選取來源資料表和檢視]視窗,點選指定要匯入到 Access 的資料表。例如:勾選資料表:Employee。

提示:
當您所選取的來源資料表,包含某些資料類型時,這邊可能會遇到問題,我們以資料表:Employee 為例:
此資料表有使用到資料類型:Datetime,但是驅動程式可能無法自動偵測對應,若是您點選[下一步],將會遇到以下的錯誤,請參考下圖所示:


要解決此問題的方法如下:
在[選取來源資料表和檢視]視窗,點選[編輯對應],在[對應]區域,可以看到資料行:BirthDate 與 HireDate 在[類型]區域是空白的,沒有自動對應到適當的資料類型,請參考下圖所示:



請您手動指定正確的資料類型,應該可以解決此問題,例如:自行選擇:DateTime 的資料類型。

15. 點選[下一步]。
16. 在[儲存並執行封裝]視窗,勾選[立即執行]。
17. 點選[下一步]。
18. 在[完成精靈]視窗,點選[完成]。
19. 在[正在執行作業]視窗,等待執行完成後,點選[關閉]。
20. 完成利用 SSIS 將資料匯入到 Access 2007(*.accdb)的作業。


以下補充有關於在 SSIS 上,與 Access 2007(*.accdb)、Excel 2007(*.xlsb) 連線的連接管理員之設定。
請參考下圖所示:
在SSIS上,設定與 Access 2007 的連接管理員


在SSIS上,設定Excel2007連接管理員01


在SSIS上,設定Excel2007連接管理員02


參考文件:
如何使用資料轉換服務 (DTS) 從 Microsoft Access 資料庫匯出資料至 SQL Server 資料庫
http://support.microsoft.com/kb/285829

2007 Office system 驅動程式:資料連線元件,AccessDatabaseEngine.exe
可供非 Microsoft Office 應用程式用來讀取 2007 Microsoft Office system 檔案中的資料。
概觀
這個下載將會安裝一組元件,可供非 Microsoft Office 應用程式用來讀取 2007 Office system 檔案中的資料,例如 Microsoft Office Access 2007 (mdb 和 accdb) 檔案以及 Microsoft Office Excel 2007 (xls、xlsx 和 xlsb) 檔案。也支援連線至 Microsoft Windows SharePoint Services 和文字檔案。
應用程式開發人員可安裝 ODBC 和 OLEDB 驅動程式,在開發連線至 Office 檔案格式的應用程式時使用。


注意事項:
如果您是使用 OLEDB 的應用程式開發人員,請將 ConnectionString 屬性的 Provider 引數設定為 "Microsoft.ACE.OLEDB.12.0"
如果您要連線到 Microsoft Office Excel 資料,請在 OLEDB 連接字串的延伸屬性中加上 "Excel 12.0"。
如果您是應用程式開發人員,並且要使用 ODBC 連線至 Microsoft Office Access 資料,請將連接字串設定為 "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=path to mdb/accdb file"
如果您是應用程式開發人員,並且要使用 ODBC 連線至 Microsoft Office Excel 資料,請將連接字串設定為 "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=path to xls/xlsx/xlsm/xlsb file"

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=7554f536-8c28-4598-9b72-ef94e038c891