Tôi là một DBA của Oracle cũng có kinh nghiệm về Sybase.
Sự khác biệt lớn về kiến trúc và khái niệm giữa hai nền tảng RDBMS là gì?
Một câu trả lời tương tự như SQL Server-> câu hỏi Oracle ở đây sẽ được sử dụng nhiều nhất.
Tôi là một DBA của Oracle cũng có kinh nghiệm về Sybase.
Sự khác biệt lớn về kiến trúc và khái niệm giữa hai nền tảng RDBMS là gì?
Một câu trả lời tương tự như SQL Server-> câu hỏi Oracle ở đây sẽ được sử dụng nhiều nhất.
Câu trả lời:
Tôi đã trao đổi giữa làm việc trên Oracle và SQL Server trong vài năm qua và đã viết một bài giới thiệu về cách khác ở đây. Có một số khác biệt về thành ngữ và kiến trúc, và các thuật ngữ khác nhau được sử dụng khác nhau bởi các cộng đồng nhà cung cấp và nhà phát triển / DBA xung quanh mỗi sản phẩm.
Kiến trúc vật lý
SQL Server tổ chức nhiều thứ khác nhau một chút so với Oracle và có một hoặc hai khái niệm chính không có sự tương tự trực tiếp trong Oracle.
'Cơ sở dữ liệu' là một mục riêng biệt trong SQL Server, với quyền người dùng, lược đồ / không gian tên và lưu trữ riêng. Nếu bạn quen thuộc với Sybase, chúng hoạt động giống như cơ sở dữ liệu trong Sybase, do nguồn gốc chung của sản phẩm.
Filegroups gần tương đương với không gian bảng, mặc dù chúng là cục bộ của cơ sở dữ liệu.
Lược đồ là một khái niệm khác biệt với người dùng cơ sở dữ liệu trong SQL Server, mặc dù người dùng có thể có một lược đồ mặc định.
MVCC hoạt động hơi khác trong SQL Server. Đây là một tính năng tương đối gần đây, duy trì các bản sao khác nhau của một hàng cho đến khi các khóa trên phiên bản cũ được phát hành. SQL Server không có tương đương trực tiếp với phân khúc rollback. Nó không hoạt động theo mặc định trên cơ sở dữ liệu SQL Server.
Tempdb được sử dụng nhiều hơn trong SQL Server. Hệ thống sử dụng nó cho các bảng tạm thời và kết quả tham gia trung gian. Thêm về tempdb sau.
Phân vùng bảng có phần vụng về hơn Oracle. Bạn cần thiết lập chức năng phân vùng tạo khóa phân vùng từ bất cứ thứ gì bạn đang cung cấp, sau đó là sơ đồ phân vùng trên chức năng phân vùng đó. Lược đồ phân vùng hoạt động giống như một filegroup trong đó bạn tạo bảng trên sơ đồ phân vùng.
Hoán đổi các phân vùng vào và ra đòi hỏi bạn phải thiết lập một ràng buộc trên một bảng trống trong cấu trúc bên phải. Ràng buộc đảm bảo rằng các giá trị khóa phân vùng phù hợp với phân vùng bạn định trao đổi vào nó.
Các khung nhìn cụ thể hóa được gọi là các khung nhìn được lập chỉ mục trong SQL Server. Các GROUP BY
khoản không có một CUBE
nhà điều hành, và ám chỉ tài liệu để viết lại một tính năng truy vấn. Tuy nhiên, chức năng này không được ghi chép tốt và có thể không trưởng thành khủng khiếp. YMMV.
SQL Server không hỗ trợ các giao dịch tự trị, mặc dù nó hỗ trợ cam kết hai pha thông qua các giao thức giao dịch XA hoặc OLEDB.
Các chỉ mục được phân cụm hơi khác so với các bảng được sắp xếp theo chỉ mục trong Oracle, vì chúng không yêu cầu tất cả các cột trong bảng tham gia vào chỉ mục được phân cụm. Chúng được sử dụng rộng rãi hơn trong kiến trúc SQL Server so với IOT trong Oracle.
SQL Server không hỗ trợ bao gồm các chỉ mục, nhưng không có các chỉ mục tham gia. Các chỉ mục bitmap không được hỗ trợ, mặc dù nó có toán tử biến đổi giao điểm / sao có thể tính toán các giao điểm mà không cần nhấn vào bảng thực tế.
Chuỗi là một bổ sung tương đối gần đây cho SQL Server. Các khóa tự động truyền thống được thực hiện thông qua các cột định danh. Bạn có thể tải các giá trị vào một cột nhận dạng thông qua set identity_insert on
.
Lập trình
Thành ngữ T-SQL có một số khác biệt so với PL / SQL thành ngữ. Nó hoạt động đủ khác nhau để một số khác biệt mô tả công đức giải thích sâu hơn.
T-SQL không có khái niệm về một gói. Tất cả các thủ tục và hàm được lưu trữ trong cơ sở dữ liệu nằm trong một không gian tên chung, mặc dù các lược đồ có thể được sử dụng để phá vỡ điều này và không gian tên là cục bộ của cơ sở dữ liệu.
Hãy cảm nhận về cách sử dụng các bảng tạm thời và SELECT INTO
. Rất hiếm khi gặp mã T-SQL thực sự cần con trỏ; các bảng tạm thời cho phép các hoạt động được chia thành các bước có thể được thực hiện với các hoạt động được thiết lập. SELECT INTO
trong tempdb được ghi lại tối thiểu và nó cũng được ghi lại tối thiểu trong các chế độ phục hồi nhất định trên cơ sở dữ liệu người dùng, do đó, nó cũng nhanh như toán tử truy vấn vẫn duy trì kết quả tham gia trung gian.
T-SQL thành ngữ sẽ sử dụng các bảng tạm thời theo loại vai trò mà bạn sẽ thấy các biến con trỏ trong PL / SQL, nhưng sẽ sử dụng nhiều hơn các hoạt động thiết lập. Tuy nhiên, các bảng tạm thời có thể tạo mã khá khó hiểu, vì vậy hãy cẩn thận khi sử dụng.
Từ điển dữ liệu hệ thống khó hiểu hơn nhiều so với phiên bản cũ của Oracle, nhưng nó tốt hơn nhiều với SQL Server 2005. Mặc dù các công cụ do Microsoft cung cấp có khá nhiều nội dung được tích hợp trong trình thám hiểm SSMS, nhưng vẫn đáng để bạn biết cách xung quanh từ điển dữ liệu. Nó không phân biệt giữa ALL
, USER
và DBA
quan điểm của các đối tượng DB, mặc dù.
SSMS có một trình xem kế hoạch truy vấn được tích hợp sẵn.
Mã định danh trong mã T-SQL có thể được trích dẫn bằng [] và có thể chứa tất cả các loại rác nếu được trích dẫn. Tuy nhiên, nếu chúng tôi bắt bạn gọi một cột 'Trực tiếp / Chuyển khoản', chúng tôi sẽ tách ruột của bạn ra.
SQL Server hiện có các chức năng của cửa sổ (kể từ năm 2005 IIRC), vì vậy bạn có thể thực hiện đặt hàng, chạy tổng và tương tự trong các nhóm ngay bây giờ.
T-SQL không có tương đương trực tiếp CONNECT BY
, mặc dù đệ quy có thể được thực hiện thông qua các CTE đệ quy.
Nếu bạn cần viết mã nhảy qua các cơ sở dữ liệu (trái ngược với các lược đồ trong cơ sở dữ liệu), hãy xem xét sử dụng các từ đồng nghĩa công khai để đặt bí danh cho các đối tượng thành một cái gì đó cục bộ và tham chiếu các bí danh trong mã. Điều này tránh sự phụ thuộc được mã hóa cứng vào tên cơ sở dữ liệu.
Nếu bạn tránh được sự phụ thuộc được mã hóa cứng vào tên cơ sở dữ liệu, cơ sở dữ liệu sẽ giúp dễ dàng duy trì nhiều môi trường trên cùng một máy chủ.
Một số điều, chẳng hạn như các hàm tổng hợp tùy chỉnh, chỉ có thể được thực hiện bằng cách sử dụng sprocs CLR. Ngoài ra, nếu bạn muốn thoát khỏi bối cảnh giao dịch (ví dụ: giả mạo giao dịch tự trị để ghi nhật ký lỗi bằng chứng rollback), bạn có thể sử dụng vòng quay CLR, vì nó có thể tạo kết nối cục bộ bên ngoài bối cảnh giao dịch hiện tại.
Bảo vệ
Đăng nhập được xác định ở cấp phiên bản SQL Server, nhưng mỗi lần đăng nhập ánh xạ tới 0 hoặc nhiều cơ sở dữ liệu dưới dạng 'người dùng cơ sở dữ liệu'. Cam quyền được gán cho cả 'đăng nhập' (máy chủ) và 'người dùng' (cơ sở dữ liệu) nhưng trong cơ sở dữ liệu 'vai trò' thường được sử dụng. Người dùng thuộc về vai trò, quyền được gán cho vai trò. SQL Server 2012 thêm 'vai trò máy chủ'.
SQL Server 2012 giới thiệu một khái niệm gọi là 'cơ sở dữ liệu chứa một phần', cho phép thông tin về vai trò và người dùng được lưu giữ cục bộ trong cơ sở dữ liệu đó.
Trong một cơ sở dữ liệu, khái niệm người dùng và lược đồ được tách ra. Người dùng hoặc vai trò có thể được gán cho một lược đồ và một lược đồ sở hữu các đối tượng cơ sở dữ liệu.
Xác thực Windows sử dụng thông tin đăng nhập phía sau hậu trường để xác thực người dùng trên máy hoặc tên miền với thông tin đăng nhập SQL Server. Hỗ trợ IIRC cho điều này là một tùy chọn bổ sung trên Oracle.
Một vai trò đặc biệt, 'dbo' (viết tắt của 'chủ sở hữu cơ sở dữ liệu') có một loại đặc quyền siêu người dùng trong một cơ sở dữ liệu cụ thể. Mỗi cơ sở dữ liệu có vai trò 'dbo' và người dùng có thể được gán cho vai trò 'dbo' trên cơ sở dữ liệu nhất định.
Ngoài ra còn có một lược đồ 'dbo' mặc định. Các đối tượng có thể được sở hữu bởi lược đồ dbo - Các đối tượng được tạo bởi người dùng có vai trò 'dbo' (hoặc quyền quản trị toàn hệ thống) sẽ được mặc định sở hữu bởi lược đồ 'dbo' trừ khi lược đồ khác được cung cấp rõ ràng.
Thông tin bảo mật không được lưu giữ với một bản sao lưu của một cơ sở dữ liệu. Người dùng phải và vai trò phải được cấu hình rõ ràng trên máy chủ, bản sao lưu được khôi phục. SQL Server 2012 cho phép dữ liệu vai trò và người dùng được lưu cục bộ vào cơ sở dữ liệu với tính năng 'cơ sở dữ liệu được chứa một phần' mới.
Từ SQL Server 2005, các thủ tục được lưu trữ có thể được thực thi trong ngữ cảnh bảo mật của người gọi, người tạo, lược đồ sở hữu hoặc người dùng được chỉ định.
Trong chế độ xem trên SQL Server, các quyền trên các bảng bên dưới được dựa trên các quyền của lược đồ sở hữu chế độ xem. Quyền của người dùng trên các bảng bên dưới không tham gia bảo mật, mặc dù định nghĩa chế độ xem có thể bao gồm các bộ lọc lấy thông tin từ phiên. Trong Oracle, quyền của người dùng trên các bảng bên dưới có thể ảnh hưởng đến chế độ xem, tùy thuộc vào cấu hình của các khoản trợ cấp.
Giám sát và điều chỉnh
TBA - kiến trúc bộ nhớ so với SGA, v.v.
Sao lưu và phục hồi
TBA
Dụng cụ
Microsoft gói một bộ công cụ xung quanh với SQL Server. Một số mặt hàng chính được cung cấp là:
SQL Server Management Studio (SSMS): Điều này thực hiện một cái gì đó tương tự như SQL Developer trên Oracle - nó cung cấp một trình soạn thảo và cơ sở thực thi mã. Một số tính năng hữu ích bao gồm trình duyệt đối tượng cơ sở dữ liệu và trình xem kế hoạch truy vấn.
Dịch vụ phân tích máy chủ SQL (SSAS): Đây là máy chủ OLAP khác với máy chủ cơ sở dữ liệu. Nó sử dụng ngôn ngữ truy vấn riêng (MDX) và API (XML / A) để liên lạc với máy khách-máy chủ. Nó không thể được truy vấn với SQL. SSMS có một phương tiện để chỉnh sửa MDX và các truy vấn XMLA thô và hiển thị kết quả. Một công cụ truy vấn dòng lệnh có tên ASCMD.EXE cũng được cung cấp.
Dịch vụ báo cáo máy chủ SQL (SSRS): Đây là công cụ báo cáo dựa trên web để xuất bản báo cáo. Báo cáo có thể được xây dựng thông qua BI Development Studio (BIDS) hoặc Trình tạo báo cáo và được xuất bản lên một cổng thông tin web. Bản thân máy chủ SSRS có API dịch vụ web để quản lý máy chủ theo chương trình. Lưu ý rằng các báo cáo SSRS có thể tiêu thụ dữ liệu từ nhiều nguồn khác nhau, không chỉ SQL Server. Một công cụ dòng lệnh có tên RS.EXE được cung cấp để quản lý theo chương trình các máy chủ SSRS.
Dịch vụ tích hợp máy chủ SQL (SSIS): Đây là một công cụ ETL được cung cấp cùng với SQL Server. Về mặt kiến trúc, nó khá khác so với OWB hoặc ODI ở chỗ nó không phải là một công cụ tạo mã. Thời gian chạy nằm ở phía máy khách và có thể nằm trên một máy riêng biệt với máy chủ cơ sở dữ liệu. Các gói SSIS có thể được phát triển với BIDS và được thực thi độc lập với công cụ dòng lệnh có tên DTEXEC.EXE.
BI Development Studio (BIDS): Đây là một phòng thu trực quan dựa trên môi trường để phát triển các báo cáo, các gói SSIS và các khối SSAS. Nếu công cụ phát triển dựa trên VS khác được cài đặt (ví dụ: VS Professional), công cụ có thể được tích hợp vào một môi trường duy nhất và nhóm dự án chung.
Bản sao hàng loạt (BCP): Công cụ chèn / trích xuất hàng loạt dòng lệnh tương tự như SQL * Loader
SQLCMD: Công cụ truy vấn dòng lệnh tương tự như SQL * plus
SQL Profiler: Một công cụ theo dõi và định hình có thể nắm bắt và đánh giá thông tin theo dõi từ SQL Server, SSAS và các công cụ khác trong bộ công cụ.
SQL Server Agent: Một tiện ích lập lịch công việc có thể chạy các công việc định kỳ của một loại khác.
TRUNCATE TABLE ...
cùng với DML mà không phải thực hiện tương đương EXECUTE IMMEDIATE
. Trong T-SQL, bạn cũng có thể trả về các tập kết quả cho máy khách bằng cách sử dụng SELECT
cùng với các hoạt động khác, trong khi đó trong PL / SQL, bạn phải hướng đầu ra của SELECT
s vào một bảng hoặc đích khác. Trong Oracle, chỉ SQL thuần có thể trả về một tập kết quả cho máy khách.
Sản phẩm chính của chúng tôi hoạt động trên cả SQL Server và Oracle, đây là một số khác biệt khác mà chúng tôi phải xử lý và có thể nên ghi nhớ:
Xử lý thời gian rất khác nhau: các quy tắc khác nhau, tập hợp các chức năng khác nhau để làm việc với
Chuỗi rỗng là NULL trong Oracle, không phải trong SQL Server
Việc xử lý mã hóa ký tự và Unicode rất khác nhau. Trong SQL Server, bạn có thể có các cột bình thường ( varchar
) hoặc Unicode ( nvarchar
) được trộn trong cùng một cơ sở dữ liệu, trong Oracle bạn quyết định ở cấp cơ sở dữ liệu sẽ sử dụng loại mã hóa nào.