Nếu bạn đang sử dụng Oracle Clusterware 10gR2 trở lên cho RAC hoặc chỉ cho một phiên bản duy nhất sử dụng ASM, Clusterware sẽ tự động khởi động và dừng các phiên bản cơ sở dữ liệu Oracle và các listener, do đó các quy trình sau đây là không cần thiết. Trong trường hợp không sử dụng Clusterware, các phương pháp này cho phép bạn tự động hóa việc khởi động và tắt cơ sở dữ liệu trên Linux.
- Những thứ tôi dùng
- Dịch vụ systemd
- Lệnh "su"
- Bộ chỉ huy "rsh"
- Lệnh "runuser"
- Các vấn đề đã biết
- Liệu dbstart và dbshut có bị loại bỏ?
Các phương pháp này hoạt động trên tất cả các phiên bản RHEL và Oracle Linux, bao gồm cả RHEL7/OL7.
Các bài viết liên quan.
- Bảo lưu trạng thái khởi động PDB (từ phiên bản 12.1.0.2 trở đi)
Những thứ tôi dùng
Bài viết này có một số biến thể, nhưng đây là phương pháp tôi hiện đang sử dụng, một biến thể của lệnh "su" .
Các tập lệnh được tạo bằng catlệnh, với tất cả các ký tự "$" được mã hóa. Nếu bạn muốn tạo các tệp này theo cách thủ công, thay vì sử dụng lệnh cat, hãy nhớ xóa các ký tự "\" trước các ký tự "$".
Tạo thư mục "scripts".
mkdir /home/oracle/scriptsTạo một tệp cấu hình môi trường có tên "setEnv.sh". Đây là một ví dụ từ bản cài đặt 12.2. Hãy điều chỉnh nội dung cho phù hợp với bản cài đặt của bạn.
cat > /home/oracle/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_HOSTNAME=ol7-122.localdomain
export ORACLE_UNQNAME=cdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/12.2.0.1/db_1
export ORACLE_SID=cdb1
export PATH=/usr/sbin:/usr/local/bin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
EOFThêm tham chiếu đến tệp "setEnv.sh" vào cuối tệp "/home/oracle/.bash_profile" nếu bạn muốn các thiết lập được áp dụng cho lần đăng nhập thông thường. Hồ sơ sẽ không được thiết lập trong quá trình khởi động/dừng dịch vụ, vì vậy điều này không cần thiết cho chức năng khởi động/dừng tự động.
echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile
Tạo các tập lệnh "start_all.sh" và "stop_all.sh" có thể được gọi từ dịch vụ khởi động/tắt. Hãy đảm bảo quyền sở hữu và quyền truy cập là chính xác.
cat > /home/oracle/scripts/start_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
dbstart \$ORACLE_HOME
EOF
cat > /home/oracle/scripts/stop_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh
export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES
dbshut \$ORACLE_HOME
EOF
chown -R oracle.oinstall /home/oracle/scripts
chmod u+x /home/oracle/scripts/*.shBạn có thể khởi động/dừng cơ sở dữ liệu bằng các tập lệnh sau được chạy từ người dùng "oracle".
$ ~/scripts/start_all.sh $ ~/scripts/stop_all.sh
Bây giờ chúng ta cần tạo dịch vụ Linux để gọi các tập lệnh mà chúng ta đã tạo trước đó. Phần còn lại của mục này thể hiện những gì tôi đã làm cho OL6, nhưng nó cũng sẽ hoạt động với OL7. Nếu bạn đang sử dụng OL7 và muốn sử dụng systemd trực tiếp, bạn có thể làm theo hướng dẫn được cung cấp ở đây .
Tạo một tệp có tên "/etc/init.d/dbora" với quyền người dùng root, chứa nội dung sau.
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database software.
ORA_OWNER=oracle
case "$1" in
'start')
# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
# Remove "&" if you don't want startup as a background process.
su $ORA_OWNER -c "/home/oracle/scripts/start_all.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1" &
touch /var/lock/subsys/dbora
;;
'stop')
# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su $ORA_OWNER -c "/home/oracle/scripts/stop_all.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1"
rm -f /var/lock/subsys/dbora
;;
esacSử dụng chmodlệnh này để thiết lập quyền truy cập thành 750.
chmod 750 /etc/init.d/dboraLiên kết dịch vụ "dbora" với các cấp độ chạy phù hợp và thiết lập để dịch vụ tự khởi động bằng lệnh sau.
chkconfig --add dboraBạn có thể khởi động và dừng cơ sở dữ liệu bằng cách sử dụng dịch vụ, điều này sẽ xảy ra khi khởi động lại hệ thống.
# service dbora start # service dbora stop
Dịch vụ systemd
Với sự ra mắt của RHEL7/OL7, các dịch vụ hiện được quản lý bằng systemd. Bạn có thể tiếp tục sử dụng các phương pháp hiện có được hiển thị bên dưới để tạo dịch vụ tự động khởi động Oracle, vì systemd tương thích ngược. Nếu bạn muốn sử dụng systemd trực tiếp, bạn có thể làm theo hướng dẫn được cung cấp tại đây .
Ví dụ về systemd giả định rằng bạn đã có các tập lệnh được định nghĩa ở trên trong thư mục "/home/oracle/scripts/".
Lệnh "su"
Phương pháp sau đây để tự động hóa quá trình khởi động và tắt cơ sở dữ liệu của các phiên bản Oracle trên Linux hoạt động tốt cho cả Oracle 9i, 10g, 11G và 12c. Nó có thể được sử dụng trên bất kỳ bản phân phối kiểu RHEL nào, bao gồm Oracle Linux, cho đến RHEL7. Tôi vẫn sử dụng phương pháp này cho Oracle 12c trên OL6. Nó cũng sẽ hoạt động cho RHEL7/OL7, nhưng tôi thích sử dụng các dịch vụ systemd hơn .
Sau khi tạo xong instance, hãy chỉnh sửa file "/etc/oratab" và đặt cờ khởi động lại cho mỗi instance thành 'Y'.
TSH1:/u01/app/oracle/product/12.2.0.1/db_1:YTạo một tệp có tên "/etc/init.d/dbora" với quyền người dùng root, chứa đoạn mã sau. Điều chỉnh đường dẫn cho phù hợp với hệ thống của bạn.
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
#ORA_HOME=/u01/app/oracle/product/10.2.0/db_1
#ORA_HOME=/u01/app/oracle/product/11.1.0/db_1
#ORA_HOME=/u01/app/oracle/product/11.2.0.4/db_1
#ORA_HOME=/u01/app/oracle/product/12.1.0.2/db_1
ORA_HOME=/u01/app/oracle/product/12.2.0.1/db_1
ORA_OWNER=oracle
export ORACLE_UNQNAME=db12c
if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "Oracle startup: cannot start"
exit
fi
case "$1" in
'start')
# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
# Remove "&" if you don't want startup as a background process.
su $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME" &
touch /var/lock/subsys/dbora
;;
'stop')
# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
rm -f /var/lock/subsys/dbora
;;
esacSử dụng chmodlệnh này để thiết lập quyền truy cập thành 750.
chmod 750 /etc/init.d/dboraLiên kết dịch vụ "dbora" với các cấp độ chạy phù hợp và thiết lập để dịch vụ tự khởi động bằng lệnh sau.
chkconfig --add dboraCác tiến trình liên quan giờ đây sẽ tự động khởi động/tắt khi hệ thống khởi động/tắt.
Đối với Oracle 9i, các lệnh dbstartvà dbshutkhông điều khiển trình lắng nghe, do đó việc quản lý trình lắng nghe phải được thực hiện riêng biệt, như được hiển thị bên dưới.
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
ORA_HOME=/u01/app/oracle/product/9.2.0
ORA_OWNER=oracle
if [ ! -f $ORA_HOME/bin/dbstart ]
then
echo "Oracle startup: cannot start"
exit
fi
case "$1" in
'start')
# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
# Remove "&" if you don't want startup as a background process.
su $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" &
su $ORA_OWNER -c $ORA_HOME/bin/dbstart &
touch /var/lock/subsys/dbora
;;
'stop')
# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su $ORA_OWNER -c $ORA_HOME/bin/dbshut
su $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
rm -f /var/lock/subsys/dbora
;;
esacBộ chỉ huy "rsh"
Một số tài liệu hướng dẫn của Oracle 10g khuyến nghị sử dụng lệnh "rsh" trong dịch vụ "dbora". Các phiên bản cơ sở dữ liệu sau này đã chuyển sang sử dụng lệnh "su". Tôi chưa bao giờ thích hoặc sử dụng phương pháp này trên hệ thống thực tế.
Với Oracle 10g, Oracle đã chuyển từ việc khuyến nghị sử dụng lệnh "su" sang lệnh "rsh". Trong phiên bản Oracle 10g release 2, dbstartlệnh này bao gồm việc tự động khởi động trình lắng nghe, vì vậy có một số khác biệt giữa hai phiên bản, nhưng phương pháp được Oracle khuyến nghị cho Oracle 10g được trình bày dưới đây.
Sau khi tạo xong instance, hãy chỉnh sửa file "/etc/oratab" và đặt cờ khởi động lại cho mỗi instance thành 'Y'.
TSH1:/u01/app/oracle/product/10.2.0:YTạo một tệp có tên "/etc/init.d/dbora" với quyền người dùng root, chứa nội dung sau.
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Change the value of ORACLE_HOME to specify the correct Oracle home
# directory for your installation.
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
#
# Change the value of ORACLE to the login name of the
# oracle owner at your site.
#
ORACLE=oracle
PATH=${PATH}:$ORACLE_HOME/bin
HOST=`hostname`
PLATFORM=`uname`
export ORACLE_HOME PATH
#
if [ ! "$2" = "ORA_DB" ] ; then
if [ "$PLATFORM" = "HP-UX" ] ; then
remsh $HOST -l $ORACLE -n "$0 $1 ORA_DB"
exit
else
rsh $HOST -l $ORACLE $0 $1 ORA_DB
exit
fi
fi
#
case $1 in
'start')
$ORACLE_HOME/bin/dbstart $ORACLE_HOME
touch /var/lock/subsys/dbora
;;
'stop')
$ORACLE_HOME/bin/dbshut $ORACLE_HOME
rm -f /var/lock/subsys/dbora
;;
*)
echo "usage: $0 {start|stop}"
exit
;;
esac
#
exitSử dụng chmodlệnh này để thiết lập quyền truy cập thành 750.
chmod 750 /etc/init.d/dboraLiên kết dịch vụ "dbora" với các cấp độ chạy phù hợp và thiết lập để dịch vụ tự khởi động bằng lệnh sau.
chkconfig --add dboraCác tiến trình liên quan giờ đây sẽ tự động khởi động/tắt khi hệ thống khởi động/tắt.
Phương pháp này dựa trên sự hiện diện của máy chủ RSH, điều này đòi hỏi các gói phần mềm và cấu hình bổ sung.
# Install the rhs and rsh-server packages from the OS CD/DVD.
rpm -Uvh --force rsh-*
# Enable rsh and rlogin.
chkconfig rsh on
chkconfig rlogin on
service xinetd reloadĐiều này có thể khá rắc rối khi cố gắng sử dụng phương pháp này trên các bản phân phối Linux đời mới hơn, nơi rsh đã bị loại bỏ. Do đó, tôi thích sử dụng phương pháp lệnh "su" hơn.
Phương pháp này cũng có thể được sử dụng cho các cơ sở dữ liệu 11g không sử dụng ASM hoặc RAC.
Lệnh "runuser"
Trước đây, tài liệu hướng dẫn Oracle 12c khuyến nghị sử dụng lệnh "runuser" trong dịch vụ "dbora". Phiên bản tài liệu mới nhất đã quay lại sử dụng lệnh "su". Ví dụ về việc sử dụng lệnh "runuser" được hiển thị bên dưới, nhưng tôi không sử dụng lệnh này.
Sau khi tạo xong instance, hãy chỉnh sửa file "/etc/oratab" và đặt cờ khởi động lại cho mỗi instance thành 'Y'.
DB12C:/u01/app/oracle/product/12.1.0.2/db_1:YTạo một tệp có tên "/etc/init.d/dbora" với quyền người dùng root, chứa đoạn mã sau, đây là phiên bản đã được sửa đổi của ví dụ trong tài liệu, nhưng ví dụ này không hoạt động.
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Change the value of ORACLE_HOME to specify the correct Oracle home
# directory for your installation.
ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1
#
# Change the value of ORACLE to the login name of the
# oracle owner at your site.
#
ORACLE=oracle
PATH=${PATH}:$ORACLE_HOME/bin
export ORACLE_HOME PATH
#
case $1 in
'start')
runuser -l $ORACLE -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME &"
touch /var/lock/subsys/dbora
;;
'stop')
runuser -l $ORACLE -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
rm -f /var/lock/subsys/dbora
;;
*)
echo "usage: $0 {start|stop}"
exit
;;
esac
#
exitNếu bạn muốn dịch vụ chờ trong khi quá trình khởi động hoàn tất, hãy xóa dấu "&". Điều này đặc biệt quan trọng đối với các quá trình tắt máy mất nhiều thời gian, chẳng hạn như khi tắt các dịch vụ WebLogic và Cloud Control.
Sử dụng chmodlệnh để đặt quyền truy cập thành 750. Liên kết dịch vụ "dbora" với các cấp độ chạy phù hợp và thiết lập để dịch vụ tự khởi động bằng lệnh sau.
chmod 750 /etc/init.d/dbora chkconfig --add dbora
Các vấn đề đã biết
Khi sử dụng Oracle 10g Release 2, việc gọi hàm dbstartmà không có tham số "$ORACLE_HOME" có thể dẫn đến thông báo lỗi sau.
Không thể tự động khởi động Oracle Net Listener bằng cách sử dụng /ade/vikrkuma_new/oracle/bin/tnslsnr
Lỗi này là do đường dẫn được mã hóa cứng trong dbstarttập lệnh. Bạn sẽ không gặp lỗi này nếu truyền "$ORACLE_HOME" làm tham số cho dbstart và dbshut. Để khắc phục, hãy chỉnh sửa tập lệnh "$ORACLE_HOME/bin/dbstart" và thay thế dòng sau (khoảng dòng 78).
ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracleVới điều này.
ORACLE_HOME_LISTNER=$ORACLE_HOMETập lệnh dbstartgiờ sẽ khởi động trình lắng nghe như mong đợi.
Liệu dbstart và dbshut có bị loại bỏ?
Tài liệu Oracle 11gR2 nêu rõ việc sử dụng các tập lệnh dbstartvà dbshutđã lỗi thời. Phương pháp thay thế được khuyến nghị là Oracle Restart .
Cả hai dbstartcông cụ này dbshutvẫn còn tồn tại trong Oracle 11gR2, vì vậy bạn có thể tiếp tục sử dụng chúng (tôi vẫn đang sử dụng chúng). Để sử dụng Oracle Restart, bạn phải cài đặt Grid Infrastructure (GI), mà bạn đã có sẵn nếu đang sử dụng RAC hoặc ASM cho một instance độc lập. Trong những trường hợp này, Oracle Restart sẽ đã có sẵn và đang chạy. Đối với các cơ sở dữ liệu instance đơn không sử dụng ASM, tôi nghĩ rằng việc yêu cầu người dùng cài đặt GI là không hợp lý.
Tài liệu Oracle 12c không đề cập đến việc loại bỏ dbstartvà dbshutđã khôi phục lại tài liệu về chúng. Do đó, bạn có thể tự do sử dụng dbstartvà dbshuttheo cách được hỗ trợ cho tất cả các phiên bản của cơ sở dữ liệu.
Để biết thêm thông tin chi tiết, vui lòng xem:
- Tự động hóa việc tắt máy và khởi động (12.2)
- Tự động hóa việc tắt máy và khởi động (12.1)
- Tự động hóa việc tắt máy và khởi động (11.2)
- Tự động hóa việc tắt máy và khởi động (10.2)
- Tự động hóa quá trình khởi động và tắt máy (10.1)
- Tự động hóa quá trình khởi động và tắt cơ sở dữ liệu (9.2)
- Các dịch vụ Linux (systemd, systemctl)
- Bảo lưu trạng thái khởi động PDB (từ phiên bản 12.1.0.2 trở đi)
Hi vọng điều này sẽ hữu ích
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty