Sơ thẩm và cơ sở dữ liệu (Oracle vs SQL Server)


7

Tôi đã sử dụng Oracle cho đến nay, trong đó:

  • ví dụ -> tiến trình + bộ nhớ
  • cơ sở dữ liệu -> dữ liệu vật lý

Thông thường một bản đồ ánh xạ tới một cơ sở dữ liệu. Bên trong một cơ sở dữ liệu, có thể có nhiều không gian bảng (hệ thống, người dùng, v.v.).

Tuy nhiên, tôi không chắc lắm về máy chủ SQL. Dường như với tôi rằng đối với SQL Server, một thể hiện = nhiều cơ sở dữ liệu? Hoặc một ví dụ = nhiều lược đồ?

Trong Oracle, một cơ sở dữ liệu chứa hệ thống, sysaux, không gian bảng tạm thời và không gian bảng người dùng. Nói tóm lại, cả hệ thống và người dùng đều ở trong cùng một cơ sở dữ liệu.

Trong SQL Server, có vẻ như có một cơ sở dữ liệu hệ thống và có thể phục vụ nhiều cơ sở dữ liệu người dùng?


Bài đăng này có thể hữu ích.
Vérace

không hẳn Tôi biết ý nghĩa của nó trong orory, nhưng tôi đang hỏi về máy chủ sql - cơ sở dữ liệu hệ thống phục vụ nhiều cơ sở dữ liệu người dùng.
tiongmaru

Hmm ... Bạn đã viết "Thông thường một bản đồ cho một cơ sở dữ liệu". Đây không phải là trường hợp - người ta có thể có nhiều cơ sở dữ liệu (tức là lược đồ) được liên kết với một thể hiện. Điều này không rõ ràng từ câu hỏi của bạn. Đúng là trên nhiều hệ thống sản xuất, cá thể chỉ có thể đang chạy một lược đồ (ví dụ như Oracle Business Suite).
Vérace

nhảy vọt một bản đồ đến một cơ sở dữ liệu trong nhà tiên tri. Trong một cơ sở dữ liệu, có thể có nhiều lược đồ. nhưng trong máy chủ SQL, có vẻ như một trường hợp có thể có nhiều cơ sở dữ liệu
tiongmaru

Lược đồ là một cơ sở dữ liệu vì hầu hết mọi người đều hiểu khái niệm này - tức là một tập hợp các bảng được liên kết (với các mối quan hệ FK và ACID). FK và ACID không được hỗ trợ giữa các lược đồ khác nhau trên cùng một ví dụ - ergo chúng là "cơ sở dữ liệu" (theo cách hiểu của giáo dân). Chúng tôi có thể nhảy múa quanh đầu một cái ghim ở đây, nhưng tôi nghĩ thật tốt khi những vấn đề này được làm rõ.
Vérace

Câu trả lời:


17

Tôi là một DBA trên Oracle và SQL Server.

Sự nhầm lẫn này là do sự không phù hợp về ngữ nghĩa và một cấp độ bổ sung trong hệ thống phân cấp của SQL Server nhưng còn hơn thế nữa!

Lưu ý rằng chúng ta sẽ chỉ nói về cơ sở dữ liệu cá thể trong cả hai trường hợp (ý định chơi chữ).

Trường hợp

Trong Oracle, một cá thể sẽ có một lượng bộ nhớ được phân bổ cho nó (SGA / PGA) và các quá trình được sinh ra (smon, pmon dw0X, v.v.). Có các chế độ xem hệ thống để giám sát tất cả nội dung sẽ được tạo và sử dụng (V $ và dba_ lượt xem).

Đây là cấu trúc mà chúng ta quen thuộc trong nhà tiên tri.

Và bạn đã đề cập đến nó, cơ sở dữ liệu là nơi chứa các tệp vật lý. Thông thường di chuyển đến RAC làm cho sự khác biệt rõ ràng.

Trong SQL Server, cá thể hoạt động theo cùng một cách: Một loạt bộ nhớ được phân bổ và có các khung nhìn hệ thống (sys.) Để giám sát tất cả những thứ đó.

Ví dụ có 4 cơ sở dữ liệu hệ thống:

  1. hệ thống trong đó các hệ thống xem.
  2. cơ sở dữ liệu msdb cũng chứa thông tin liên quan đến hệ thống. Thông thường đó là nơi bạn sẽ tìm thấy dữ liệu liên quan đến bản sao lưu của mình. Một chút bảo trì được yêu cầu trên đó ít nhất là để xóa các bản ghi sao lưu cũ.
  3. mô hình, cơ sở dữ liệu được đặt tên khéo léo được sử dụng làm mô hình cho mọi cơ sở dữ liệu mới mà bạn sẽ tạo. Đó là một ý tưởng tốt để sửa đổi cài đặt tệp dữ liệu (tự động mở rộng, kích thước ban đầu, chế độ sao lưu) để tất cả cơ sở dữ liệu mới được hưởng lợi từ nó.
  4. tempdb được phát triển dưới đây.

Cơ sở dữ liệu hệ thống chứa thông tin dữ liệu meta cho mọi cơ sở dữ liệu khác trên SQL Server.

Không gian tạm thời

Trong Oracle:

Không gian bảng tạm thời (tạo không gian bảng tạm thời). Trong orory, không gian bảng tạm thời là vùng tràn cho các hoạt động không thể phù hợp với PGA (bộ nhớ xử lý, mặc định là 200M (tối đa 11g), ví dụ tham gia băm của bạn nếu tràn hơn 200M trong không gian bảng tạm thời, nói chung đó là nguyên nhân truy vấn thực hiện chậm).

Trong SQL Server, có một cơ sở dữ liệu tempdb nằm trong phần "cơ sở dữ liệu hệ thống" và nó được sử dụng rất tích cực, nhiều hơn so với trong nhà tiên tri. Đặt nó trên các đĩa rất nhanh (SSD hoặc sợi đến với tâm trí)

Do đó, sự khác biệt lớn thứ 2:

Các đối tượng

Trong máy chủ SQL:

Các đối tượng (bảng, khung nhìn), không bị ràng buộc với người dùng như trong nhà tiên tri, mà là "cơ sở dữ liệu". "Cơ sở dữ liệu" giữ (không sở hữu), các đối tượng. Tại thời điểm tạo cơ sở dữ liệu, một tệp dữ liệu được đề cập để lưu trữ các đối tượng này.

Trong lời tiên tri:

Một người dùng tạo các đối tượng sẽ hạ cánh trong một lược đồ cùng tên. Đặt tên người dùng cẩn thận trở nên quan trọng.

Và đây là sự khác biệt lớn thứ 3:

Bảo vệ

Trong lời tiên tri:

Người dùng sẽ được tạo và họ sẽ được trao quyền ít nhất là tạo phiên để họ có thể truy cập các đối tượng mà họ đã được phép. Hoặc, họ sẽ có quyền tạo các đối tượng trong lược đồ riêng (vai trò tài nguyên), sau đó sẽ tạo một lược đồ trong tên đó.

Bạn có thể chọn và đó là một cách thực hành tốt, để tạo một không gian bảng và biến nó thành mặc định cho mỗi người dùng có thể tạo các đối tượng. Nếu điều đó không được thực hiện, một không gian bảng mặc định sẽ được sử dụng, thường là "USER_DATA".

Trong máy chủ SQL:

Vì các đối tượng không được sở hữu bởi một người dùng cụ thể trong một lược đồ, trước tiên người dùng phải được tạo, sau đó đặc quyền được gán. Thông thường, bất cứ ai sẽ là người dùng chính thực hiện việc tạo đối tượng sẽ được cấp vai trò "chủ sở hữu" trên cơ sở dữ liệu nhất định.

Người dùng đó trong SQL Server sẽ tương đương với lời tiên tri của chủ sở hữu lược đồ nhưng có thể có nhiều hơn một chủ sở hữu.

Bảo mật là nơi SQL Server tỏa sáng trên Oracle: Bảo mật SQL Server có thể được gắn với Active Directory để quản lý người dùng máy tính để bàn. Những người dùng máy tính để bàn này có thể được gắn với một nhóm người dùng nói "chỉ đọc". Có thể thêm nhóm thư mục hoạt động đó vào SQL Server và cấp cho nó quyền truy cập "chỉ đọc" vào cơ sở dữ liệu của bạn.

Khi người dùng rời khỏi công ty của bạn, Quản trị viên Active Directory sẽ xóa người dùng đó và quyền truy cập vào cơ sở dữ liệu cũng bị mất.

Oracle có thể sử dụng LDAP nhưng hãy đối mặt, nó không thường xuyên bị ràng buộc với người dùng máy tính để bàn windows.

Sự khác biệt lớn thứ 4.

Ngữ nghĩa

SQL Server có thêm một lớp. Trong cơ sở dữ liệu SQL Server, các đối tượng có thể được tổ chức trong các lược đồ. Các lược đồ có thể có chủ sở hữu quá. Nó cũng giới thiệu bảo mật hạt tốt hơn nhưng trong khi nó được sử dụng, nó không phổ biến. Tôi muốn nói rằng cũng nên thực hành tốt để nhóm các đối tượng của bạn theo lược đồ ngay từ giai đoạn phát triển để hưởng lợi sau này từ các khả năng bảo mật bổ sung khi cần.

Nhật ký / Nhật ký lưu trữ

Cuối cùng các bản ghi lưu trữ hoạt động khác nhau trong oracle và SQL Server. SQL Server có một tệp nhật ký được tạo cho mỗi cơ sở dữ liệu, trong khi oracle có chế độ nhật ký lưu trữ được bật ở cấp thể hiện.

Đây là nơi dòng làm mờ. Đối với một số khía cạnh, cơ sở dữ liệu của SQL Server thực sự là cơ sở dữ liệu. Trong các trường hợp khác, chúng trông giống như lược đồ.

Lưu trữ trong máy chủ SQL được đặt với chế độ sao lưu tùy chọn được đặt thành đầy đủ. Sau đó, chúng được lưu trữ bằng cách thực hiện sao lưu nhật ký. Sao lưu nhật ký sẽ yêu cầu sao lưu toàn bộ diễn ra trước khi nó bắt đầu hoạt động.

Trong Oracle, các bản ghi lưu trữ được lưu trữ tự động, sau đó chúng tôi sao lưu chúng vào một vị trí từ xa.

Tóm lược

Oracle:

Instance->User1->Schema1(named User1)->Tablespace1
                                     ->Tablespace2
        ->User2->Schema2(named User2)->Tablespace3
        ->User3->Granted "read only"->schema2.table1

Máy chủ SQL:

Instance->Database1->Schema1
        ->Database2->Schema2
        ->User1
        ->User2

        ->User1->Granted "owner"->Database1
        ->User2->Granted "read only"->Database2->Schema2

Đây là những điều mà tôi nghĩ đến khi so sánh cả hai. Tôi rất thích nghe thêm từ những người khác và thêm vào / sửa câu trả lời này.

Ngoài ra tôi không có một sở thích cụ thể cho một trong hai. Tôi nghĩ cả hai đều làm rất tốt và tôi rất thích làm việc với cả hai.


Câu trả lời chính xác! Tôi đã từng dạy máy chủ SQL tìm kiếm các DBA và họ luôn thấy "lớp thêm" rất khó hiểu.
spaghettidba

giải thích tuyệt vời, vì vậy "cơ sở dữ liệu hệ thống" đang giữ siêu dữ liệu cho không chỉ 1 cơ sở dữ liệu người dùng, mà là bội số của chúng?
tiongmaru

Chính xác. Cụ thể, cơ sở dữ liệu hệ thống chủ chứa siêu dữ liệu cho cơ sở dữ liệu, thông tin đăng nhập, cấu hình cá thể và mọi đối tượng mức cá thể khác. Msdb giữ cấu hình cho tác nhân máy chủ SQL (bộ lập lịch) và các tính năng không liên quan khác.
spaghettidba

Vâng. Tôi mới nhận ra rằng tôi hoàn toàn quên thêm SQL Server Agent, thứ rất trung tâm trong SQL Server. Cũng quên nói về các thủ tục cũng được ưa chuộng trong SQL Server. Sẽ thêm những thứ này sau.
Nicolas de Fontenay

@tiongmaru điều đó đúng.
Nicolas de Fontenay

5

Tôi không biết Oracle nhưng tôi sẽ làm rõ ý nghĩa của nó trong SQL Server.

Trên một Windows Server có thể có nhiều phiên bản SQL Server (cài đặt độc lập).

Mỗi trường hợp có cơ sở dữ liệu riêng (cơ sở dữ liệu người dùng và cơ sở dữ liệu hệ thống).

Điều quan trọng cần biết là mỗi phiên bản có cơ sở dữ liệu hệ thống riêng (master, model, msdb, tempdb). Các phiên bản có thể sử dụng các phiên bản, phiên bản SQL Server khác nhau và có các sản phẩm khác nhau được cài đặt.

Một số thành phần Máy chủ SQL được chia sẻ giữa các phiên bản trên một máy chủ (ví dụ Trình duyệt SQL).

Để truy cập thể hiện A từ phiên bản B, bạn phải tạo một máy chủ được liên kết trên phiên bản B ánh xạ tới phiên bản A. Bạn cũng có thể kết nối SQL Server với Oracle bằng cơ chế này.

Mỗi cơ sở dữ liệu có thể có nhiều lược đồ. Các lược đồ nhóm bảng, thủ tục, khung nhìn và các đối tượng cơ sở dữ liệu khác.


cảm ơn đã trả lời, tôi đã chỉnh sửa câu hỏi chính của mình, xin hãy xem
tiongmaru

5

Thỉnh thoảng một bức tranh có giá trị hàng ngàn chữ: Trường hợp máy chủ SQL

Trong SQL Server, một cá thể đại diện cho một cài đặt duy nhất của sản phẩm và chạy như một quy trình máy chủ duy nhất. Mỗi máy có thể lưu trữ nhiều phiên bản của SQL Server.

Mỗi trường hợp có:

  1. Các tệp nhị phân riêng của nó (trong Oracle bạn có thể chạy nhiều cơ sở dữ liệu với cùng các tệp nhị phân). Điều này cũng có nghĩa là mỗi phiên bản có thể là một phiên bản / phiên bản khác nhau của SQL Server.
  2. Quá trình máy chủ của riêng nó
  3. Một bộ cơ sở dữ liệu hệ thống (chính, mô hình, msdb và tempdb)
  4. Cấu hình riêng của nó (dịch vụ, khóa đăng ký ...)

Thật vậy, một bức ảnh nói lên hàng ngàn từ ... thực sự .. tôi cũng có thể nói trong trường hợp đó, để có một bản sao lưu / phục hồi nhất quán, tôi sẽ cần sao lưu cơ sở dữ liệu "hệ thống" cùng với "cơ sở dữ liệu người dùng"?
tiongmaru

Mỗi cơ sở dữ liệu đều nhất quán: các tệp dữ liệu riêng biệt, tệp nhật ký giao dịch riêng biệt, sao lưu riêng biệt, v.v. Nếu toàn bộ phiên bản bị lỗi phần cứng và phải được phục hồi, bạn sẽ cần sao lưu cho mọi cơ sở dữ liệu, bao gồm cả hệ thống. Ngoại lệ duy nhất là tempdb, không thể sao lưu cũng không được khôi phục
spaghettidba

xin lỗi, nhưng tôi nghĩ cơ sở dữ liệu hệ thống chứa siêu dữ liệu về cơ sở dữ liệu người dùng? vì vậy nếu tôi có cơ sở dữ liệu hệ thống sao lưu và cơ sở dữ liệu người dùng vào ngày 1, hãy tạo một cơ sở dữ liệu người dùng khác vào ngày 2 và sao lưu cơ sở dữ liệu người dùng2 vào ngày 3. giả sử vào ngày thứ 4 có lỗi và cần phải khôi phục cơ sở dữ liệu người dùng2. Tôi có thể khôi phục sao lưu cơ sở dữ liệu người dùng cùng với sao lưu cơ sở dữ liệu hệ thống day1 không?
tiongmaru

Đó không chỉ là siêu dữ liệu. Cơ sở dữ liệu hệ thống cũng chứa dữ liệu cấu hình cho phiên bản và các tính năng khác, chẳng hạn như tác nhân máy chủ SQL. Cơ sở dữ liệu có thể được sao lưu và khôi phục độc lập, vì vậy nếu bạn có bản sao lưu cơ sở dữ liệu hệ thống từ ngày 1 và sao lưu cơ sở dữ liệu người dùng từ ngày 2, bạn có thể khôi phục chúng một cách độc lập. Khôi phục cơ sở dữ liệu người dùng cũng tạo siêu dữ liệu của nó nếu thiếu.
spaghettidba

Vì vậy, chúng tôi có thể khôi phục cơ sở dữ liệu người dùng với cơ sở dữ liệu hệ thống hoàn toàn cũ / không liên quan / mới?
tiongmaru

0

IMHO, so sánh tốt nhất sẽ là với Oracle 12c. Trong Oracle 12c, cơ sở dữ liệu giống như một phiên bản SQL Server và mỗi vùng chứa trong cơ sở dữ liệu 12c đó sẽ giống như một cơ sở dữ liệu SQL Server. Trong cả Oracle 12c với các container và SQL Server, bạn có thể tách một container hoặc cơ sở dữ liệu và gắn lại nó vào một thể hiện hoặc cơ sở dữ liệu khác. Một sự khác biệt thực sự là với SQL Server, bạn có thể tạo bao nhiêu cơ sở dữ liệu trong một trường hợp mà bạn muốn. Nhưng nếu bạn muốn tạo container trong Oracle 12c, bạn cần trả tiền cho tính năng container. Bạn cũng có thể cần phải có Doanh nghiệp.

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.