Tôi muốn xóa một số lược đồ không sử dụng trên DB oracle của chúng tôi.
Làm cách nào để tôi có thể truy vấn cho tất cả các tên lược đồ?
Tôi muốn xóa một số lược đồ không sử dụng trên DB oracle của chúng tôi.
Làm cách nào để tôi có thể truy vấn cho tất cả các tên lược đồ?
Câu trả lời:
Sử dụng sqlplus
sqlplus / as sysdba
chạy:
LỰA CHỌN * FROM dba_users
Nếu bạn chỉ muốn tên người dùng làm như sau:
Chọn tên người dùng FROM dba_users
Rất có thể, bạn muốn
SELECT username
FROM dba_users
Điều đó sẽ hiển thị cho bạn 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 một giản đồ trống, đó là điều bạn muốn. Tuy nhiên, có thể có sự khác biệt về ngữ nghĩa khi mọi người chỉ muốn gọi một thứ gì đó là 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 là
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 đó đã không đúng cho một người sử dụng một tổ chức phi hệ thống default_tablespace
của SYSTEM
, mặc dù, vì vậy 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 đồ Oracle-giao theo cách này.
select distinct owner from dba_objects
?
SELECT username FROM all_users ORDER BY username;
dba_users
(ví dụ: lỗi ORA-00942 : table or view does not exist
)
select distinct owner
from dba_segments
where owner in (select username from dba_users where default_tablespace not in ('SYSTEM','SYSAUX'));
Làm thế nào về :
SQL> select * from all_users;
nó sẽ trả về danh sách tất cả người dùng / lược đồ, ID của họ và ngày được tạo trong DB:
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1 120 09-SEP-15
SCHEMA2 119 09-SEP-15
SCHEMA3 118 09-SEP-15
Dưới đây sql liệt kê tất cả lược đồ trong oracle được tạo sau khi cài đặt ORACLE_MAINTAINED = 'N' là bộ lọc. Cột này là mới trong 12c.
chọn tên người dùng riêng biệt, ORACLE_MAINTAINED từ dba_users trong đó ORACLE_MAINTAINED = 'N';
Một trong các SQL sau sẽ trả về tất cả lược đồ trong Oracle DB.
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;