Tuesday, December 8, 2009

How to configure SQL Server Linked Server to Oracle

Nếu trong hệ thống của bạn sử dụng cả SQL Server và Oracle, thì đây là cách cho phép bạn thực hiện tạo 1 linked server từ SQL Server vào Oracle. Từ đó, bạn có thể thực hiện  các lệnh truy vấn trên Oracle và sử dụng dữ liệu nhận được trên SQL Server.

Các bước thực hiện như sau:

Bước 1: Cài đặt Oracle client trên SQL Server host

Bạn có thể download trình cài đặt Oracle client từ trang web của Oracle. Bạn nên sử dụng Oracle client phiên bản tương tự phiên bản của Oracle server.

Bước 2: Cấu hình kết nối đến Oracle Instance

Sử dụng “Oracle Net Configuration Assistant” để cấu hình kết nối đến Oracle server, hoặc bạn có thể thêm cấu hình vào file tnsnames.ora, format của cấu hình kết nối đến Oracle server như sau:

OracleServiceNameAlias = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = your-host-name-or-ip)(PORT = listener-port-usually-1521)) 
) 
(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = oracle-service-name) 
) 
)

Trong đó:

  • OracleServiceNameAlias: Do bạn tự đặt, được sử dụng như là Data Source khi cấu hình Linked Server.
  • your-host-name-or-ip: Là hostname hoặc địa chỉ ip của Oracle server mà bạn kết nối đến.
  • listener-port-usually-1521: Là port của Oracle server (cổng ngầm đinh của Oracle là 1521).
  • oracle-service-name: là service name của Oracle server

Bước 3: Test cấu hình đã được thiết lập

Bạn hãy dùng Command Prompt, đánh vào dòng lệnh sau: tnsping OracleServiceNameAlias

Ví dụ:

 C:\>tnsping OralceServiceNameAlias 
...
Used TNSNAMES adapter to resolve the alias 
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = OralceServiceNameAlias))) 
OK (10 msec)

Khi bạn thấy dòng trên, thì bạn cấu hình đã OK.

Bước 4: Create link from SQL Server to Oracle

Bạn sử dụng SQL Server Management Studio và chạy các câu lệnh sau:

EXEC sp_addlinkedserver @server = 'MyOracleLink', @srvproduct = 'Oracle', @provider = 'MSDAORA', @datasrc = 'OralceServiceNameAlias' 
EXEC sp_addlinkedsrvlogin 'MyOracleLink', false, 'NULL', 'ora_username', 'ora_password'

Trong đó:

  • sp_addlinkedserver thực hiện đăng ký link server vào SQL Server
  • @server=Tên của Linked Server, tên này phải chưa tồn tại trong danh sách Linked Servers
  • @srvproduct= Tên của data source kết nối đến (tùy chọn)
  • @provider = Provider sẽ sử dụng, ở đây MSDAORA = Microsoft OLE DB Provider for Oracle
  • @datasrc  = Tên của Oracle Instance Alias mà bạn đã cấu hình ở bước 2.
  • sp_addlinkedsrvlogin đăng ký account đăng nhập vào Oracle, sử dụng account ora_username/ora_password.

Bước 5: Tạo câu lệnh để test dữ liệu

SELECT * FROM OPENQUERY(MyOracleLink, 'SELECT * FROM TableTest')

Như vậy, với câu lệnh trên thực hiện được, thì quá trình cấu hình Linked Server đã hoàn tất.

Tuesday, December 1, 2009

Reset Identity Column in SQL Server

Khi thiết kế cơ sở dữ liệu, bạn có thể thiết lập một cột trong bảng với thuộc tính Is Identity = true. SQL Server sẽ tự động thiết lập giá trị tăng tự động cho cột đó.

Tuy nhiên, sau một thời gian kiểm thử database, bạn muốn reset lại giá trị cho cột này về một giá trị nào đó bạn mong muốn, thì câu lệnh sau cho phép bạn thực hiện việc này.

USE [TenDatabase];

DBCC CHECKIDENT(TenBang, RESEED, Giatri);

Trong đó:

TenBang là tên của bảng có chứ Identity Column mà bạn muốn thiết lập lại giá trị.

Giatri là giá trị mà bạn khởi tạo. Nếu bạn đặt giá trị này bằng 0, thì row được insert ngay sau đó sẽ có giá trị là 1 với cột tự tăng này.

Chú ý rằng việc insert sau đó có thể gặp lỗi nếu bạn thiết lập giá trị khởi tạo đến giá trị nhỏ hơn hoặc bằng giá trị lớn nhất đang tồn tại trên cột tự tăng của bảng đó.