จะดูรายการฐานข้อมูลใน Oracle ได้อย่างไร


33

เทียบเท่ากับSHOW DATABASESคำสั่งMySQL หรือไม่

เป็นไปได้หรือไม่ที่จะค้นหาฐานข้อมูลในคลัสเตอร์? ฐานข้อมูลเช่นปัจจุบันในเครือข่ายในระบบอื่น ๆ ?

ฉันสามารถวิเคราะห์ไฟล์ที่มีอยู่ในการติดตั้ง Oracle เพื่อค้นหาไฟล์เดียวกันได้หรือไม่?

ให้สิทธิ์การเข้าถึงที่สมบูรณ์ให้กับระบบ Oracle คุณจะระบุฐานข้อมูลทั้งหมดที่มีอยู่อย่างไร


4
หมายเหตุยังมีคำศัพท์ที่ไม่ตรงกันระหว่าง MySQL และ Oracle Database ในแง่ของสถาปัตยกรรม Oracle มีฐานข้อมูล table-> schema-> และในขณะเดียวกันก็มี table-> tablespace-> ฐานข้อมูล MySQL มีฐานข้อมูลแบบตาราง> ดังนั้นบางทีคุณอาจกำลังค้นหารายการสคีมาของ Oracle (คิดว่า: SQL namespaces สำหรับตาราง) หรือรายการในพื้นที่ตารางของ Oracle (think: กลุ่มของไฟล์ OS สำหรับตาราง)
kubanczyk

คำตอบ:


22

เทียบเท่ากับSHOW DATABASESคำสั่งMySQL หรือไม่

ไม่มีสิ่งนั้น คุณสามารถสืบค้นผู้ฟังบนเครื่อง ( lsnrctl status) เพื่อดูว่ามีการลงทะเบียนบริการใดบ้าง แต่ไม่ได้แมปแบบหนึ่งต่อหนึ่งกับฐานข้อมูล (และอาจมีผู้ฟังหลายคนในเครื่องเดียวกัน) มิฉะนั้นเครื่องมือที่ใช้โดยทั่วไปจะเชื่อมต่อกับอินสแตนซ์ฐานข้อมูลหนึ่งอินสแตนซ์และอินสแตนซ์นั้นเป็นของฐานข้อมูลเดียว

หากคุณกำลังพูดถึง Oracle RAC clusters แต่ละอินสแตนซ์จะรู้จักเพื่อนของมัน (อินสแตนซ์อื่น ๆ ที่ให้บริการฐานข้อมูลเดียวกัน) และคุณสามารถค้นหาอินสแตนซ์อื่น ๆ ที่เริ่มต้นในปัจจุบันสำหรับฐานข้อมูลนั้นโดยใช้gv$instanceมุมมอง
คุณยังสามารถใช้crsctlยูทิลิตี้เพื่อแสดงรายการบริการ (รวมถึงฐานข้อมูล) ที่ลงทะเบียนในคลัสเตอร์และสถานะของพวกเขา
หากคุณกำลังพูดถึงซอฟต์แวร์การจัดกลุ่มของผู้จำหน่ายรายอื่นฉันค่อนข้างแน่ใจว่าพวกเขาทุกคนมีเครื่องมือจัดการทรัพยากรประเภทนี้เพื่อสอบถาม

หากคุณกำลังพูดถึงเครื่องจักรจำนวนมากไม่เลยไม่มีวิธีที่เชื่อถือได้ 100% ในการแจกแจงฐานข้อมูลทั้งหมดในเครือข่าย

ในการค้นหาฐานข้อมูลที่ใช้งาน (เช่นเริ่มต้น) ให้ค้นหา*_pmon_*กระบวนการใน Unix (มีหนึ่งรายการต่อฐานข้อมูลอินสแตนซ์) และบริการ Oracle บน Windows

ในการค้นหาตำแหน่งการติดตั้งซอฟต์แวร์ฐานข้อมูล Oracle ให้ดูที่/etc/oratabUnix นี่ควรจะมีทั้งหมดที่ORACLE_HOMEติดตั้ง คุณสามารถดูในแต่ละของผู้ที่อยู่ใน$ORACLE_HOME/dbsสำหรับspfile<SID>.oraและ / หรือinit<SID>.oraไฟล์ - จะมีหนึ่งสำหรับแต่ละฐานข้อมูล

(ฉันเชื่อว่าคุณสามารถค้นหาข้อมูลที่เทียบเท่าได้oratabในคีย์รีจิสทรีของ Windows ด้านล่างHKEY_LOCAL_MACHINE\SOFTWARE\ORACLEแต่ฉันไม่ทราบโครงสร้างของมัน)

แน่นอนตอนนี้ถ้าคุณลงทะเบียนฐานข้อมูลทั้งหมดของคุณกับเซิร์ฟเวอร์ OEM (Enterprise Manager) เมื่อคุณติดตั้งคุณสามารถค้นหารายการทั้งหมดได้ - แต่ฉันเดาว่าถ้าคุณถามว่าไม่ใช่กรณี


12

Oracle ไม่มีฐานข้อมูล แต่มี schema คุณสามารถแสดงรายการได้

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

หรืออะไรเช่นนี้

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

2
Tablespaces ไม่ได้เชื่อมโยงกับ schema โดยทั่วไป
Mat

2
ผู้ใช้ทั้งหมด? USER_TABLESPACES?
kubanczyk

"เทียบเท่ากับคำสั่ง MySQL SHOW DATABASES หรือไม่" ฉันกำลังพยายามตอบคำถามนั้น อย่าพูดว่าคุณไม่รู้
DevYudh

1
@DevYudh กตารางใน Oracle เป็นสิ่งที่สมบูรณ์แตกต่างจาก "ฐานข้อมูล" ใน MySQL แบบสอบถามแรกถ้าถูกต้องแบบสอบถามที่สองไม่ธรรมดา
a_horse_with_no_name

11

พูดง่ายๆก็คือไม่มีการเปรียบเทียบโดยตรงสำหรับ 'ฐานข้อมูล' ของ MySQL หรือ 'คลัสเตอร์' บน Oracle: การจับคู่ที่ใกล้ที่สุดคือ 'สคีมา' แต่ก็ยังคงแตกต่างกันมาก

เห็นได้ชัดว่านี่คือการเปลี่ยนแปลงใน 12cด้วยการแนะนำของฐานข้อมูล pluggable:

การแบ่งการดำเนินงานฐานข้อมูลออกจากเนื้อหาของผู้ใช้อย่างหมดจดเป็นการเปลี่ยนแปลงครั้งใหญ่จากสถาปัตยกรรมฐานข้อมูลดั้งเดิม Oracle 11g และรุ่นก่อนทั้งหมดสามารถเรียกใช้ฐานข้อมูลได้ครั้งละหนึ่ง Kyte กล่าว หากองค์กรต้องการรันหลายฐานข้อมูลบนเซิร์ฟเวอร์เดียวองค์กรจะต้องรัน Oracle 11g หลายอินสแตนซ์หนึ่งฐานสำหรับแต่ละฐานข้อมูล ตามชื่อหมายถึงฐานข้อมูลแบบเสียบได้อนุญาตให้ฐานข้อมูลผู้เช่าหลายรายสามารถทำงานภายใต้ Oracle 12c หนึ่งสำเนา


เอ๊ะเยี่ยมมีความซับซ้อนมากขึ้นมีความปลอดภัยในการทำงานมากขึ้น ...
kubanczyk

6

ฉันคิดว่าคำตอบสำหรับเบราว์เซอร์ในอนาคตบน * ระวังอาจเป็น:

cat / etc / oratab


3

เพียงเชื่อมต่อกับ ASM และตรวจสอบฐานข้อมูลไคลเอ็นต์

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
สิ่งนี้ถือว่า ASM กำลังถูกใช้! สิ่งที่เกี่ยวกับฐานข้อมูลที่เก็บไว้ในระบบไฟล์หรือ SAN?
โคลิน 't ฮาร์ท

3

หากคุณมีฐานข้อมูลแบบเสียบได้ (แนะนำ) ใน Oracle 12 คุณสามารถทำสิ่งต่อไปนี้:

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

0

สำหรับฐานข้อมูลแบบสแตนด์อโลนเพื่อรับรายการฐานข้อมูลที่เริ่มโดยอัตโนมัติหลังจากที่โฮสต์รีบูตเครื่อง:

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

หรือเพียงเพื่อรับรายการฐานข้อมูลทั้งหมด:

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

สำหรับฐานข้อมูล RAC วิธีการต่อไปนี้จะมีประโยชน์:

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

นอกจากนี้ตามที่ได้กล่าวไปแล้วว่าฐานข้อมูลใน MySQL นั้นไม่เหมือนกับฐานข้อมูลใน Oracle ใน Oracle มันใกล้คีมามากขึ้น - นั่นคือชื่อคอนเทนเนอร์สำหรับวัตถุของผู้ใช้ ในการรับรายการแบบแผนคุณสามารถใช้คำสั่ง SQL ต่อไปนี้:

select username from dba_users order by 1;

หรือเพื่อรับ list ไม่ใช่ scheme ที่เกี่ยวข้องกับระบบ (มีอยู่ใน Oracle RDBMS เริ่มจากเวอร์ชัน 12c):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.