Đỉnh NGUYỄN

life's a journey not a destination


Leave a comment

[What’s New] – SQL Server 2012 – Những điểm mới trong cài đặt


SQL Server 2012 giới thiệu môt số sự thay đổi trong cài đặt:

1. Datacenter Edition: Datacenter edition được giới thiệu trong SQL Server 2008 R2 và không còn tồn tại trong SQL Server 2012. Thông tin về các phiên bản của SQL Server, xem Editions and Components of SQL Server 2012.

2. Business Intelligence edition: SQL Server 2012 giới thiệu 1 phiên bản mới của SQL Server – SQL Server Business Intelligence.

SQL Server 2012 Business Intelligence edition cung cấp nền tảng toàn diện để xây dựng các giải pháp BI dễ quản lý, khả năng mở rộng và bảo mật. Thêm thông tin, xem Features Supported by the Editions of SQL Server 2012.

3. Enterprise Edition: bắt đầu từ SQL Server 2012, có 2 phiên bản Enterprise khác nhau dựa trên bản quyền:

   – Enterprise Edition: Server/License Access License (CAL) based licensing

   – Enterprise Edition: Core-base Licensing

Thêm thông tin về các giới hạn của SQL Server, xem Compute Capacity Limits by Edition of SQL Server.

4. Các thay đổi về HĐH: bắt đầu từ SQL Server 2012, SP 1 là yêu cầu tối thiểu dành cho Windows 7 và Windows Server 2008 R2. Thêm thông tin về các yêu cầu trên HĐH, xem Hardware and Software Requirements for Installing SQL Server 2012.

5. Data Quality Services: bây giờ có thể cài Data Quality Services (DQS) trong khi cài SQL Server. Thêm thông tin, xem Install Data Quality Services.

6. Product Update: Product Update là đặc tính mới trong cài đặt SQL Server 2012. Nó sẽ cập nhật mới nhất cho sản phẩm cài đặt chính. Thêm thông tin, xem Product Updates in SQL Server 2012 Installation.

7. Server Core Installation: bắt đầu từ SQL Server 2012, chúng ta có thể cài SQL Server trên Windows Server 2008 R2 Server Core SP1. Thêm thông tin, xem  Install SQL Server 2012 Server Core.

8. SQL Server Data Tools (còn được gọi là Business Intelligence Development Studio): bắt đầu từ SQL Server 2012, bạn có thể cài đặt SQL Server Data Tools (SSDT) cung cấp IDE để xây dựng các giải pháp cho Business Inteligence: Analysis Services, Reporting Services, và Integration Services.

SSDT cũng gồm “Database Projects”, cung cấp môi trường tích hợp cho người phát triển CSDL có thể làm các công việc thiết kế cho nền tảng SQL Server dùng Visual Studio.

9. SQL Server multi-subnet clustering: bây giờ bạn có thể cấu hình SQL Server failover cluster dùng các node khác subnet. Thêm thông tin, xem SQL Server Multi-Subnet Clustering.

10. SMB file share is a supported storage option: các database hệ thống (master, model, msdb, và tempdb), và database người dùng Database Engine có thể được cài đặt trên trên máy chủ chia sẽ tập tin SMB. Điều này áp dụng cho cài đặt SQL Server stand-alone và SQL Server failover cluster. Thêm thông tin, xem Install SQL Server with SMB file share as a storage option.

Important: Tài khoản cài đặt SQL Server phải có FULL CONTROL và quyền NTFS trên SMB share folders. SQL Server service account và SQL Server agent service account phải có quyền FULL CONTROL trên SMB share folders.

Cùng 1 số thay đổi khác mình chưa quan tâm.

Advertisements


Leave a comment

Sự khác nhau giữa TRUNCATE và DELETE


1. Giới thiệu

Lệnh TRUNCATE và DELETE đều được dùng để xóa dữ liệu trong bảng. Cả hai lệnh này chỉ xóa dữ liệu mà không xóa cấu trúc bảng.

2. LệnhTRUNCATE

Lệnh TRUNCATE xóa tất cả dòng dữ liệu trong bảng mà KHÔNG ghi nhận lại trong transaction log. Lệnh TRUNCATE có cùng chức năng như lệnh DELETE là xóa dữ liệu trong bảng mà không làm thay đổi cấu trúc của bảng, tuy nhiên, bạn không dùng mệnh đề WHERE với lệnh TRUNCATE.

Cú pháp:

TRUNCATE TABLE [{database_name.[schema_name].|schema_name.}]table_name

Trong đó:

  • table_name: là tên của bảng cần xóa tất cả các dòng dữ liệu.

VD: TRUNCATE TABLE Products;

Lệnh trên sẽ xóa tất cả dữ liệu trong bảng Products.

3. Lệnh DELETE

Lệnh DELETE cũng xóa các dòng trong bảng, nhưng nó ghi lại các dòng được xóa trong transaction log. Bạn có thể dùng mệnh đề WHERE với lệnh DELETE để giới hạn các dòng được xóa.

Dưới đây là cú pháp đơn giản, thông tin chi tiết lệnh DELETE, xem link: DELETE (Transact-SQL).

Cú pháp:

DELETE FROM TABLE_NAME [{database_name.[schema_name].|schema_name.}]table_name

Trong đó:

  • database_name: Tên của cơ sở dữ liệu chứa bảng dữ liệu cần xóa. Đây là tùy chọn, nếu không chỉ định, cơ sở dữ liệu hiện tại được chọn.
  • schema_name: Tên của schema chứa bảng dữ liệu cần xóa. Đây là tùy chọn, nếu không chỉ định, schema hiện tại được chọn.
  • table_name: Tên của bảng dữ liệu cần xóa.

VD: DELETE FROM Products;

Lệnh trên sẽ xóa tất cả dữ liệu trong bảng Products.

Trong lệnh DELETE bạn có thể giới hạn số dòng dữ liệu được xóa bằng mệnh đề WHERE. Chỉ những dòng dữ liệu nào thỏa điều kiện trong mệnh đề WHERE mới được xóa, không phải tất cả dòng dữ liệu.

VD: DELETE FROM Products WHERE ProductId IN (1, 2, 3);

Lệnh trên chỉ xóa các dòng dữ liệu có ProductId là 1, 2, 3 trong bảng Products.

4. Khác nhau giữa TRUNCATE và DELETE

TRUNCATE và DELETE xóa dữ liệu nhưng không xóa cấu trúc

Cả hai lệnh đều xóa các dòng dữ liệu trong bảng, nhưng cấu trúc bảng, các cột, ràng buộc, chỉ mục,.. đều được giữ lại. Để xóa định nghĩa bảng và dữ liệu, dùng lệnh DROP TABLE.

Điều kiện trên tập dữ liệu xóa

Điều kiện trên tập dữ liệu xóa nghĩa là không phải tất cả dòng dữ liệu đều bị xóa. Nếu tôi có bảng Authors và tôi chỉ muốn xóa các Authors mà sống ở Australia.

  • TRUNCATE – Lệnh TRUNCATE chúng ta sẽ không thể xóa theo điều kiện bởi vì lệnh này không cho phép mệnh đề WHERE.
  • DELETE – Lệnh DELETE cho phép xóa dữ liệu theo điều kiện đi theo mệnh đề WHERE.

DELETE và TRUNCATE đều ghi lại các hành động

Trong nhiều bài viết tôi đọc trên Internet, tôi thấy: “DELETE thì ghi nhận lại các hành động còn TRUNCATE thì không”, nghĩa là khi thực hiện lệnh DELETE, nó sẽ ghi nhận lại thông tin các dòng bị xóa và khi thực hiện lệnh TRUNCATE nó sẽ không ghi lại gì cả. Nhưng thực tế không phải vậy, TRUNCATE cũng ghi lại hành động nhưng theo cách khác. Nó dùng ít tài nguyên hệ thống và transaction log hơn DELETE. Lệnh TRUNCATE ghi lại thông tin ở mức tối thiểu, đó là lý do tại sao nó nhanh hơn lệnh DELETE. Cả hai lệnh DELETE và TRUNCATE đều ghi lại các hành động, nhưng chúng làm việc khác nhau:

  • DELETE ghi lại hành động cho mỗi dòng. Lệnh DELETE xóa từng dòng một và ghi lại thay đổi trong transaction log cho mỗi dòng được xóa. Vì thế nếu xóa một lượng lớn các dòng dữ liệu thì có thể làm đầy transaction log. Điều này có nghĩa là khi xóa một lượng lớn các dòng dữ liệu sẽ dùng nhiều tài nguyên máy chủ cũng như ghi lại mỗi sự thay đổi cho mỗi dòng được xóa. Đó là lý do tại sao transaction log sẽ phình ra rất to. Một số người thắc mắc là tại sao Microsoft không sửa lệnh DELETE để không ghi lại mỗi dòng được xóa???. Câu trả lời là khi bạn chạy cơ sở dữ liệu trong chế độ khôi phục đầy đủ, thông tin chi tiết trong transaction log rất cần thiết để khôi phục cơ sở dữ liệu về trạng thái gần nhất.
  • TRUNCATE ghi lại các trang dữ liệu được hủy cấp phát khi bị xóa. Nó không ghi lại các dòng bị xóa, thay vào đó nó ghi lại các trang dữ liệu bị hủy cấp phát của bảng. Lệnh TRUNCATE xóa dữ liệu bằng cách hủy cấp phát các trang dữ liệu được dùng lưu trữ dữ liệu trong bảng và ghi lại chỉ các trang được hủy cấp phát trong transaction log. Thực sự, TRUNCATE không xóa dữ liệu, nó hủy cấp phát các trang dữ liệu và xóa con trỏ đến chỉ mục. Dữ liệu sẽ vẫn tồn tại cho đến khi nó bị ghi đè hoặc cơ sở dữ liệu shrunk. Hành động này không yêu cầu nhiều tài nguyên và vì thế rất nhanh. Có một lỗi phổ biến là nghĩ rằng truncate không ghi lại thao tác. Điều này sai, các trang dữ liệu bị hủy cấp phát được ghi nhận trong tập tin log. Vì thế, “Books Online (BOL)” ám chỉ hành động TRUNCATE là hành động “ghi nhật ký rất ít”. Bạn có thể dùng truncate đi kèm với transaction, và khi transaction được rolled-back, các trang dữ liệu được cấp phát lại lần nữa và cơ sở dữ liệu trở về trạng thái trước đó.

Để ví dụ cụ thể việc TRUNCATE cũng ghi lại thao tác:

/*Create a dummy table in a non-production(dummy) database.*/
CREATE TABLE tranTest
(
    Id int Identity(1,1),
    Name Varchar(100)
)

/*Now insert the records in the tranTest table.*/
INSERT INTO tranTest(Name) VALUES('prashant')
INSERT INTO tranTest(Name) VALUES('prateek')
INSERT INTO tranTest(Name) VALUES('praveen')
INSERT INTO tranTest(Name) VALUES('prakash')
INSERT INTO tranTest(Name) VALUES('prabhat')

/*Then as you know delete is a looged operation that means 
  in a transaction if we rollback the transaction after deleting 
  the records from table, it will restore all deleted records.*/

BEGIN TRAN
    DELETE FROM tranTest
    SELECT * FROM tranTest
ROLLBACK

SELECT * FROM tranTest

/*Now delete all records from the table.*/
DELETE FROM tranTest

/*And Insert new fresh records in the table.*/
INSERT INTO tranTest(Name) VALUES('prashant')
INSERT INTO tranTest(Name) VALUES('prateek')
INSERT INTO tranTest(Name) VALUES('praveen')
INSERT INTO tranTest(Name) VALUES('prakash')
INSERT INTO tranTest(Name) VALUES('prabhat')

/*Then as you now you know that Truncate is also a logged 
  opertion so it must restore all records that are deleted from 
  the tranTest table in the below tansaction*/

BEGIN TRAN
    TRUNCATE TABLE tranTest
    SELECT * FROM tranTest
ROLLBACK

SELECT * FROM tranTest

Khi chúng ta chạy lệnh trên và TRUNCATE cũng phục hồi tất cả dòng dữ liệu đồng nghĩa với TRUNCATE cũng ghi lại thao tác, nhưng dùng ít tài nguyên. Tôi nghĩ rằng dùng ít tài nguyên nghĩa là bạn có thể khôi phục lại lệnh truncte cho một phiên làm việc cụ thể nhưng nếu bạn đóng kết nối thì sẽ không thể phục hồi lại dữ liệu. Nhưng DELETE có thể phục hồi dữ liệu về sau.

5. Hành vi của DELETE và TRUNCATE đối với cột IDENTITY

OK, bây giờ trong trường hợp các cột Identity. Cả hai lệnh TRUNCATE và DELETE đều có sự khác nhau với các cột Identity. Khi dùng TRUNCATE, nó sẽ reset biến đếm được dùng bởi cột Identity cho các dòng dữ liệu mới. Nhưng trong trường hợp DELETE nó sẽ không reset biến đếm được dùng bởi cột Identity. Trong trường hợp muốn duy trì biến đếm cho cột Identity thì phải dùng DELETE thay vì TRUNCATE.

Tại sao có sự khác nhau này? Tôi không biết, nhưng T-SQL cung cấp cho bạn 2 cách để có thể dùng khi cần. Trong trường hợp bạn muốn tất cả dòng dữ liệu được xóa và biến đếm reset trở về 1, thì TRUNCATE là hợp lý. Nếu muốn xóa tất cả các dòng dữ liệu nhưng không muốn reset biến đếm, DELETE là hợp lý.

Ví dụ cho trường hợp này:

INSERT INTO tranTest(Name) VALUES('prateek')
INSERT INTO tranTest(Name) VALUES('praveen')
INSERT INTO tranTest(Name) VALUES('prakash')
INSERT INTO tranTest(Name) VALUES('prabhat')

/* Now at this point the counter of this table's 
   identity column is 5 taht is the max value of id column */
SELECT * FROM tranTest

/* Then truncate the table. */
TRUNCATE TABLE tranTest

/* and insert new records */
INSERT INTO tranTest(Name) VALUES('prashant')
INSERT INTO tranTest(Name) VALUES('prateek')
INSERT INTO tranTest(Name) VALUES('praveen')
INSERT INTO tranTest(Name) VALUES('prakash')
INSERT INTO tranTest(Name) VALUES('prabhat')

/* Now you'll see that after truncating the table the 
   identity is reset to its seed value. */
SELECT * FROM tranTest

/* So this example explains the beahviour of both of these command for Identity columns. */

6. TRUNCATE là lệnh DDL, trong khi DELETE là lệnh DML

Đây cũng là sự khác nhau cơ bản khi bạn đọc các bài viết. TRUNCATE là hành động DDL (data definition language) và DELETE là hành động DML (data manupulation language). Nhưng tại sao?

Khi chúng ta chạy lệnh TRUNCATE, nó đặt một “Schema modification (Sch-M)” lock trên bảng. “Schema modification (Sch-M)” là gì?.

Database Engine dùng schema modification (Sch-M) lock bảng trong suốt thời gian hành động DDL thực hiện, như add một cột hoặc drop 1 bảng. Trong suốt thời gian này, Sch-M ngăn cản các hành động truy xuất bảng. Có nghĩa là Sch-M khóa tất cả các hành động bên ngoài cho đến khi block được release. Bởi vì TRUNCATE không thực hiện bất kỳ hành động thay đổi dữ liệu nào trên bảng và là lý do DELETE TRIGGER không được gọi. Dù không thay đổi dữ liệu trên bảng, nhưng như bạn biết là TRUNCATE reset biến đếm của cột Identity, nghĩa là TRUNCATE thực hiện thay đổi định nghĩa bảng hay cấu trúc, chính là hành động DDL. Để được xếp vào hành động DDL, lệnh TRUNCATE phải thỏa:

  • Thay đổi cấu trúc hoặc định nghĩa bảng dưới dạng hành động DDL, và
  • Trong khi bạn thay đổi cấu trúc bảng, bạn không thể truy xuất bảng để thực hiện bất kỳ hành động thay đổi dữ liệu nào.

Với lệnh DELETE, tôi không chắc là có hành động lock, nhưng như đã biết lệnh DELETE xóa từng dòng một. Hành động thay đổi dữ liệu bằng cách xóa nó trong bảng, và bởi vì DELETE thực hiện thay đổi dữ liệu nên DELETE TRIGGER được gọi. Lệnh DELETE không thay đổi cấu trúc của bảng như cách mà lệnh TRUNCATE thay đổi reset biến đếm của cột Identity.

Để được xếp vào hành động DML, lệnh DELETE phải thỏa:

  • Thay đổi dữ liệu trong bảng.
  • Khi đang thay đổi dữ liệu trong bảng, bạn không thể thực hiện bất kỳ sự thay đổi cấu trúc bảng.

7. Hành vi TRUNCATE và DELETE đối với TRIGGER

Như bạn biết, trigger được gọi khi có bất kỳ sự thay đổi xảy ra trong bảng.

  • TRUNCATE – Khi bạn chạy lệnh TRUNCATE để xóa tất cả các dòng dữ liệu của bảng, nó thực sự không xóa dữ liệu mà chỉ hủy cấp phát các trang dữ liệu và vì thế trigger không được gọi.
  • DELETE – Trigger được gọi mỗi khi 1 dòng dữ liệu được xóa.

8. Chúng ta nên dùng lệnh nào trong trường hợp nào

Với DELETE

  • Lệnh DELETE có thể sinh lỗi nếu trigger cố gắng xóa dòng dữ liệu được tham chiếu bởi dữ liệu trong bảng khác có ràng buộc FOREIGN KEY. Nếu Delete xóa nhiều dòng, và 1 dòng không được xóa, lệnh sẽ bị hủy, lỗi sẽ được trả về và không dòng nào được xóa.

Với TRUNCATE

Bạn không thể dùng TRUNCATE TABLE trên bảng:

  • Được tham chiếu bởi ràng buộc FOREIGN KEY.
  • Trên một view được lập chỉ mục.
  • Được published dùng transactional replication hoặc merge replication.

9. Quyền thực hiện lệnh TRUNCATE và DELETE

Để TRUNCATE bảng, bạn cần tối thiểu là quyền ALTER trên bảng (được gán mặc định cho table owner, sysadmin, db_owner, và db_ddladmin). Để xóa dùng DELETE, chỉ cần cấp quyền DELETE.


Leave a comment

SQL Server Driver 2.0 cho PHP 5


Microsoft vừ phát hành SQL Server Drivers for PHP 2.0, hỗ trợ PDO vớI PDO_SQLSRV mớI và fix các bugs đã tồn tạI trong SQLSRV driver. Các native APIs trong PHP Driver for SQL Server 1.1 vẫn còn giữ lạI và thêm hỗ trợ PDO API.

Microsoft nói “In order to support the new PDO_SQLSRV driver to be consistent with the existing SQLSRV driver, the code was re-architected into a core functional layer and an "API" layer above. The SQLSRV driver is built from this re-architected code, and also includes some important bug fixes. This release is available to all SQL Server users at no additional charge”.

Download SQL Server Driver 2.0 for PHP

Drivers for PHP for SQL Server được dùng để kết nối các ứng dụng PHP đến Microsoft SQL Server.


2 Comments

Thiết kế cơ sở dữ liệu đa ngôn ngữ


Bài viết này dựa trên kinh nghiệm cá nhân và không hẳn là cách tốt nhất

Xây dựng website đa ngôn ngữ có nhiều vấn đề, 1 trong số đó là cách lưu trữ nội dung trong csdl cho từng ngôn ngữ

1. Hướng tiếp cận dạng cột

Cách này phổ biến, cơ bản là tạo ra nhiều cột lưu trữ nội dung từng ngôn ngữ

table pages

— id (uniqueidentified)

— title_vi (nvarchar)

— title_en (nvarchar)

— content_vi (ntext)

— content_en (ntext)

Cách này truy vấn bằng cách tự động chọn các cột theo ngôn ngữ

SELECT id, title_vi AS title, content_vi AS content FROM pages

Hoặc có thể chọn tất cả các cột và lấy đúng cột theo ngôn ngữ

string title = (string)dataReader["title_" + Session["currentLanguage"]];

Thuận lợi

– Nó không trùng thông tin vì chĩ có 1 dòng cho mỗi mẫu tin và chỉ có các cột ngôn ngữ được nhân bản

– Dễ cài đặt

Bất lợi

– Khó duy trì. Dù dễ dàng với 2-3 ngôn ngữ nhưng không thích hợp khi có nhiều ngôn ngữ hoặc nhiều cột

– Khó thêm ngôn ngữ mới

2. Hướng tiếp cận nhiều dòng

Tương tự như cách ở trên, cách này tạo ra nhiều dòng thay vì nhân bản các cột theo ngôn ngữ

table pages

— id (uniqueidentified)

— language_id (smallint)

— title (nvarchar)

— content (nvarchar)

Cách này sẽ có 3 dòng cho cùng 1 trang nếu có 3 ngôn ngữ

Thuận lợi

– Dễ thêm ngôn ngữ mới

Bất lợi

– Nhiều nội dung trùng tại các cột chứa nội dung chung không cần chuyển ngữ

3. Hướng tiếp cận dạng bảng

Cách này phức tạp hơn 2 cách trên, nhưng thích hợp cho website động, có nhiều ngôn ngữ và có ý định thêm ngôn ngữ mới dễ dàng

table languages

— id (smallint)

— name (nvarchar)

table pages

— id (uniqueidentified)

— language_id (smallint)

— title (int fk)

— content (int fk)

table translation

— id (uniqueidentified)

table translation_entry

— translation_id (uniqueidentified)

— language_id (smallint)

— content (ntext)

Thuận lợi

– Dễ dàng thêm ngôn ngữ mới

Bất lợi

– Truy vấn nhiều bảng để lấy được nội dung

– Tất cả nội dung chuyển ngữ nằm cùng bảng

– Trông hơi khó làm việc và duy trì

4. Hướng tiếp cận dạng bảng 2

Đây là 1 biến thể của cách tiếp cận trên để dễ dàng làm việc và duy trì

Thay vì chỉ có 1 bảng dùng chuyển ngữ cho tất cả các bảng khác, bây giờ sẽ có 1 bảng dùng chuyển ngữ tưng ứng với 1 bảng. Di chuyển các cột cần chuyễn ngữ sang bảng dùng chuyển ngữ, còn lại các cột dùng chung (các cột không cần chuyển ngữ)

table languages

— id (smallint)

— name (nvarchar)

table pages

— id (uniqueidentified)

table pages_translation

— id (uniqueidentified)

— page_id (uniqueidentified)

— language_id (smallint)

— title (nvarchar)

— content (ntext)

SELECT * FROM pages JOIN pages_translation ON pages.id = pages_translation.page_id WHERE languages_id='1'

Thuận lợi

– Dễ thêm ngôn ngữ mới

– Dễ truy vấn

– Tên các cột được giữ nguyên

Bất lợi

– Tạo ra nhiều bảng chuyển ngữ tương ứng với các bảng

Kết luận

Chắc chắn có nhiều phương pháp khác nhau tạo nên website đa ngôn ngữ. Các giải pháp trên là ý kiến dựa vào kinh nghiệm cá nhân và cũng là phù hợp với các website đang làm

Dạng chuẫn khi thiết kế csdl vẫn chưa được bàn đến trong các phương pháp trên, sẽ có 1 bài viết như thế.

Cuối cùng, phương pháp tốt nhất là phương pháp phù hợp nhất với từng website, phù hợp nhất với cách làm việc và duy trì của bạn

Nếu bạn có hoặc tìm thấy cách nào khác, vui lòng chia sẽ với tôi và mọi người!

Tham khảo thêm

http://www.ibm.com/developerworks/web/library/wa-dbdsgn2.html

http://stackoverflow.com/questions/929410/what-is-best-practices-for-multilanguage-database-design


Leave a comment

A Step by Step guide to installing SQL Server 2008 simply and successfully with no prior knowledge


Mong rằng sẽ mang đến cái nhìn tổng quát và sự hài lòng cho các nhà phát triển và nhà quản trị hệ thống cũng như những DBA. Những yêu cầu cơ bản, điển hình cho hầu hết người dùng cùng một số vấn đề khi cài đặt SQL Server 2008.

Nhớ cài đặt .Net Framework 3.5

Trước khi bắt đầu cài đặt SQL Server 2008, bạn cần cài đặt trước .Net Framework 3.5 hoặc cao hơn. Đối với Windows Server 2008 thì .Net Framework 3.5 đã được tích hợp sẵn, nhưng các phiên bản Windows Server trước đó thì không. Chi tiết hơn, xem Cài đặt .Net Framework 3.5 cho SQL Server 2008.

Một khi .Net Framework 3.5 đã được cài đặt, chúng ta bắt đầu cài SQL Server 2008.

BƯỚC 1 : Copy the installation files

Trước tiên, bạn nên chép tất cả thư mục chứa các tập tin cài đặt SQL Server 2008 vào phân vùng ổ cứng – phân vùng trên máy mà bạn định cài đặt vào đó

Mặc dù sẽ phải đợi lâu (có khi phải uống café trong khi đợi), nhưng sẽ có 3 thuận lợi sau:

  • Quá trình cài đặt nhanh hơn khi cài từ CD/DVC
  • Dễ dàng thêm hoặc gỡ bỏ các thành phần trong SQL Server 2008 sau này mà không cần SQL Server 2008 CD/DVD
  • CD/DVD có thể bị hư hại trong lúc cài đặt, và bạn lại phải lau nó hoặc chấp nhận tốn tiền

BƯỚC 2 : Setup.exe

Nhấp đôi vào tập tin setup.exe.
Vài giây sau, một hộp thoại xuất hiện:

Và sau đó hộp thoại chứa trang cài đặt xuất hiện:

BƯỚC 3 : SQL Server Installation Center

Chọn liên kết Installation bên tay trái hộp thoại:

BƯỚC 4 : SQL Server Installation Center

Chọn liên kết "New Server stand-alone installation" bên tay phải hộp thoại:

Hộp thoại tiến trình cài đặt xuất hiện:

Sau một khoảng thời gian, màn hình cài đặt xuất hiện:

BƯỚC 5 (optional) :

Nếu có 1 tiến trình kiểm tra nào bị lỗi, chọn nút Show details hoặc liên kết View detailed report để xem chi tiết và tìm nguyên nhân. Nhấp chọn nút Re-run để kiểm tra lại lần nữa.

BƯỚC 6 : Product key

Nếu tất quả tiến trình của quá trình kiểm tra đều thành công, chọn nút OK. Sau vài giây, tùy chọn phiên bản và bản quyền xuất hiện.

BƯỚC 7 : Licence Terms

Nhập mã sản phẩm hoặc chọn free edition nếu bạn muốn dùng thử SQL Server 2008, và chọn nút Next.

Chọn checkbox "I accept the license terms", sau đó chọn nút Next lần nữa.

BƯỚC 8 : Setup Support Files

Màn hình sau xuất hiện; chọn nút Install:

Windows Installer khởi động quá trình cài đặt:

Sau 30 giây hoặc hơn, một hộp thoại xuất hiện:

BƯỚC 9 : Setup Support Rules

Nếu mọi thứ ok, màn hình sau xuất hiện:

Chọn nút Next lần nữa.

BƯỚC 10 : Feature Selection

Chọn các đặc tính bạn muốn cài đặt.
Ít nhất, các thành phần sau nên được cài đặt, nhưng bạn sẽ quyết định những gì mình cần.

Chọn nút Next.

BƯỚC 11 : Instance Configuration

Sau một thời gian ngắn, màn hình sau xuất hiện:

Nên giữ nguyên thiết lập mặc định.
Chọn nút Next.

BƯỚC 12 : Disk Space Requirements

Màn hình này báo cho bạn biết rằng đủ dung lượng đĩa cứng cho quá trình cài đặt cũng những những thành phần nào sẽ được cài và cài ở đâu.

Chọn nút Next.

BƯỚC 13 : Server Configuration

Bước này cho phép bạn chọn tài khoản dùng thực thi SQL Server. Nếu bạn có tài khoản Windows NT hoặc Active Directory, hãy dùng nó.

Nếu không, dùng tài khoản Network Service được tạo sẵn cho tất cả các dịch vụ được liệt kê (tài khoản này không yêu cầu mật khẩu)

Bạn có thể dễ dàng thay đổi tài khoản cho các dịch vụ (Control Panel -> Administrator Tools -> Services):

Nhớ chuyển Startup Type thành Automatic, cho tất cả 3 dịch vụ. Điều này cho phép khởi động cả SQL Server database engine, SQL Agent và SQL Browser services khi hệ điều hành khởi động.

Dịch vụ đầu tiên được khởi động là SQL Server database engines. Hai dịch vụ còn lại sẽ khởi động sau khi cài đặt xong hoặc sau khi khởi động lại máy

Đừng lo lắng về tab collation, cứ để mặc định. Cuối cùng, chọn nút Next.

BƯỚC 14 : Database Engine Configuration – Account Provision

Màn hình này cho phép bạn cấu hình bảo mật database engine

Đổi từ Authentication Mode sang Mixed Mode nếu bạn cần cả 2 cơ chế chứng thực để kết nối đến database engine.

Nhiều ứng dụng của hãng thứ ba giao tiếp với SQL Server khi bạn đăng nhập vào SQL Server hoàn toàn, vì thế sẽ là lời khuyên bật tính năng chứng thực Mixed Mode trong trường hợp này. Nếu Mixed Mode được bật, bạn phải gán mật khẩu cho tài khoản sysadmin (sa)

Nhập và nhập lại mật khẩu cho tài khoản sa và giữ nó an toàn. Không trao nó cho bất cứ ai nếu bạn không muốn họ truy xuất vào cơ sở dữ liệu.

BƯỚC 15 : Database Engine Configuration – Data Directories

Chọn tab Data Directories.

Đổi thư mục hệ thống dùng lưu trữ các loại tập tin cơ sở dữ liệu.

Thông thường, nên đặt thư mục chứa cơ sở dữ liệu người dùng và thư mục log trên 2 phân vùng vật lý để tăng hiệu suất, nhưng cũng phụ thuộc vào cấu hình hệ điều hành bạn dùng và không gian đĩa.

Nếu bạn cài đặt trên ổ đĩa đơn:

Data root directory

C:\Program Files\Microsoft SQL Server

User database directory

C:\Data

User log directory

C:\Logs

Temp DB directory

C:\TempDB

Temp Log directory

C:\TempDB

Backup directory

C:\Backups

Không nên chọn chọn tab FILESTREAM nếu không cần thiết, nhưng bạn cũng có thể dễ dàng thay đổi nó dùng sp_configure ‘filestream_access_level’, sau khi SQL Server đã được cài đặt. Chọn nút Next.

BƯỚC 16 : Error Usage Reporting

Màn hình đơn giản này hỏi bạn muốn gởi thông tin lỗi về Microsoft

Chọn các tùy chọn trên nếu muốn cung cấp thông tin lỗi cho Microsoft hoặc muốn Microsoft giúp bạn

Chọn nút Next lần nữa…

BƯỚC 16 : Installation Rules

Màn hình đơn giản này kiểm tra nếu có bất kỳ tiến trình cài đặt khác đang cùng chạy, thì sẽ tạm dừng quá trình cài SQL Server 2008

Chọn Next – bây giờ mọi thứ sẵn sàng cài đặt:

BƯỚC 17 : Ready to Install

Màn hình tóm tắt cho thấy những gì bạn đã cấu hình và sẽ được cài đặt, nếu thấy không đúng, có thể hủy cài đặt.

Chọn nút Install khi bạn đã kiểm tra kỹ lưỡng những gì mình muốn

Installation Progress

Bây giờ thì SQL Server 2008 đang được cài đặt. Thời gian phụ thuộc vào tốc độ máy tính, các đặc tính cần cài và tốc độ đọc tập tin từ nguồn cài đặt.

…Tiến trình cài đặt (tiếp theo)

… và cuối cùng
Cuối cùng, quá trình cài đặt hoàn tất:

…và hộp thoại sau sẽ xuất hiện:

Chọn nút OK, máy tính sẽ KHÔNG khởi động.
Hộp thoại sau xuất hiện:

…và sau đó:

Chọn nút Next lần nữa…

BƯỚC 18 : Installation Complete

Màn hình sau xuất hiện:

Xem log để xác định lại lần cuối những gì mình cần có phù hợp.

Cuối cùng, Chọn nút Close. Hộp thoại sau sẽ xuất hiện:

Chọn nút OK – máy tính sẽ KHÔNG khởi động lại tại thời điểm này.

Hộp thoại sẽ xuất hiện và bạn trở về hộp thoại cài đặt ban đầu.

Click on the Close button (the “x”) in the top right of the screen.
Finally, manually reboot your machine to complete the SQL Server 2008 installation.

Top Tips :

How to check that SQL Server 2008 has installed correctly

Here are a short number of post-installation checks which are useful to perform after re-booting your new SQL Server. You don’t have to run these, and there are other ways to check, but they are very useful for non-DBAs to be sure that the installation is basically sound and a connection can be made to the new SQL Server before handing it over to someone else.

Check 1: Has the SQL Server Service Started?

Check SQL Server 2008 has started.

Check 2: Does Management Studio Work?

Check Management Studio works by firing it up.

Click on NO when you see this dialog box:

Check 3: Can you run a basic query against the new SQL Server?

Check SQL Server works by running a simple query from Management Studio:

Enter the query shown below and hit F5 to run it:

Check 4: Is SQL Server Agent Running?

Check SQL Server Agent is running for scheduled jobs. There should be a green arrow next to the SQL Server Agent database symbol (it’s small, you might have to look hard):

Check 5: Can SQL Server be seen from the Network?

Check that the new SQL Server can be seen from another SQL Server on the same domain by running isql –L (or osql –L):

If you can’t see the new SQL Server in this list, check that the SQL Server Browser service is started on the machine where you have just installed SQL Server.

Check 6: Has the TCP/IP network protocol library been enabled on the server?

If the browser service is started but you still cannot connect to the server, click on Start ->Programs -> SQL Server 2008 -> SQL Server Configuration Manager (on the server where SQL Server’s just been installed)

The SQL Server Configuration Manager window opens.
Click on the SQL Server Network Configuration node and expand it.

In the example below, we have MSSQLSERVER (a base instance of SQL Server), and SQLEXPRESS showing as installed.
If in doubt, click on Protocols for MSSQLSERVER.

In the above screenshot, the TCP/IP network protocol library is disabled. We need to enable it in order that remote servers can talk to the newly installed SQL Server.

  • A word of explanation : In most installations, Named Pipes can be ignored, unless there is a requirement for it. In virtually all environments, VIA can also be ignored as this protocol requires a special network card. Shared memory is the “local” protocol that SQL Server uses when talking to a client application on the same server as itself, for example when SQL Server Management Studio connects to it. It is usually best to leave this enabled.

You will need the TCP/IP protocol enabled if you need to connect to your new SQL Server from a remote client or another server via TCP/IP, which is what most networks use.

If it shows as DISABLED (above), double click on the TCP/IP protocol line, and the following window will appear:

Ensure that Enabled is set to Yes, and click on OK.
The following warning will appear:

Click on OK, and you will be returned to the Configuration Manager window, where TCP/IP will now be shown as enabled:

Go back to the Services applet, and re-start the MSSQLSERVER service so that the TCP/IP protocol can be used to connect to your new SQL Server.

Then try to connect to it again from a remote machine.

If you have experienced problems with the previous connectivity tests, you should now be able to repeat at least some of them successfully.