“allow updates” thảm họa cho DBA (SQL2000) Microsoft đã fix version >= SQL2005

Chào các bạn,

“allow updates” là một option thảm họa trong Microsoft SQL 2005 trở về trước. Tại sao mình nói như thế ?

Cách đây khoản 4 năm, khi còn sử dụng SQL2000 và 2005 mình có biết một anh bạn đồng nghiệp, anh ta thiết kế Table có một column chiều dài bằng nvarchar(100). Sau này vì nhu cầu sử dụng nên column này phải dài bằng 200. Rất nhiều table và column cần phải sửa lại length của field này. Thay vì dùng Script Alter table, anh ta lại update length trực tiếp vào sys.columns vì option “allow updates” được bật lên nên user có thể cập nhật thẳng vào các table hệ thống, trong khi đó việc constraint giữa các table trong hệ thống không có. 

Continue reading ““allow updates” thảm họa cho DBA (SQL2000) Microsoft đã fix version >= SQL2005″

Tìm transaction chưa hoàn thành trong nhiều Database

Chào các bạn,

đôi khi server bạn treo cứng không rõ nguyên nhân, có rất nhiều nguyên nhân. Một trong những nguyên nhân đó là ứng dụng xử lý mở nhiều transaction nhưng không rollback hoặc commit transaction.

Trên server của bạn có rất nhiều database, vậy làm sao chúng ta biết database nào đang chứa transaction bị treo lơ lửng ?
Câu lệnh TSQL bên dưới sẽ giúp chúng ta quét toàn bộ các database và kiểm tra transaction log:
Continue reading “Tìm transaction chưa hoàn thành trong nhiều Database”

Câu SQL tách tháng-năm giữa 2 ngày riêng biệt

Chào các bạn,

Cường xin post câu lệnh TSQL dùng để tách tháng và năm giữa hai ngày cách biệt:

Ví dụ: Ngày bắt đầu là ngày “2012-02-01”, ngày kết thúc là ngày “2013-04-20”

=>Kết quả

022012
032012
042012
052012
062012
072012
082012
092012
102012
112012
122012
012013
022013
032013
042013

Continue reading “Câu SQL tách tháng-năm giữa 2 ngày riêng biệt”

BCP & xp_cmdshell => Xuất dữ liệu TSQL ra file

Chào các bạn,

Cường xin giới thiệu một lệnh đơn giản về BCP kết hợp với xp_cmdshell để xuất dữ liệu từ SQL ra file dạng text nhanh chóng.

Việc này rất có ích khi bạn có nhu cầu lấy dữ liệu theo định kỳ. Ví dụ hằng ngày lúc 08h dữ liệu chấm công sẽ tự động xuất ra file và lưu trữ trên thư mục share nào đó và hệ thống tính lương sẽ lấy các dữ liệu này tính toán v.v.v

Continue reading “BCP & xp_cmdshell => Xuất dữ liệu TSQL ra file”

Mã hóa dữ liệu quan trọng trong Microsoft SQL Server

Chào các bạn,

Như bài viết trước, tôi đã trình bày cách mã hóa dữ liệu file backup( *.BAK). Tiếp theo tôi sẽ trình bày cách mã hóa dữ liệu lưu trữ trong Database như thế nào.

Hiện nay khi nhà phát triển phần mềm trên mỗi trường Internet, ứng dụng Windows và ứng dụng web không tránh khỏi “Bug”. Tin tặc có thể lợi dụng các Bug này dùng SQL Injection truy cập vào hệ thống các bạn trái phép. Thông qua đó tin tặc sẽ lấy nhiều thông tin có lợi như : Số tài khoản, mật khẩu, Email v.v.v.

Thường thì thông tin đăng nhập vào hệ thống (Password) được các nhà lập trình lưu lại trong Database dưới dạng text và được mã hóa bằng các thuật toán mã hóa đơn giản.

Phòng ngừa các trường hợp xấu nhất có thể xảy ra, tin tặc có thể lấy đi Database của bạn nhưng dữ liệu đã được mã hóa một cách an toàn bằng chính các thuật toán mã hóa đã được chứng nhận trên thế giới.

Continue reading “Mã hóa dữ liệu quan trọng trong Microsoft SQL Server”

Mã hóa Backup Database (*.bak)

Chào các bạn,

Trong Microsoft có hai cơ chế mã hóa:
1. Mã hóa mức độ Database Engines
2. Mã hóa chi tiết mức độ dữ liệu ( dữ liệu lưu trong column).

Hôm nay Cường xin trình bày các mã hóa Database đơn giản: Mã hóa mức độ Database Engines
Mặc định Microsoft sẽ tắt chế độ mã hóa đi để đảm bảo Performance hệ thống. Tuy nhiên với các loại dữ liệu quan trọng và nhạy cảm, chúng ta nên chắc chắn rằng dữ liệu của bạn PHẢI được mã hóa kể cả file backup.
Nếu một lý do nào đó bạn bị mất hoặc trộm mất file backup chưa được mã hóa thì kẻ gian sẽ lợi dụng khai thác rất nhiều thông tin trong đó phục vụ cho nhu cầu bất chính của họ.
Continue reading “Mã hóa Backup Database (*.bak)”

sys.configurations : Table hệ thống này là gì và lợi ích của nó ra sao ?

Chào các bạn,

Trong mỗi một Database điều có thể có nhiều Schema trong đó mình lưu ý đến schema “SYS”.
Schema “SYS” này chứa thông tin tất cả các đối tượng hệ thống của Database đó.

sys.configurations

ở đây mình lưu ý đến schema “SYS” và đối tượng cụ thể trong schema đó là : sys.configurations

Continue reading “sys.configurations : Table hệ thống này là gì và lợi ích của nó ra sao ?”

Tempdb : Tối ưu hóa và cải thiện tốc độ xử lý

Như những bài viết trước mình đã trình bày sơ lượt về Database Tempdb.
Nay mình xin viết bài “Tối ưu hóa và cải thiện tốc độ xử lý của Database Tempdb”.


Tempdb là một Database tạm thời lưu trữ dữ liệu cache và các đối tượng tạm thời. Sau một thời gian sử dụng tempdb ngày một phình to ra sẽ gây trở ngại ít nhiều về tốc độ xử lý server:
1. Khi nhiều client truy cập vào DBMS và tạo nhiều đối tượng tạm giống nhau, tempdb sẽ sinh ra nhiều đối tượng rác. Mặc định thì DBMS sẽ dọn các đối tượng rác này cho bạn, tuy nhiên bạn thử hình dung rằng khi một transaction nào đó từ một client nào đó tạo ra hàng trăm đối tượng tạm nhưng vì lý do khách quan, transaction này không hoàn thành. Lúc này DBMS sẽ không tự động xóa các đối tượng rác này cho bạn !!! vậy các đối tượng rác này sẽ nằm lơ lững trong DBMS mà không có client nào được sử dụng.
2. Chiếm dụng tài nguyên bộ nhớ máy chủ: Ví dụ client dùng câu lệnh TSQL select 1,000,000 record và đưa vào table tạm, lúc này tài nguyên trên sẽ được đưa vào RAM máy chủ và nếu client không kết thúc transaction thì dung lượng RAM máy chủ của bạn sẽ bị chiếm giữ. Dĩ nhiên các hệ thống máy chủ ngày nay có dung lượng RAM khủng nhưng với doanh nghiệp có tần xuất nhập xuất dữ liệu lớn thì yêu cầu các nhà quản trị Database phải quan tâm đến vấn đề này
3. Chiếm dụng băng thông I/O (Input/Output) vào đĩa cứng.

Continue reading “Tempdb : Tối ưu hóa và cải thiện tốc độ xử lý”