So sánh Oracle và SQL Server ?
*So sánh Oracle và SQL Server?
- Đầu tiên Oracle mắc hơn SQL Sever ,ngoại trừ ở VN.. haha..
- Oracle lớn hơn SQL Sever nhiều lắm, một tablespace trong Oracle tương đương 1 datbase trong SQL Sever (tui nói vậy đó ...)
- 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 CSDL master. Tất cả CSDL 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 (Cái này để trantuananh24hg giải thích rõ hơn)
- Oracle không được tích hợp vào Windows như SQL Server (Bill Gate đâu có dại .. )
- Cả hai sản phẩm hỗ trợ SQL và các stored procedure. Trong khi SQL Server sử dụng mở rộngTransact-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ự nhau,nhưng khác nhau về cú pháp (Cái này để từ từ mình cùng bàn với nhau ha )
- Các stored procedure SQL Server trả về một Recordset nếu bạn làm một câu lệnh SELECT trong procedure. Oracle chỉ hỗ trợ điều này qua cursor variables.
- 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ẽ 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 ( Mình cũng không tin...hehe)
- Oracle không hỗ trợ cursor server-side
- Oracle sử dụng lock mức hàng, trong khi trước version 7, SQL Server sử dụng lock mức trang
.....
Tôi không học về SQL Server, chỉ biết qua một số khái niệm, nên không dám lạm bàn so sánh. Đôi chút thêm về Oracle:
- Một table khi được định nghĩa (khởi tạo), bắt buộc phải đặt ở trên một tablespace riêng dành cho nó, nếu không chỉ ra tablespace này, thì mặc định SYSTEM tablespace được dùng cho table đó. Có thể allocate - chỉ định Temporary Tablespace dành cho table được created. Tuy nhiên, kích cỡ của một tablespace được xác định bằng mệnh đề "EXTENT MANAGEMENT" (Với Extent_management clause, ta có thể chỉ ra rằng, tablespace này được quản lý bằng Data Dictionary hay Local. Ví dụ: EXTENT MANAGEMENT LOCAL). Để bàn về việc quản lý tablespace theo kiểu j, thì có hẳn một chương, tuy nhiên, nếu ai đó có cảm hứng, tôi xin được bàn luận.
- Oracle là một product thuộc tập đoàn Oracle, riêng biệt so với các tập đoàn còn lại, SQL Server là một sản phẩm của Mircosoft, do đó, việc hệ điều hành Windows hỗ trợ cho SQL Server và chạy trên IIS là hoàn toàn đúng. Với các products riêng cho từng OS, Oracle gần như giống nhau, khác nhau một số phần (chẳng hạn như path dành cho Create password với orpwd utility - một ứng dụng tạo password authenticate cho user SysDba và SysOper từ hệ điều hành..)
- Với Oracle, một Database được tạo ra, không hẳn là có sự khác biệt so với các Database còn lại. Cái khác biệt ở chỗ..khi tạo ra, các thành phần của chúng được ta chỉ định nằm ở đâu, hoặc khi quản lý Manually, ta có thể thay đổi lại. Thông thường, với một Database lớn, hầu hết các chính sách quản lý phải chặt chẽ, linh động, và dễ dàng backup khi xảy ra lỗi, do đó, với cùng một Redo Log File, có thể có nhiều bản trên các Storage Unit khác nhau...
- Chưa hiểu bảng tạm trong SQL Server là j, nhưng nếu dùng Oracle, ta có thể sử dụng table Dual dành cho các công việc test.
Về vấn đề bảo mật trong Oracle, anh chỉ có vài ba ý kiến cá nhân thôi:
- Oracle là một RDBMS được support trên Multiplex Operating System, do đó Windows chỉ là một trong những OS mà Oracle chạy trên đó, ngoài ra còn rất nhiều OS khác, ví dụ: Unix, Solaris, Linux, HP,...
- Thực tế, vấn đề bảo mật là một trong những vấn đề mà yếu tố con người thậm chí còn chi phối rất nhiều. Hoạch định chính sách để thiết lập được một hệ thống Database chạy suôn sẻ đã là một cái khó, cái khó thứ 2 chính là những yếu tố không lường trước được. Anh lấy ví dụ cụ thể: 1 user thuộc nhóm Sysdba, thừa hưởng những priviledges (quyền) từ Administrator, thì hầu như mọi vấn đề trong Database anh ta đều nắm rõ được. Tất nhiên, cũng giống như một ngân hàng, một Database quan trọng bao giờ cũng bắt buộc phải có 2 người nắm giữ 2 chìa khóa, nên cũng có thể hạn chế được phần nào đó. Nhưng rõ ràng, trách nhiệm và sự ràng buộc đôi khi không khiến người ta làm chủ được chính mình. Thí dụ thứ 2: Một user có quyền Sysdba, nhưng được Create Externally, có nghĩa là user đó, nếu là admin của OS, hoàn toàn có thể login vào Database bằng account admin OS và được Oracle verify, tuy nhiên, không thể thay đổi các cấu trúc Database được, trừ phi user đó cũng được gán Sys Role. Đặt một vấn đề, giả sử rằng, nếu admin của OS không làm cách nào có thể lấy được thông tin từ Database, thì sẽ ra sao nếu như người đó hiểu rõ kiến trúc Oracle? Redo Log File, Archive Log File, Trace File, Alert File (Những file nằm trong nhóm dành cho Back up and Recovery), Control File, Data File (Những file nằm trong kiến trúc Oracle), vv... hoàn toàn là những file vật lý, copy những file này đâu phải là quá khó khăn, dù cho người mua chuộc chỉ có thể có chút ít thông tin về Database.
Một phần nữa không nằm trong yếu tố nội bộ, mà là từ bên ngoài, chính vì thế, đã có lần anh mạnh miệng phát biểu, đại ý là "Windows về bảo mật, chưa chắc đã bằng được những OS khác", Unix là một ví dụ, hoặc cũng có thể là Solaris (tiện đây, đồng chí nào đang nghiên cứu hay mới bắt đầu làm quen với Solaris, xin mời thảo luận thêm với tôi, tài liệu tôi sẽ support). Do đó, một DBA không những chỉ biết mỗi một RDBMS của mình, mà còn phải nắm tương đối về OS(s).
Nói tóm lại, vấn đề bảo mật là một trong những vấn đề đau đầu không chỉ dành riêng cho những người làm công tác quản trị Database, yếu tố con người vẫn là yếu tố hàng đầu. Không dưng mà những C.ty lớn trước những phần thi trắc nghiệm, tiếng Anh, chuyên ngành... tuyển đầu vào lại trình chiếu những tiến trình từ khi thành lập cho tới tận ngày hôm nay, trải qua bao khó khăn, thăng trầm... chính là mục đích huấn luyện tư tưởng cho nhân viên (dù là người sẽ vào làm hay thi trượt), sau đó, khi nhận được vào làm, ngoài những khóa training nghiệp vụ, họ còn được thử thách rất nhiều, chủ yếu là tư tưởng, cách thức làm việc lẫn phong cách sống để Manager nắm rõ hơn về yếu tố con người.
An A-Z Index of Oracle SQL Commands (version 9.2)
ANALYZE
AUDIT
CALL
Cluster - CREATE CLUSTER
- ALTER CLUSTER
- DROP CLUSTER
COMMENT
COMMIT
CONNECT
CONSTRAINT - Add / Enable
Context - CREATE CONTEXT
- DROP CONTEXT
Controlfile - CREATE CONTROLFILE
Database - CREATE DATABASE
- ALTER DATABASE
DELETE
DESCRIBE
Dimension - CREATE DIMENSION
- ALTER DIMENSION
- DROP DIMENSION
Directory - CREATE DIRECTORY
- DROP DIRECTORY
EXEC
EXECUTE IMMEDIATE
EXPLAIN PLAN
Function - CREATE FUNCTION
- ALTER FUNCTION
- DROP FUNCTION
GRANT
Index - CREATE INDEX
- ALTER INDEX
- DROP INDEX
Indextype - CREATE INDEXTYPE
- DROP INDEXTYPE
INSERT
INTERSECT
Java - CREATE JAVA
- ALTER JAVA
- DROP JAVA
Library - CREATE LIBRARY
- DROP LIBRARY
Link - CREATE DATABASE LINK
- DROP DATABASE LINK
LOCK TABLE
Mview - CREATE MATERIALIZED VIEW
- ALTER MATERIALIZED VIEW
- DROP MATERIALIZED VIEW
- CREATE MATERIALIZED VIEW LOG
- ALTER MATERIALIZED VIEW LOG
- DROP MATERIALIZED VIEW LOG
MINUS
NOAUDIT
Operator - CREATE OPERATOR
- DROP OPERATOR
Outline - CREATE OUTLINE
- ALTER OUTLINE
- DROP OUTLINE
Package - CREATE PACKAGE/BODY
- ALTER PACKAGE
- DROP PACKAGE
Pfile - CREATE PFILE
Procedure - CREATE PROCEDURE
- ALTER PROCEDURE
- DROP PROCEDURE
Profile - CREATE PROFILE
- ALTER PROFILE
- DROP PROFILE
RECOVER
RENAME
Resource - ALTER RESOURCE COST
REVOKE
RMAN - Recovery Manager
Role - CREATE ROLE
- SET ROLE
- ALTER ROLE
- DROP ROLE
ROLLBACK
Rollback - CREATE ROLLBACK SEGMENT
- ALTER ROLLBACK SEGMENT
- DROP ROLLBACK SEGMENT
SAVEPOINT
Schema - CREATE SCHEMA
SELECT
Sequence - CREATE SEQUENCE
- ALTER SEQUENCE
- DROP SEQUENCE
Session - ALTER SESSION
SHUTDOWN
SNAPSHOT
SPfile - CREATE SPFILE
STARTUP
Statistics - ASSOCIATE STATISTICS
- DISASSOCIATE STATISTICS
Synonym - CREATE SYNONYM
- DROP SYNONYM
System - ALTER SYSTEM
Table - CREATE TABLE
- ALTER TABLE
- DROP TABLE
Tablespace - CREATE TABLESPACE
- ALTER TABLESPACE
- DROP TABLESPACE
- CREATE TEMPORARY TABLESPACE
Transaction - SET TRANSACTION
Trigger - CREATE TRIGGER
- ALTER TRIGGER
- DROP TRIGGER
TRUNCATE
Type - CREATE TYPE
- ALTER TYPE
- DROP TYPE
- CREATE TYPE BODY
- DROP TYPE BODY
UPDATE
UNION
User - CREATE USER
- ALTER USER
- DROP USER
View - CREATE VIEW
- ALTER VIEW
- DROP VIEW
SYNTAX:
Words in CAPS are Oracle commands, words in lower-case are the options you can modify.
Sections enclosed in []
are optional, underlined options are the default
Sections enclosed in {}
are alternatives. The pipe symbol | indicates OR (more)
Chào em! Oracle là một trong những RDBMS mạnh, tuy nhiên, để có thể nói rằng nó có dễ học hay không thì lại thuộc phạm trù khác.
Anh xin đưa ra một vài phân tích, về IT và lập trình nói chung, kèm theo một vài kiến thức sơ sài của anh với Oracle:
1/
* IT nói chung có những đặc điểm riêng biệt so với ngành nghề khác, và trong từng lĩnh vực cụ thể lại có những điểm riêng nữa. Anh lấy ví dụ: Để trở thành lập trình viên, em có thể định hướng cho mình đi theo từng hướng đi: Application, Database, Network, PLC, OS.. Mỗi một hướng đi này đều phải có một sự đầu tư lâu dài, kiến thức nhất định và sự định hướng ngay từ lúc mới bắt đầu học, dần dần, theo khả năng và sự yêu thích, em có thể thay đổi từ một lĩnh vực này sang lĩnh vực khác trong lập trình hoặc giữ nguyên hướng đi từ đầu của mình. Một programmer xịn, thực tế, không mất quá nhiều thời gian để làm quen với ngôn ngữ lập trình, là bởi vì, về bản chất, mỗi ngôn ngữ lập trình đều có những đặc điểm tương tự với nhau. Nhưng điểm khác nhau giữa một người lập trình viên nắm rõ cấu trúc của một ngôn ngữ với một người biết nhiều ngôn ngữ ở một điểm: Anh ta vận dụng uyển chuyển, linh hoạt hơn trong từng module, nắm rõ phương pháp tối ưu hóa của ngôn ngữ đó. Sự hiểu biết sâu về một vấn đề (cụ thể ở đây là một ngôn ngữ lập trình) tạo ra sự cách biệt về khoảng cách đối với một người biết đa ngôn ngữ, nhưng không nắm bắt và có kiến thức sâu, rộng với từng một ngôn ngữ cụ thể nào.
* Lập trình cũng khác so với một người làm quản trị mạng (Network Admin), trong lập trình, với một project cụ thể, ta có thể thử nghiệm các module, tối ưu hóa sự vận hành của chúng (Tuning operator activity) bằng những công việc chỉnh-sửa thuật toán, chỉnh-sửa kết nối... (một ví dụ rất cụ thể đã được nêu ra trong forum này, em tìm đọc lại nhé: bài của thành viên hailoc) một cách tối ưu nhất ứng với một công việc, một yêu cầu hay một đề tài cụ thể. Nhưng một người làm quản trị mạng (NSA - Network System Admin) thì sai sót trong cách xử lý sự cố nhiều khi gây ra những tác hại vô cùng to lớn. Lấy ví dụ: Hệ thống Mail Server trong 1 C.ty đột nhiên...failed, kèm theo hằng trăm, hàng nghìn email của nhân viên..biến mất, thì Admin phải biết được xử lý sự cố này sao cho nhanh gọn nhất - Backup and Recover thật linh hoạt, đảm bảo cho việc transfer trong thời gian sớm nhất. Thử tưởng tượng xem, thay vì email thông báo tới khách hàng : "Hợp đồng số A0932...đã được chúng tôi đi đến kết luận cuối cùng là triển khai trong vòng 3h nữa" thì nó lại nằm đâu đó, chơi vơi và hát bài "Riêng một góc trời" tới tận 3h 30 phút thì ôi thôi, ai tai. Hay đơn giản hơn, ngài GĐ nhân sự gửi một message tới cô thư ký "Em ơi, hôm nay chúng ta có 1h để bàn chuyện riêng, hẹn em 12h trưa nay nhé", trong khi message này vẫn đang tồn tại ở một Instance hơn 2h.
2/ Oracle, như anh đã nói ở trên, thực sự là một RDBMS rất mạnh, được hiểu như một tier nằm giữa hệ điều hành và người truy cập, do đó, nó có những đặc điểm khác biệt hơn. Nhưng, cũng như anh đã nói ở trên, ngay từ khi biết đến một vấn đề (hay một lĩnh vực cụ thể nào đó), thì em nên có một cái nhìn tổng quan, tuy có thể không sâu, rộng vì chưa có khái niệm cụ thể. Nhiều người suy nghĩ đi theo hướng ứng dụng với DB, họ thường có cái nhìn DB chỉ đơn thuần chỉ một hệ thống thông tin, việc quản lý thông tin đơn giản chỉ như ta sắp xếp và phân phối lại sao cho hợp lý. Thế nhưng, để có thể sắp xếp và phân phối thông tin (thông tin - mạch máu của doanh nghiệp), thì lại phải có một quá trình thật sự tìm hiểu, học tập và vất vả vì nó. Bởi vì sao? Là bởi vì để hiểu được một table - bảng này chứa - contains trong nó những gì, thì ta lại phải biết tới khái niệm hàng và cột - row and column, để hiểu được tại sao có thể INSERT được một thông tin nào đó vào row, thì ta lại phải học đến khái niệm Block... Cứ như thế, khái niệm này dẫn đến khái niệm khác, ban đầu chỉ đơn thuần là table có row, sau đó lại biết đến kiểu dữ liệu trong đó, rồi lại biết đến cấu trúc table gồm những gì, cấu trúc row gồm những gì...etc Một ngày nào đó, rất có thể, ta nắm vững được kha khá khái niệm, nhưng cũng có thể ta quên sạch, hoặc chán ngấy với những lý thuyết nhồi nhét.
Trở thành một DBA, không hề dễ dàng chút nào, và đối mặt với những vấn đề rắc rối hàng ngày, hàng giờ, và có thể xảy ra bất kỳ lúc nào, DBAs không những phải có kiến thức về CSDL vững chắc, thì đòi hỏi phải hiểu biết thêm những lĩnh vực khác, chẳng hạn như OS, hay network.. Và cho dù đó RDBMS đó có là Oracle, SQL Server hay My SQL thì thực tế, những vấn đề đó không có sự khác nhau về bản chất sự việc.
Kết luận: Thực tế, nếu không có sự đam mê, không có kế hoạch đầu tư dài hạn (kế hoạch không đơn thuần dừng lại ở vấn đề tài chính), không có sự quyết tâm, thì cho dù một ngôn ngữ đơn giản, trực quan và dễ hiểu cho tất cả những người bước chân vào thế giới IT là Pascal cũng sẽ khó khăn trong việc tiếp thu.
P/S: Hy vọng em luôn vạch ra những kế hoạch thật sự nghiêm túc, cho dù em muốn tìm hiểu về Oracle, SQL Server hay C/C++...
__________________