Bạn có thể sử dụng dbstart
/ dbshut
script đ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/oratab
tệ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
/ dbshut
là 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 start
chỉ 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.