熱門文章

2010年10月4日 星期一

Oracle 11g認證考試 OCA升級OCP方法

分享給想要考Oracle OCP 11g的同好們

獲得11g OCA認證考試方法:(需要兩科考試)

方法一:1z0-007 + 1z0-052

方法二:1z0-051 + 1z0-052

方法三:1z0-047 + 1z0-052



獲得11g OCP認證考試方法:(三科考試+ 一科原廠課程)

方法一:OCA(1z0-007 + 1z0-052) + 1z0-053 + 一科原廠課程

1z0-007 Introduction to Oracle9i: SQL

1z0-052 Oracle Database 11g: Administration I

1z0-053 Oracle Database 11g: Administration II


方法二:OCA(1z0-051 + 1z0-052) + 1z0-053 +一科原廠課程

1z0-051 Oracle Database 11g: SQL Fundamentals I

1z0-052 Oracle Database 11g: Administration I

1z0-053 Oracle Database 11g: Administration II


方法三:OCA(1z0-047 + 1z0-052) + 1z0-053 +一科原廠課程

1z0-047 Oracle Database SQL Expert

1z0-052 Oracle Database 11g: Administration I

1z0-053 Oracle Database 11g: Administration II





From
http://blog.itcert.org/archives/1743

2010年8月24日 星期二

超好用的畫流程圖軟體!

最近要畫流程圖、UML,總是用Visio畫

但覺得還是沒有很方便

發現到一款Diagram Designer,非常好用

下載位址:
http://logicnet.dk/DiagramDesigner/


我想會漸漸愛上它,真酷!

2010年8月11日 星期三

Microsoft Chart Controls for .NET 3.5

以下我整理出一些相關的連結供各位參考、下載:


Samples Environment for Microsoft Chart Controls
http://code.msdn.microsoft.com/mschart


MSDN Fourms - Chart Controls for .NET Framework
http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/threads/


Alex Gorev's Weblog - Microsoft Chart Control
http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx


New ASP.NET Charting Control:
http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx


Dundas Chart for ASP.NET - Online Document (微軟就是買下這家所出的Chart Control...所以線上文件也可以用來作參考)
http://support.dundas.com/OnlineDocumentation/WebChart2005/webframe.html


介紹好用元件:Microsoft Chart Controls for .NET 3.5 (保哥的blog中有詳細介紹需要下載安裝的說明)
http://blog.miniasp.com/post/2008/10/Useful-aspnet-and-winform-charting-control-from-Microsoft.aspx


瓶水相逢.Net - 繪圖的新利器 - Microsoft Chart Controls for .NET Framework 3.5
http://www.dotblogs.com.tw/chhuang/archive/2008/10/26/5776.aspx

jQuery Chart Plug-in-Highcharts

最近發現一個漂亮的jQuery報表Plug-in
http://www.highcharts.com/

沒想到到在client端也可以這樣做... 真是越來越強大了

2010年7月29日 星期四

MSSQL 修改欄位名稱和資料型態

若要更改某個table內的某一個欄位的型態

For example:
A1 varchar(10)  ---->  A1 varchar(20)
A2 tinyint   ----->   B2 int
第一個只改變欄位的長度或是型態
第二個改變名稱或是改變名稱與型態

解法如下:
以下說明,以 SQL Server 2008 為主:
關於第一個問題,可以使用 ALTER TABLE 陳述式:
CREATE TABLE 我的資料表 (欄位A varchar(10));
GO
ALTER TABLE 我的資料表 ALTER COLUMN 欄位A nvarchar(25) NOT NULL;
GO
ALTER TABLE 我的資料表 ALTER COLUMN 欄位A varchar(50) NULL;
GO

若僅是更改欄位名稱,請使用 sp_rename 這個預存程序,如下所示即是一例:
EXEC sp_rename '我的資料表.欄位A', '新欄位', 'COLUMN';
GO

若要更改欄位名稱與型態,就需要分成兩道指令來進行,比方說:先使用一道指令來更改欄位名稱,然後再使用第二道指令來更改欄位型態

For example:
EXEC sp_rename '我的資料表.欄位A', '新欄位', 'COLUMN';
ALTER TABLE 我的資料表 ALTER COLUMN 新欄位 nvarchar(50) NULL;
GO
刪除這個資料表:
DROP TABLE 我的資料表;
GO

2010年7月22日 星期四

MSSQL Cursor 範例


--定義一個cursor 來自指定資料表內容
DECLARE MY_CURSOR Cursor FOR
SELECT cy_closeRate,Currencycode From [Currency_rate]
WHERE cy_closeTime > DATEADD(Day,-2,getdate())
--開啟cursor
Open MY_CURSOR
--定義cursor裡要取出的物件
DECLARE @closeRate FLOAT, @cyID VARCHAR(50)

--進入cursor
Fetch NEXT FROM MY_CURSOR INTO @closeRate, @cyID
--當陳述式失敗,或資料列超出結果集時停止迴圈
While (@@FETCH_STATUS <> -1)
BEGIN
--偵錯或加入要應用的程式碼
--PRINT CONVERT(VARCHAR(100),@closeRate) +'--'+ @cyID
--再到下個指標去
FETCH NEXT FROM MY_CURSOR INTO @closeRate, @cyID
END
--關閉cursor
CLOSE MY_CURSOR
--釋放cursor
DEALLOCATE MY_CURSOR
GO

2010年7月18日 星期日

Using Parameters with an SQL IN Clause

在我前面的文章有提到 WHERE IN () 帶多值的問題,今天看到一篇國外的文章寫到,和大家一起分享

Using parameters can be a bit tricky with an IN clause though, e.g.

SELECT * FROM MyTable WHERE ID IN (3, 10, 17)


As an example, assume you have a ListBox containing possible field values. If the user can select zero, one or more of the items in the list to filter the results you could do this:


SqlConnection connection = new SqlConnection("connection string here");
SqlCommand command = new SqlCommand();
StringBuilder query = new StringBuilder("SELECT * FROM MyTable");

switch (this.listBox1.SelectedItems.Count)
{
case 0:
break;

case 1:
query.Append(" WHERE MyColumn = @MyColumn");
command.Parameters.AddWithValue("@MyColumn", this.listBox1.SelectedItem);
break;

default:
query.Append(" WHERE MyColumn IN (");
string paramName;

for (int index = 0; index < this.listBox1.SelectedItems.Count; index++) { paramName = "@MyColumn" + index.ToString(); if (index > 0)
{
query.Append(", ");
}

query.Append(paramName);
command.Parameters.AddWithValue(paramName, this.listBox1.SelectedItems[index]);
}
query.Append(")");
break;
}

command.CommandText = query.ToString();
command.Connection = connection;


上面是VB的語法,我下一篇會分享實作過的C#語法。

Primary Key 和 Unique Index

1.
Primary Key = Unique Index + Not null,
若只是 Unique Index 欄位, 則可以為 null.

2.
Table 之中, 最多只有一個 Primary Key, 但能擁有多個 Unique Index
NOT NULL = 設定該欄立不可含Null 值
UNIQUE = 設定一個或多個欄位組合,資料內容需唯一不可重覆
PRIMARY = KEY 設定資料表格不可重覆、空白或為Null的主鍵值
FOREIGN = KEY 設定該欄位值的存在必須關連並參照指定資料表格的欄位值

P.S. 基本概念的整理

MSSQL 清除 LOG 並縮減空間的語法

一般時候我們都用以下的語法進行清理

DUMP TRANSACTION {DBName} WITH NO_LOG


可是實體的檔案大小卻不會減少,一樣佔用那麼多的硬碟空間。

SET NOCOUNT ON DECLARE @LogicalFileName sysname, @MaxMinutes INT, @NewSize INT

USE {DBName ex HRMS} -- 要操作的資料庫名
SELECT
@LogicalFileName = '{Log file name ex HRMS_Log}', -- 日誌文件名
@MaxMinutes = 10, -- Limit on time allowed to wrap log. (M)
@NewSize = 1 -- 你想設定的日誌文件的大小(M)

-- Setup / initialize
DECLARE @OriginalSize int
SELECT @OriginalSize = size FROM sysfiles WHERE name = @LogicalFileName

SELECT 'Original Size of ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles WHERE name = @LogicalFileName

CREATE TABLE DummyTrans (DummyColumn char (8000) not null)

DECLARE @Counter INT, @StartTime DATETIME, @TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(), @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary.
WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- Outer loop.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000)) BEGIN -- update INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans SELECT @Counter = @Counter + 1 END EXEC (@TruncLog) END SELECT 'Final Size of ' + db_name() + ' LOG is ' + CONVERT(VARCHAR(30),size) + ' 8K pages or ' + CONVERT(VARCHAR(30),(size*8/1024)) + 'MB' FROM sysfiles WHERE name = @LogicalFileName DROP TABLE DummyTrans SET NOCOUNT OFF


更簡潔的寫法

USE [@DBName]
BACKUP LOG [@DBName] WITH TRUNCATE_ONLY
DBCC SHRINKFILE (@LogicalFileName, @NewSize)

MSSQL T-SQL迴圈寫法


DECLARE @_i INT
DECLARE @_MAX INT
SET @_i = 0
SET @_MAX = 10 -- 要產生幾筆資料
WHILE (@_i<@_MAX) BEGIN --要迴圈的語法 INSERT INTO #TT VALUES('T') --加1 Set @_i=@_i+1 END

2010年7月17日 星期六

MSSQL 檢查Tempdb


SELECT
name AS FileName,
size*1.0/128 AS FileSizeinMB,
CASE max_size
WHEN 0 THEN 'Autogrowth is off.'
WHEN -1 THEN 'Autogrowth is on.'
ELSE 'Log file will grow to a maximum size of 2 TB.'
END,
growth AS 'GrowthValue',
'GrowthIncrement' =
CASE
WHEN growth = 0 THEN 'Size is fixed and will not grow.'
WHEN growth > 0 AND is_percent_growth = 0
THEN 'Growth value is in 8-KB pages.'
ELSE 'Growth value is a percentage.'
END
FROM tempdb.sys.database_files;
GO

2010年7月16日 星期五

MSSQL 簡單 T-SQL Cursor 範例

DECLARE InvoiceOID_cursor CURSOR FOR
select oid from Invoice
OPEN InvoiceOID_cursor
FETCH NEXT FROM InvoiceOID_cursor INTO @InvoiceOID
WHILE @@FETCH_STATUS = 0
BEGIN
-- PRINT @message
-- delete from XXX where oid = @InvoiceOID
-- Do Something !
FETCH NEXT FROM InvoiceOID_cursor INTO @InvoiceOID
END
CLOSE InvoiceOID_cursor
DEALLOCATE InvoiceOID_cursor

MSSQL 如何更改 tempdb 實體檔案位置

更改位置Script
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'E:\DB\tempdb.mdf');
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'E:\DB\templog.ldf');
GO


完成後可用下方Query檢查是否更改完成。
SELECT name, physical_name AS CurrentLocation, state_desc
FROM sys.master_files
WHERE database_id = DB_ID(N'tempdb');


最後再重啟資料庫即可

MSSQL 清除 Cache 與 Buffers

資料庫測試Query執行時間等數據時。 要特別注意Cache與Buffers的影響,因此在每個Query測試前,須注意先將Cache與Buffers清除。以確保執行不受Cache與Buffers影響。執行Query如下:

DBCC FREEPROCCACHE;
DBCC DROPCLEANBUFFERS;
GO

參加MSSQL 考試 70-433

考試時間:155 min
題數:65 題
及格分數:700 分
題型:單選、複選題。
比較特別是,在此門考試進行前,會有數個問題,詢問考生對 SQL Server 在程式開發的經驗,例如:使用過那些資料庫物件等等。

目 前尚未有像在 SQL Server 2005 版本,Exam 70-431:TS: Microsoft SQL Server 2005 - Implementation and Maintenance 有考實作題,讓考生操作 SQL Server Management Studio 管理工具。
這門考試,側重在程式開發上,建議要看懂題目所問的需求為何後,再進行作答,選擇正確的 Transact-SQL 程式碼。

目前尚未有以 Visual Studio 2008 使用 NET Framework 語言撰寫預存程序、觸發程序、使用者定義型別、使用者定義函數、使用者定義彙總及資料流資料表值函數等的程式碼 (VB 或 C#) 之考題。


題型方向: 誠如先前提及的「各項主題的配分比重」
考了數題與 TABLE JOIN、GROUP BY、HAVING、ORDER BY 有關的題目,這類的 DML 陳述式並不困難,但是要看懂題意的需求,會是重點。
再列舉數項給各位參考:
CTE 考了數題。
排名函數也考數題。
XML 也考了不少題目,由 OPENXML 到 XQuery 等。
TRIGGER 包含 DDL、AFTER、INSTEAD OF TRIGGER。
INDEX 也考了不少題目。

其他在 SQL Server 2005、2008 上新增加的功能,也都有考題,例如:DTA、MERGE、Service Broker、PowerShell、TRY...CATCH 等等。

2010年7月15日 星期四

MSSQL 提升SQL的查詢效能和避免Lock發生

要提升SQL的查詢效能,一般來說大家會以建立索引(index)為第一考量
其實除了index的建立之外,當我們在下SQL Command時,
在語法中加一段WITH (NOLOCK)
可以改善線上大量查詢的環境中資料集被LOCK的現象藉此改善查詢的效能。

不過有一點千萬要注意的就是,WITH (NOLOCK)的SQL SELECT 有可能會造成Dirty Read。

例如:
SELECT COUNT(UserID)
FROM EMPLOYEE WITH (NOLOCK)
            JOIN WORKING_GROUP WITH (NOLOCK) ON
            EMPLOYEE.UserID = WORKING_GROUP.UserID

因為SQL Server 會執行對應的鎖定一致性檢查。
欲改善整體資料庫查詢的效能,請將WITH (NOLOCK)加在您的SELECT語法中Table名稱的後面,
雖然(NOLOCK)也可以,但是微軟還是建議大家要加WITH
除了簡單的SELECT之外,有JOIN 的SELECT語法也是可以使用的。
但是DELETE、INSERT、UPDATE這些需要transaction的指令就不行了…

有些文件說,加了WITH (NOLOCK)的SQL查詢效率可以增加33%
本人試的結果…是有快了點,但是33%的效能提升…
我就不太清楚是怎麼算出來的!!

加了WITH (NOLOCK)即告訴SQL Server,我們的這段SELECT指令
無需去考慮目前table的transaction lock狀態,因此效能上會有明顯的提升,
而且資料庫系統的Lock現象會有明顯的減少(包含Dead Lock)。

有一點要特別注意,因為WITH (NOLOCK)不考慮目前table的transaction lock,
因此當有某些資料正處於多個phase交易(例如跨多個table的transaction交易-->如提款系統),
WITH (NOLOCK)會讓目前處理交易process的資料被乎略

講白話一點,也就是說當使用nolock時,它允許閱讀那些已經修改但是還沒有交易完成的資料。因此如果有需要考量transaction交易資料的即時完整性時,使用WITH (NOLOCK)就要好好考慮一下。

如果不需考量transaction,WITH (NOLOCK)或許是個好用的參考

註1:WITH ( < table_hint > )
指定由查詢最佳化器使用的資料表掃描、一或多個索引,
或由查詢最佳化器利用此資料表以及為此陳述式使用鎖定模式。

註2:WITH (NOLOCK)相當於 READ UNCOMMITTED

2010年7月14日 星期三

擔任SQL SERVER 2008的講師

這兩天配合專案而擔任SQL SERVER 2008的講師

分為兩部分
part I 主要是講關於

-- SSMS 開發與管理工具的使用
-- 認識SELECT \ INSERT \ DELETE \ UPDATE 語法
-- 認識分組與彙總

part II 主要是講關於

-- 連結多個資料表
-- 認識子查詢
-- 認識T-SQL語法元素
-- 資料庫的 安全性管理
-- 不同型態資料的匯入和匯出

心得分享:
雖然很累,但非常開心
其中也學到很多,從前置的資料準備
根據聽眾的需求來做調整,到臨場的發揮

語調和語速以及時間要拿捏的很好
好的講師是要能讓聽者聽的清楚明白
這次給自己的分數是70分
有一些細節的地方做的不夠好
希望之後還有機會擔任這個工作!

2010年7月11日 星期日

Microsoft SQL Server 2008 Certifications




Microsoft SQL Server 2008 training courses New Horizons Indianapolis

 

Database Administration

MCTS: SQL Server 2008, Implementation & Maintenance
Certification and Exams
The MCTS SQL Server 2008 Implementation and Maintenance certification candidate must pass a single exam.
Certification Exams
MCTS: SQL Server 2008, Implementation and Maintenance 70-432: TS: Microsoft SQL Server 2008, Installation and Maintenance




MCITP: Database Administrator 2008
Certification and Exams
The MCITP Database Administrator 2008 certification candidate must pass two exams.
Certification Exams
Prerequisite Certification:
MCTS: SQL Server 2008, Implementation and Maintenance

MCITP Certification:
MCITP: Database Administrator 2008
Prerequisite Exam:
70-432: TS: Microsoft SQL Server 2008, Installation and Maintenance

MCITP Exam:
70-450: PRO: Designing, Optimizing and Maintaining a Database Server Infrastructure using Microsoft SQL Server 2008




 

Database Developer

MCTS: SQL Server 2008, Database Development
Certification and Exams
The MCTS SQL Server 2008 Database Development certification candidate must pass a single exam.
Certification Exams
MCTS: SQL Server 2008, Database Development 70-433: TS: Microsoft SQL Server 2008, Database Development

MCITP: Database Developer 2008

Certification and Exams
The MCITP Database Developer 2008 certification candidate must pass two exams.
Certification Exams
Prerequisite Certification:
MCTS: SQL Server 2008, Database Development

MCITP Certification:
MCITP: Database Developer 2008
Prerequisite Exam:
70-433: TS: Microsoft SQL Server 2008, Database Development

MCITP Exam:
70-451: PRO: Designing Database Solutions and Data Access Using Microsoft SQL Server 2008




 

Business Intelligence

MCTS: SQL Server 2008, Business Intelligence Development & Maintenance
Certification and Exams
The MCTS SQL Server 2008 Business Intelligence certification candidate must pass a single exam.
Certification Exams
MCTS: SQL Server 2008, Business Intelligence Development & Maintenance 70-488: TS: Microsoft SQL Server 2008, Business Intelligence Development and Maintenance





MCITP: Business Intelligence Developer 2008
Certification and Exams
The MCITP Business Intelligence Developer 2008 certification candidate must pass two exams.
Certification Exams
Prerequisite Certification:
MCTS: SQL Server 2008, Business Intelligence Development & Maintenance

MCITP Certification:
MCITP: Business Intelligence Developer 2008
Prerequisite Exam:
70-488: TS: Microsoft SQL Server 2008, Business Intelligence Development and Maintenance

MCITP Exam:
70-452: PRO: Designing a Business Intelligence Infrastructure Using Microsoft SQL Server 2008

MSSQL 判斷表格是否被lock

剛在想如果發生交易行為, table 被lock住該怎麼辦?

解決方法:
下指令
dbcc opentran
找到尚未交易結束的id (回傳值)
再下
dbcc inputbuffer(id)
查看是何種語法導致

最後當然是 kill id

將程序結束掉



P.S. 越簡單的東西, 越容易忘掉

2010年7月10日 星期六

HTML5 and Web Standards

HTML5 Showcase

The demos below show how the latest version of Apple’s Safari web browser, new Macs, and new Apple mobile devices all support the capabilities of HTML5, CSS3, and JavaScript. Not all browsers offer this support. But soon other modern browsers will take advantage of these same web standards — and the amazing things they enable web designers to do.

剛去Apple的網站看了一下,Apple已經支援HTML5,雖然現在Windows OS上 Flash的運行效能比較好一些,但在往後只需要一個標籤就能內嵌所有的影音格式,其實關鍵並不是在HTML 5,反而是在瀏覽器。

目前支援HTML 5的瀏覽器有:FirefoxGoogle ChromeOperaSafari



HTML 5 線上繪圖工具
http://mugtug.com/sketchpad/
 

VSTS 2010: Overview of Team System 2010 for Architects

In this article we will take an overview of diagrams, features and tools provided in Team System 2010 for Architects. Although we will not cover the concepts of UML and other architectural concepts in details, we will refer to them time to time.

Introduce architecture tools in VSTS 2010 from other webblog
http://blogs.msdn.com/b/somasegar/archive/2009/08/29/architecture-tools-in-vsts-2010.aspx

參加MSSQL 考試 70-432

想說MSSQL也學了一些時間,該去考一考證照了
這次是先考70-432,再考70-433

考詩科目:
70-432 : TS: SQL Server 2008, Implementation and Maintenance

考試時間:120 min
題數:48 題
及格分數:700 分

題型:單選、複選題。

目 前尚未有像在 SQL Server 2005 版本,Exam 70-431:TS: Microsoft SQL Server 2005 - Implementation and Maintenance 有考實作題,讓考生操作 SQL Server Management Studio 管理工具。

此外,此次考試科目名為:
70-432 : TS: SQL Server 2008, Implementation and Maintenance
但很容易被歸類為 SQL Server 2008 管理類考試,以下整理出可能是與開發程式有關的題型:

1. 使用「內容切換」。
2. 維護 XML 索引。
3. 資料壓縮。
4. 分割資料表。
5. 索引維護作業。
6. 設定「平行處理原則的預設成本臨界值」。


參考文件:
Preparation Guide for Exam 70-432
TS: Microsoft SQL Server 2008, Implementation and Maintenance

 http://www.microsoft.com/learning/en/us/exams/70-432.mspx

MCTS Self-Paced Training Kit (Exam 70-432): Microsoft® SQL Server® 2008 - Implementation and Maintenance
http://www.amazon.com/MCTS-Self-Paced-Training-70-432-PRO-Certification/dp/0735626057
http://www.microsoft.com/learning/en/us/Books/12858.aspx

解決where in 帶多值的問題


最近遇到一個case, 需要填入多數值並作查詢
for example:
abcde, bcdef ,cdefg...
但作為參數傳進stored procedures
exec myproc test @ts = 'abcde, bcdef'
始終都無法成功...

解決方式
1. 用原始方法,將參數@ts 分為 @ts0, @ts1,@ts2...
但若遇到一次輸入10個以上, 就會顯得很笨拙
2. 新方法,用T-SQLq取代


Declare @ ts varchar(50) set @ ts = 'abcde,bcdef' select * from test where charindex (ts,@ts)



使用 CHARINDEX 主要是找出符合比較值,傳回在比較值的顯示位置(如果有就會大於0)

可自行搭配function 或 stored procedures

希望能解答有遇到類似問題的同好們