จะเริ่มต้น / ปิด Oracle 11 ได้อย่างรวดเร็วได้อย่างไร


9

ฉันสงสัยว่าวิธีใดที่เร็วที่สุดในการเริ่ม / ปิด Oracle DB daemon อย่างเหมาะสม (Oracle 11.2 ติดตั้งบนเครื่องทดสอบ)

ฉันต้องการมันสำหรับโปรแกรม C / C ++ ที่ใช้ OCI / Pro * C API

ฉันต้องการสิ่งนี้เพราะฉันคุ้นเคยกับความเร็วในการเริ่มต้นของ PostgreSQL และเพราะ daemon ทำงานในเครื่องเสมือนที่เริ่มต้นเท่านั้น (ตามความต้องการ) สำหรับกรณีทดสอบ

ขณะนี้ฉันสคริปต์แบบนี้ - เริ่มต้น:

sqlplus /nolog <<EOF
connect / as sysdba
startup
quit
EOF
lsnrctl start
emctl start dbconsole

และปิดเครื่อง:

emctl stop dbconsole
lsnrctl stop
sqlplus /nolog <<EOF
connect / as sysdba
shutdown
quit
EOF

ใช้งานได้ - โปรแกรมทำงานตามที่คาดไว้ - แต่กระบวนการนี้ค่อนข้างช้า

Oracle DB ทำงานบน CentOS 6.3 เป็นฟรี (as-in-beer) 'รุ่นมาตรฐาน'

คำตอบ:


8

คุณสามารถใช้dbstart/ dbshutสคริปต์ที่มาพร้อมกับการติดตั้ง Oracle $ORACLE_HOME/binพวกเขามีอยู่ภายใต้

หลังจากติดตั้งใหม่คุณต้องแก้ไข/etc/oratabไฟล์:

# cat /etc/oratab
# format: $ORACLE_SID:$ORACLE_HOME:N|Y
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:N
# sed -i 's/:N$/:Y/' /etc/oratab
# grep my_sid /etc/oratab
my_sid:/home/juser/app/juser/product/11.2.0/dbhome_1:Y

จากนั้นคุณสามารถใช้สคริปต์เช่นนี้:

$ whoami
juser
$ dbstart $ORACLE_HOME
$ # execute DB jobs ...
$ dbshut $ORACLE_HOME

dbstart นำเสนอทั้งหมดที่จำเป็นสำหรับโปรแกรม Pro * C / OCI

การใช้dbstart/ dbshutเป็นการปรับปรุงเหนือวิธีการที่กำหนดเองที่กล่าวถึงในคำถาม:

method                time    called tools
―――――――――――――――――――――――――――――――――――――――――――――――――――――
dbstart              5.7 s    lsnrctl, sqlplus
dbshut               5.7 s    lsnrctl, sqlplus
custom startup      27.9 s    lsnrctl, sqlplus, emctl
custom shutdown     31.0 s    lsnrctl, sqlplus, emctl

(เท่าในระบบ Core i7 / 2.8GHz, ฮาร์ดดิสก์หมุนช้า)

dbstart / dbshut ทำงานอย่างไร

การdbstart $ORACLE_HOME$โทรนั้นเทียบเท่ากับ:

$ lsnrctl start
$ echo -e 'connect / as sysdba\nstartup\nquit'| sqlplus /nolog

และdbshut $ORACLE_HOME$โดยทั่วไปเทียบเท่ากับ:

$ lsnrctl stop
$ echo -e 'connect / as sysdba\nshutdown\nquit'| sqlplus /nolog

(คุณสามารถตรวจสอบว่าทุกอย่างถูกปิดผ่านps aux | grep 'tnsl\|ora')

โปรดทราบว่าลำดับของคำสั่งมีความสำคัญ ซึ่งหมายความว่าเมื่อlsnrctl startถูกเรียกใช้งานหลังจากคำสั่ง sqlplus-startup โปรแกรม Pro * C / OCI ยังคงบ่นเกี่ยวกับ TNS-listener ที่ไม่พร้อมใช้งาน

และนี่คือปัญหาที่เกิดขึ้นกับลำดับคำสั่งในคำถาม - ที่ซึ่งemctl startเพียงแค่แก้ไขคำสั่งที่ไม่ถูกต้องเพราะมันจะแก้ไขส่วนการตั้งค่าฟัง TNS

โปรดทราบว่าสำหรับการดำเนินการโปรแกรม Pro * C / OCI ไม่จำเป็นต้องใช้บริการ EMCTL


1

ทำไมคุณถึงต้องการมันทั้งหมด เหตุผลคืออะไร สำหรับการปิดระบบคุณมี 3 ตัวเลือก:

  • ล้วนshutdown- รอการสิ้นสุดเซสชัน
  • shutdown immediate - การย้อนกลับและสิ้นสุดเซสชัน (รอการย้อนกลับเสร็จสิ้น)
  • shutdown abort - ฆ่าทุกอย่าง - ปกติฐานข้อมูลจะต้องทำการกู้คืนเมื่อเริ่มต้น

PS: คุณอาจไม่ต้องการให้ Enterprise manager ทำงานหากคุณต้องการฐานข้อมูลสำหรับการทดสอบเท่านั้น ใช้ Oracle dbstart/ dbshutสคริปต์ หากคุณต้องการ EM จริงๆให้เริ่มในพื้นหลัง


0

yasir-arsanukaev : คุณสามารถหยุดชั่วคราว (หยุดชั่วคราว) VM ของคุณเพื่อบันทึกสถานะลงดิสก์ได้หรือไม่?

colin-t-hart : หากนี่เป็นเครื่องทดสอบให้สร้างสแนปช็อต dbstartเริ่มต้นเครื่องและเริ่มต้นโดยใช้ Oracle เพียงปิดเครื่องเมื่อเสร็จแล้วย้อนกลับไปที่ภาพรวม

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