Làm thế nào để nhanh chóng khởi động / tắt Oracle 11?


9

Tôi đang tự hỏi đâu là cách nhanh nhất để khởi động / tắt đúng trình nền Oracle DB (Oracle 11.2, được cài đặt trên máy thử nghiệm).

Tôi cần nó cho các chương trình C / C ++ sử dụng API OCI / Pro * C.

Tôi muốn điều này bởi vì tôi đã quen với tốc độ khởi động của PostgreSQL và vì trình nền chạy trong một máy ảo chỉ khởi động (theo yêu cầu) cho các trường hợp thử nghiệm.

Hiện tại tôi viết kịch bản như thế này - khởi động:

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

Và tắt máy:

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

Điều này hoạt động - các chương trình hoạt động như mong đợi - nhưng thủ tục này khá chậm.

Oracle DB chạy trên CentOS 6.3, đây là 'phiên bản tiêu chuẩn' miễn phí (dưới dạng bia).

Câu trả lời:


8

Bạn có thể sử dụng dbstart/ dbshutscript đi kèm với cài đặt Oracle. Họ có sẵn dưới $ORACLE_HOME/bin.

Sau khi cài đặt mới, bạn phải chỉnh sửa /etc/oratabtệp:

# 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

Sau đó, bạn có thể sử dụng các tập lệnh như thế này:

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

dbstart mang lại tất cả những gì cần thiết cho các chương trình Pro * C / OCI.

Sử dụng dbstart/ dbshutlà một cải tiến trên phương pháp tùy chỉnh được đề cập trong câu hỏi:

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

(lần trên hệ thống Core i7 / 2.8GHz, đĩa cứng quay chậm.)

Làm thế nào dbstart / dbshut hoạt động

Một dbstart $ORACLE_HOME$cuộc gọi về cơ bản tương đương với:

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

Và a dbshut $ORACLE_HOME$về cơ bản tương đương với:

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

(bạn có thể xác minh nếu mọi thứ được tắt thông qua ps aux | grep 'tnsl\|ora')

Lưu ý rằng thứ tự của các lệnh là quan trọng. Điều đó có nghĩa là khi lsnrctl startđược thực thi sau lệnh sqlplus-startup thì chương trình Pro * C / OCI vẫn phàn nàn về trình nghe TNS không khả dụng.

Và đây chính xác là vấn đề với chuỗi lệnh trong câu hỏi - nơi emctl startchỉ giải quyết sai thứ tự vì nó sửa phần thiết lập TNS-listener.

Cũng lưu ý rằng để thực hiện các chương trình Pro * C / OCI, dịch vụ EMCTL là không cần thiết.


1

Tại sao bạn cần nó cả? Lý do là gì? Để tắt máy, bạn có 3 tùy chọn:

  • đơn giản shutdown- chờ kết thúc phiên
  • shutdown immediate - rollback và kết thúc phiên (chờ kết thúc rollback)
  • shutdown abort - giết tất cả mọi thứ - thông thường cơ sở dữ liệu phải thực hiện một số phục hồi khi khởi động.

PS: bạn có thể không cần Trình quản lý doanh nghiệp để chạy, nếu bạn chỉ cần cơ sở dữ liệu để kiểm tra. Sử dụng Oracle dbstart/ dbshutscript. Nếu bạn thực sự cần EM, hãy bắt đầu nó trong nền.


0

yasir-arsanukaev : Bạn có thể tạm dừng (tạm dừng) VM của bạn lưu trạng thái của nó vào đĩa không?

colin-t-hart : Nếu đây là máy thử nghiệm, hãy tạo ảnh chụp nhanh. Khởi động máy và khởi động Oracle bằng cách sử dụngdbstart. Chỉ cần tắt máy khi hoàn tất và quay lại ảnh chụp nhanh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.