Là một DBA, tôi sẽ chuyển đổi từ Oracle sang SQL Server như thế nào?


32

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.


3
một chút hài hước (xin lỗi nếu OT), bạn đã gặp chưa? dba.stackexchange.com/questions/9765/ từ
booyaa

Câu trả lời:


49

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 BYkhoản không có một CUBEnhà đ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 INTOtrong 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, USERDBAquan đ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.


1
Trên T-SQL so với PL / SQL: T-SQL không có các bối cảnh lập trình khác nhau như PL / SQL, vì vậy bạn có thể tự do trộn các câu lệnh SQL và T-SQL thuần túy. Ví dụ: bạn có thể chạy 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 SELECTcù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 SELECTs 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.
Nick Chammas

1
Cũng lưu ý rằng các quy trình được lưu trữ có tên bắt đầu bằng "sp_" được xử lý đặc biệt. Đừng đặt tên cho các kho lưu trữ của bạn như thế, trừ khi bạn đang nhập một thủ tục hệ thống từ một phiên bản mới hơn của máy chủ SQL. Về mặt kỹ thuật, bạn có thể sử dụng điều này để tạo các thủ tục lưu trữ trên cơ sở dữ liệu, nhưng điều đó không được đề xuất, bởi vì các phiên bản trong tương lai có thể tạo ra một thủ tục lưu trữ hệ thống mới có cùng tên.
Kevin Cathcart

1
Có đáng để thêm một chút về leo thang khóa ở đây? Tôi nghĩ rằng sẽ rất ngạc nhiên khi dân gian Oracle có thể sử dụng các khóa cấp hàng không giới hạn
Jack Douglas

8

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.


Oracle cũng cho phép trộn các loại char / varchar2 và nchar / nvarchar2 với hai bảng mã khác nhau - xem các ký tự Unicode có thể được lưu trữ trong cơ sở dữ liệu Oracle theo hai cách .
George3
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.