ฉันต้องการลบสคีมาที่ไม่ได้ใช้ใน Oracle DB ของเรา
ฉันจะค้นหาชื่อสคีมาทั้งหมดได้อย่างไร
ฉันต้องการลบสคีมาที่ไม่ได้ใช้ใน Oracle DB ของเรา
ฉันจะค้นหาชื่อสคีมาทั้งหมดได้อย่างไร
คำตอบ:
ใช้ sqlplus
sqlplus / เป็น sysdba
วิ่ง:
เลือก * จาก dba_users
หากคุณต้องการให้เฉพาะชื่อผู้ใช้ทำสิ่งต่อไปนี้:
เลือกชื่อผู้ใช้ จาก dba_users
เป็นไปได้มากที่คุณต้องการ
SELECT username
FROM dba_users
ซึ่งจะแสดงให้คุณเห็นผู้ใช้ทั้งหมดในระบบ (และสคีมาที่เป็นไปได้ทั้งหมด) หากคำจำกัดความของ "สคีมา" ทำให้สคีมาว่างเปล่านั่นคือสิ่งที่คุณต้องการ อย่างไรก็ตามอาจมีความแตกต่างทางความหมายที่ผู้คนต้องการเรียกบางสิ่งว่าสคีมาหากเป็นเจ้าของออบเจ็กต์อย่างน้อยหนึ่งรายการจริง ๆ เพื่อให้ไม่รวมบัญชีผู้ใช้หลายร้อยบัญชีที่ไม่เคยเป็นเจ้าของวัตถุใด ๆ ในกรณีนั้น
SELECT username
FROM dba_users u
WHERE EXISTS (
SELECT 1
FROM dba_objects o
WHERE o.owner = u.username )
สมมติว่าใครก็ตามที่สร้างสกีมามีความสมเหตุสมผลเกี่ยวกับการกำหนดพื้นที่ตารางเริ่มต้นและสมมติว่าคุณไม่สนใจสคีมาที่ Oracle ส่งมอบให้คุณสามารถกรองสคีมาเหล่านั้นออกได้โดยการเพิ่มเพรดิเคตในdefault_tablespace
เช่น
SELECT username
FROM dba_users
WHERE default_tablespace not in ('SYSTEM','SYSAUX')
หรือ
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')
มันไม่ใช่เรื่องแปลกชะมัดจะเจอระบบที่มีคนรับผู้ใช้ที่ไม่ใช่ระบบไม่ถูกต้องdefault_tablespace
ของSYSTEM
แต่เพื่อให้แน่ใจว่าสมมติฐานที่ค้างไว้ก่อนที่จะพยายามที่จะกรองออกสกีมาออราเคิลส่งด้วยวิธีนี้
select distinct owner from dba_objects
อย่างไร?
SELECT username FROM all_users ORDER BY username;
dba_users
(เช่นข้อผิดพลาด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'));
เกี่ยวกับ :
SQL> select * from all_users;
มันจะส่งคืนรายชื่อผู้ใช้ / สกีมาทั้งหมด ID และวันที่ที่สร้างใน DB:
USERNAME USER_ID CREATED
------------------------------ ---------- ---------
SCHEMA1 120 09-SEP-15
SCHEMA2 119 09-SEP-15
SCHEMA3 118 09-SEP-15
ด้านล่าง sql แสดงสคีมาทั้งหมดใน oracle ที่สร้างขึ้นหลังการติดตั้ง ORACLE_MAINTAINED = 'N' คือตัวกรอง คอลัมน์นี้เป็นคอลัมน์ใหม่ใน 12c
เลือกชื่อผู้ใช้ที่แตกต่างกัน ORACLE_MAINTAINED จาก dba_users โดยที่ ORACLE_MAINTAINED = 'N';
SQL ต่อไปนี้จะส่งคืนสคีมาทั้งหมดใน Oracle DB
select owner FROM all_tables group by owner;
select distinct owner FROM all_tables;