2011-01-28 31 views
66

Tôi muốn xóa một số lược đồ không sử dụng trên DB của chúng tôi.Truy vấn SQL Oracle để liệt kê tất cả các lược đồ trong một DB

Tôi làm cách nào để truy vấn tất cả các tên lược đồ?

+1

định nghĩa lại "không sử dụng" là gì? – APC

+0

Tôi đang làm việc trên một dự án datamigration và mọi nhà phát triển đều có bộ lược đồ riêng của họ.(Một số nhà phát triển đã để lại và một số bộ lược đồ không còn được sử dụng nữa). – vicsz

Trả lời

99

dùng sqlplus

sqlplus/as sysdba

chạy:

 
SELECT * 
FROM dba_users 

nên bạn chỉ muốn tên người dùng thực hiện như sau:

 
SELECT username 
FROM dba_users 
+1

Đảm bảo rằng bạn có quyền đối với người dùng của mình. – diagonalbatman

+1

Đủ tốt, +1 để trả lời trước. – vicsz

+2

@Andy: đó là lý do tại sao tôi đã viết "là người dùng đặc quyền";) –

54

Nhiều khả năng, bạn muốn

SELECT username 
    FROM dba_users 

Điều đó sẽ cho bạn thấy tất cả người dùng trong hệ thống (và do đó tất cả các lược đồ tiềm năng). Nếu định nghĩa của bạn về "lược đồ" cho phép lược đồ trống, đó là những gì bạn muốn. Tuy nhiên, có thể có một sự khác biệt ngữ nghĩa nơi mọi người chỉ muốn gọi một cái gì đó một lược đồ nếu nó thực sự sở hữu ít nhất một đối tượng để hàng trăm tài khoản người dùng sẽ không bao giờ sở hữu bất kỳ đối tượng nào bị loại trừ. Trong trường hợp đó

SELECT username 
    FROM dba_users u 
WHERE EXISTS (
    SELECT 1 
     FROM dba_objects o 
    WHERE o.owner = u.username) 

Giả sử rằng bất cứ ai tạo ra các lược đồ là hợp lý về giao tablespaces mặc định và giả định rằng bạn không quan tâm đến schemas rằng Oracle đã cung cấp, bạn có thể lọc ra những schemas bằng cách thêm các vị từ trên default_tablespace, tức là

SELECT username 
    FROM dba_users 
WHERE default_tablespace not in ('SYSTEM','SYSAUX') 

hoặc

SELECT username 
    FROM dba_users u 
WHERE EXISTS (
    SELECT 1 
     FROM dba_objects o 
    WHERE o.owner = u.username) 
    AND default_tablespace not in ('SYSTEM','SYSAUX') 

Nó không phải là khủng khiếp lạ khi đi qua một hệ thống mà ai đó có tuy nhiên, không được cung cấp cho người dùng không có hệ thống một số không đúng là default_tablespace của SYSTEM, do đó hãy chắc chắn rằng các giả định giữ trước khi cố gắng lọc ra các lược đồ được Oracle phân phối theo cách này.

+0

Kết hợp điều này với vị từ của truy vấn FeRtoll và bạn sẽ có một truy vấn khá an toàn (không có khả năng cobber SYS hoặc SYSTEM). – Karl

+1

Điều này khác với 'chọn chủ sở hữu riêng biệt từ dba_objects' như thế nào? –

+1

Cũng trên một cá thể Oracle sạch, truy vấn của bạn, @David, mang lại một chủ sở hữu PUBLIC bổ sung – perlyking

7
select distinct owner 
from dba_segments 
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX')); 
+0

Như tôi đã hiểu, truy vấn này sẽ hiển thị tất cả các lược đồ có chứa bất kỳ bảng nào. Có đúng không? –

+1

Điều này sẽ chỉ hoạt động đáng tin cậy trong các phiên bản cũ hơn của Oracle. Với việc tạo phân đoạn trì hoãn, có thể có một đối tượng không có phân đoạn. –

21
SELECT username FROM all_users ORDER BY username; 
+0

Rất hữu ích nếu người dùng của bạn không có đặc quyền trên 'dba_users' (ví dụ: lỗi' ORA-00942: bảng hoặc chế độ xem không tồn tại') – Dinei

+0

nhưng là kết quả tương tự giữa dba_users và all_users? – Shinchan

2

Làm thế nào về:

SQL> select * from all_users; 

nó sẽ trở lại danh sách tất cả người dùng/schemas, ID của họ và ngày tạo trong DB:

USERNAME       USER_ID CREATED 
------------------------------ ---------- --------- 
SCHEMA1       120 09-SEP-15 
SCHEMA2       119 09-SEP-15 
SCHEMA3       118 09-SEP-15 
1

Dưới đây danh sách sql tất cả các lược đồ trong oracle được tạo sau khi cài đặt ORACLE_MAINTAINED = 'N' là bộ lọc. Cột này mới trong 12c.

select distinct username,ORACLE_MAINTAINED from dba_users where ORACLE_MAINTAINED='N';
0

Một trong hai SQL sau sẽ trả về tất cả lược đồ trong Oracle DB.

  1. select owner FROM all_tables group by owner;
  2. select distinct owner FROM all_tables;
+0

Có thể có các lược đồ chỉ có các đối tượng không phải bảng trong đó các truy vấn của bạn sẽ không liệt kê. –

Các vấn đề liên quan