Thứ Ba, 22 tháng 1, 2013

So Sánh Oracle và SQL SERVER

· Oracle là một RDBMS multiplatform trong khi SQL Server chỉ giới hạn trên NT Server. Hầu hết các hệ Oracle high-end chạy trên UNIX.

· Oracle không có khái niệm một cơ sở dữ liệu master. Tất cả cơ sở dữ liệu chạy độc lập với các file dữ liệu của nó, sự quản lý bộ nhớ riêng và điều khiển riêng.

· Kiến trúc của Oracle hoàn toàn khác SQL Server.

· Oracle không được tích hợp vào thế giới Windows như SQL Server.

· Cả hai sản phẩm hỗ trợ SQL và các stored procedure. Trong khi SQL Server sử dụng mở rộng Transact-SQL cho SQL, Oracle sử dụng PL/SQL. Chức năng của những ngôn ngữ này tương tự, nhưng khác nhau về cú pháp.

· Các stored procedure SQL Server trả về một Recordset nếu bạn làm một lệnh SELECT trong procedure. Oracle chỉ hỗ trợ điều này qua cursor variables, là một khái niệm khó chấp nhận đối với một số developer.

· Trong các stored procedure, Oracle tự động sử dụng các chuyển tác; trong SQL Server sự thay đổi dữ liệu được tự động commit theo mặc định.

· SQL Server chia sẻ khái niệm cột autonumber với Access. Trong Oracle, bạn sẽ cần làm việc với các sequence.

· SQL Server hỗ trợ các bảng tạm, Oracle không có.

· Trong Oracle, bạn không phải debug giữa client và server như bạn làm trong SQL Server.

· Các hàm khác nhau giữa hai hệ thống, và một số hàm không có hàm tương ứng.

· SQL Server có một tập kiểu dữ liệu cơ sở lớn hơn Oracle.

· Oracle không hỗ trợ cursor server-side.

* Instance 

- MSSQL: Từ MSSQL 2000, mỗi máy có thể nhiều hơn 1 instance. Cụ thể MSSQL 2000 (16 instanes), 2005 (50 instances) 

- Oracle: trên mỗi máy có nhiều Instances, số lượng phụ thuộc vào từng OS ! 

* Login Name/ DB username 

- MSSQL: Mỗi Login name có thể "map" tới nhiều DB Username trong các Database, LoginName và DB Name không nhất thiết cùng tên. vd: LoginName là SA được map tới DB Username tên là DBO trong tất cả các Database. 

- Oracle: Không có sự phân biệt LoginName/DB Name. Khi tạo 1 user, thì đó là vừa là LoginName vừa là Db Username. 

* Database/ Schema 

- MSSQL: Mỗi Instance có nhiều Database, và mỗi Database có nhiều Schema. Có thể phân quyền cho DB Username trên Schema. 

- Oracle: Mỗi Instance xem như chỉ có 1 Database !!! Trong Database có nhiều DB Username, tương ứng mỗi DB Username có 1 và chỉ 1 schema cùng tên với user. Vì vậy, trong Oracle không có khái niệm phân quyền trên schema (chỉ có phân quyền cho từng Objects trên schema đó). 

* Một số cái khác: 

- MSSQL: 

+ Giao diện sử dụng dể dùng và gần gủi. 

+ Command line dài dòng và phức tạp, khó dùng, đa số phải sử dụng buildin package: exec xp_xxxx 
vd như để phần quyền "lẻ" có thể dùng lệnh Grant, nhưng để phân quyền sử dụng role phải qua xp_xxx, phần quyền cho schema phải alter... 

+ Auto Commit On 
+ ..... 

- Oracle: 

+ Mãnh đấu màu mỡ cho những "nhà phát triển thứ 3" phát triển các công cụ phục vụ Oracle như: TOAD, PL/SQL Developer,... vì cái tool OEM nặng, nhiều chức năng nhưng ...ko gần gủi người dùng. Ngay cả để cài cái OEM cũng phải "ngâm cứu" nhiệt tình mới hiểu và cài lên được!! 

+ Giao diện dòng lệnh dể sử dụng, đa số là Create/Alter/Drop. Như việc phân quyền chỉ cần Grant/revoke cho dù là quyền "lẻ" hay "sỉ"(role). 

+ Auto Commit off 

Bổ sung thêm chút (không dính dáng đến "mô hình" DB lắm , vì MSSQL tôi chỉ dùng từ khá lâu, hồi MSSQL2000 nên không biết nhiều) 
1. Hardware requirements: 
- MSSQL required thấp hơn Oracle 
- MSSQL chỉ chạy trên chip Intel base and compatible, không chạy được trên các chíp mạnh khác như Power, PA-RISC, Itanium, SPARC ... Trong khi Oracle chạy được trên hầu hết các kiến trúc đó. 
2. OS 
- MSSQL chỉ chạy được trên Windows, không chạy được trên Linux, Unix 
- Oracle thì chạy rất tốt trên Linux và Unix 
3. Price 
- MSSQL rẻ hơn so với Oracle 

... 
Cuối cùng, nói 1 chút liên quan đến "mô hình" 2 hệ RDBMS này, nhưng vì chỉ biết MSSQL2000 nên chỉ so sánh Oracle 9i với MSSQL2000 cho nó hợp lý (cùng thời). Đó là SQL (PL/SQL) trong Oracle mạnh hơn SQL (T-SQL) trong MSSQL 
VD như: 
1. Về Indexes: 
- Oracle support: B-Tree Indexes, Bitmap Indexes, Partition Indexes, Function based Indexes, Domain Indexes 
- MSSQL: chỉ có B-Tree index (hình như bản MSSQL2008 đã có Partition Indexes thì phải) 
2. Về Tables: 
- Oracle: support rất nhiều như: relation tables, object tables, partition tables, temporary tables, Êxternal tables và IOT 
- MSSQL: chỉ có Relation tables (hình như đến bản 2008 đã có partition tables) 
3. Về Triggers: 
- Oracle: đặc biệt có "Database Event trigger" rất hay, MSSQL thì không có. 
... 
4. Procedures 
Oracle support cả các procedure của Java và các third party khác, trong khi MSSQL chỉ có T-SQL 

4 nhận xét:

  1. Bổ sung 1 vài điều mà topic còn nói chưa chính xác

    - Từ SQL Server 2012 cũng đã bổ sung sequences

    - SQL Server hỗ trợ các bảng tạm, Oracle không có => Oracle có. Trong phần các loại Table mà bạn liệt kê cũng ghi rõ Oracle có Temporary Table.Chỉ có điều cách dùng Temp Table trong Oracle không linh hoạt như trong SQL Server


    2. Về Tables:
    - Oracle: support rất nhiều như: relation tables, object tables, partition tables, temporary tables, Êxternal tables và IOT
    - MSSQL: chỉ có Relation tables (hình như đến bản 2008 đã có partition tables).
    Bản 2k5 đã có partition table rồi. Nếu bạn đã liệt kê Temporary Table ở phần Oracle thì SQL Server cũng có Temp Table.

    3. Về Triggers:
    - Oracle: đặc biệt có “Database Event trigger” rất hay, MSSQL thì không có.
    => SQL Server 2005 đã có DDL trigger rồi.
    4. Procedures
    Oracle support cả các procedure của Java và các third party khác, trong khi MSSQL chỉ có T-SQL

    Từ SQL Server 2005 đã có CLR rồi bạn nhé.

    Trả lờiXóa