Làm thế nào để xem danh sách các cơ sở dữ liệu trong Oracle?


33

Có một SHOW DATABASEStuyên bố tương đương với MySQL ?

Có thể tìm thấy cơ sở dữ liệu trong một cụm? tức là cơ sở dữ liệu hiện diện trên mạng trên một số hệ thống khác?

Tôi có thể phân tích các tệp có trong bản cài đặt của Oracle để tìm cùng không?

Được cung cấp thông tin truy cập đầy đủ cho một hệ thống Oracle, làm thế nào bạn có thể liệt kê tất cả các cơ sở dữ liệu tồn tại?


4
Lưu ý rằng có một sự không phù hợp về thuật ngữ giữa MySQL và Cơ sở dữ liệu Oracle. Về mặt kiến ​​trúc, Oracle có bảng-> lược đồ-> cơ sở dữ liệu, đồng thời cũng có bảng-> không gian bảng-> cơ sở dữ liệu. MySQL chỉ đơn giản là bảng-> cơ sở dữ liệu. Vì vậy, có thể bạn đang thực sự tìm kiếm danh sách lược đồ Oracle (think: không gian tên SQL cho các bảng) hoặc danh sách không gian bảng của Oracle (think: nhóm các tệp OS cho các bảng).
kubanchot

Câu trả lời:


22

Có một SHOW DATABASEStuyên bố tương đương với MySQL ?

Không có những điều như vậy. Bạn có thể truy vấn người nghe trên một máy ( lsnrctl status) để xem những dịch vụ nào được đăng ký ở đó, nhưng điều đó không ánh xạ một đến một cơ sở dữ liệu (và có thể có nhiều người nghe trên cùng một máy). Mặt khác, các công cụ thường được sử dụng kết nối với một thể hiện cơ sở dữ liệu và một thể hiện thuộc về một cơ sở dữ liệu.

Nếu bạn đang nói về các cụm RAC của Oracle, thì mỗi trường hợp sẽ biết về các đồng nghiệp của nó (các phiên bản khác phục vụ cùng một cơ sở dữ liệu) và bạn có thể tìm thấy các phiên bản khác hiện đang bắt đầu cho cơ sở dữ liệu đó bằng cách sử dụng gv$instancechế độ xem.
Bạn cũng có thể sử dụng crsctltiện ích để liệt kê các dịch vụ (bao gồm cả cơ sở dữ liệu) đã được đăng ký trong cụm và trạng thái của chúng.
Nếu bạn đang nói về phần mềm phân cụm của nhà cung cấp khác, tôi khá chắc chắn rằng tất cả họ đều có các loại tiện ích quản lý tài nguyên này để truy vấn.

Nếu bạn đang nói về một loạt các máy móc thì không, không có cách nào đáng tin cậy 100% để liệt kê tất cả các cơ sở dữ liệu trên mạng.

Để tìm cơ sở dữ liệu đang hoạt động (tức là đã bắt đầu), hãy tìm các *_pmon_*quy trình trên Unix (có một cơ sở dữ liệu trên mỗi phiên bản cơ sở dữ liệu) và các dịch vụ Oracle trên Windows.

Để xác định vị trí cài đặt phần mềm cơ sở dữ liệu Oracle, hãy xem /etc/oratabtrên Unix. Điều này sẽ chứa tất cả các ORACLE_HOMEcài đặt. Bạn có thể nhìn vào bên trong mỗi người trong số những người $ORACLE_HOME/dbscho spfile<SID>.oravà / hoặc init<SID>.orafile - sẽ có một cho mỗi cơ sở dữ liệu.

(Tôi tin rằng bạn có thể tìm thấy thông tin tương đương oratabtrong các khóa đăng ký Windows bên dưới HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE, nhưng tôi không biết cấu trúc của nó.)

Tất nhiên, bây giờ, nếu bạn đã đăng ký tất cả cơ sở dữ liệu của mình với máy chủ OEM (Enterprise Manager) khi bạn cài đặt chúng, bạn có thể tìm thấy danh sách đầy đủ ở đó - nhưng tôi đoán nếu bạn hỏi đó không phải là trường hợp.


12

Oracle không có cơ sở dữ liệu nào ngoài các lược đồ, bạn có thể liệt kê chúng với

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

hoặc thứ gì đó giống thế này :

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

2
Các không gian bảng không được liên kết với các lược đồ nói chung.
Mat

2
TẤT CẢ NGƯỜI DÙNG? USER_TABLESPACES?
kubanchot

"Có câu nào tương đương với câu lệnh MySQL SHOW DATABASES không?" tôi đang cố gắng trả lời câu hỏi đó đừng nói bạn không biết
DevYudh

1
@DevYudh: một không gian bảng trong Oracle là một cái gì đó hoàn toàn khác với một "cơ sở dữ liệu" trong MySQL. Truy vấn đầu tiên nếu đúng, truy vấn thứ hai hoàn toàn sai
a_horse_with_no_name

11

Nói một cách đơn giản, không có sự tương tự trực tiếp nào đối với 'cơ sở dữ liệu' của MySQL hoặc 'cụm' trên Oracle: trận đấu gần nhất là một 'lược đồ' nhưng điều đó vẫn rất khác nhau.

Điều này rõ ràng sẽ thay đổi trong 12c với việc giới thiệu cơ sở dữ liệu có thể cắm được:

Phân chia các hoạt động cơ sở dữ liệu rõ ràng từ nội dung của người dùng là một chuyển đổi chính từ các kiến ​​trúc cơ sở dữ liệu truyền thống. Oracle 11g và tất cả những người tiền nhiệm của nó chỉ có thể chạy một cơ sở dữ liệu tại một thời điểm, Kyte nói. Nếu một tổ chức muốn chạy nhiều cơ sở dữ liệu trên một máy chủ, thì nó sẽ cần chạy nhiều phiên bản của Oracle 11g, một phiên bản cho mỗi cơ sở dữ liệu. Như tên của nó, cơ sở dữ liệu có thể cắm cho phép nhiều cơ sở dữ liệu người thuê chạy dưới một bản sao của Oracle 12c.


Uh tuyệt vời, phức tạp hơn, bảo mật công việc nhiều hơn ...
kubanchot

6

Tôi nghĩ rằng một câu trả lời cho các trình duyệt trong tương lai trên * nix có thể là:

mèo / etc / oratab


3

Chỉ cần kết nối với ASM và kiểm tra cơ sở dữ liệu khách hàng.

set pages 999 lines 120
col SOFTWARE_VERSION for A15
col INSTANCE_NAME for A20
col DB_NAME for A20 trunc
select INSTANCE_NAME, DB_NAME, STATUS, SOFTWARE_VERSION as "version"
from  V$ASM_CLIENT;

1
Điều này giả định ASM đang được sử dụng! Điều gì về cơ sở dữ liệu được lưu trữ trên một hệ thống tập tin hoặc SAN?
Colin 't Hart

3

Nếu bạn có Cơ sở dữ liệu Pluggable (được khuyến nghị) trên Oracle 12, bạn có thể thực hiện như sau:

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;

0

Đối với cơ sở dữ liệu độc lập để có được danh sách các cơ sở dữ liệu được khởi động tự động sau khi khởi động lại máy chủ:

cat /etc/oratab | grep -i ":y" | grep -v "^#"

hoặc chỉ để có được danh sách tất cả các cơ sở dữ liệu:

cat /etc/oratab | grep -v "^#"

Đối với cơ sở dữ liệu RAC, phương pháp sau đây có thể hữu ích:

crsctl stat res -t | grep "\.db"

Ngoài ra, nó đã được đề cập đến cơ sở dữ liệu trong MySQL không giống như cơ sở dữ liệu trong Oracle. Trong Oracle, nó gần với lược đồ hơn - được đặt tên là container cho các đối tượng người dùng. Để có được danh sách lược đồ, bạn có thể sử dụng câu lệnh SQL sau:

select username from dba_users order by 1;

hoặc để có được danh sách không phải là các lược đồ liên quan đến hệ thống (có sẵn trong Oracle RDBMS bắt đầu từ phiên bản 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
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.