2010-09-23 26 views
7

Tôi đang cố viết kịch bản lệnh shell để kiểm tra kết nối cơ sở dữ liệu. Trong tập lệnh của tôi, tôi đang sử dụng lệnhKiểm tra kết nối cơ sở dữ liệu bằng Shell script

sqlplus uid/[email protected] 

để kết nối với cơ sở dữ liệu Oracle của tôi.

Bây giờ tôi muốn lưu đầu ra được tạo ra bởi lệnh này (trước khi nó xuống dấu nhắc lệnh SQL) trong tệp tạm thời và sau đó grep/tìm chuỗi "Đã kết nối với" từ tệp đó để xem kết nối có ổn hay không .

Bất cứ ai có thể vui lòng giúp tôi nắm bắt đầu ra và thoát khỏi lời nhắc đó và kiểm tra xem kết nối có ổn không?

Trả lời

19

Sử dụng một kịch bản như thế này:

#!/bin/sh 
echo "exit" | sqlplus -L uid/[email protected] | grep Connected > /dev/null 
if [ $? -eq 0 ] 
then 
    echo "OK" 
else 
    echo "NOT OK" 
fi 

echo "thoát" đảm bảo rằng chương trình của bạn thoát ra ngay lập tức (điều này được đường ống để sqlplus). -L đảm bảo rằng sqlplus sẽ không yêu cầu mật khẩu nếu thông tin đăng nhập không ổn định (điều này cũng sẽ làm cho nó bị kẹt).

(>/dev/null chỉ ẩn đầu ra từ grep, mà chúng ta không cần vì các kết quả được truy cập thông qua $? Trong trường hợp này)

+0

Cảm ơn bạn rất nhiều cho tất cả các bạn cho đầu vào của bạn .... yeah tôi đã cố gắng vào ngày đó chính nó tuy nhiên, trả lời một chút muộn. – mohona

2

Bạn có thể tránh dấu nhắc lệnh SQL bằng cách thực hiện:

sqlplus uid/[email protected] < /dev/null 

sqlplus thoát ngay lập tức.

Bây giờ chỉ cần grep đầu ra của các bên trên như:

if sqlplus uid/[email protected] < /dev/null | grep 'Connected to'; then 
    # have connectivity to Oracle 
else 
    # No connectivity 
fi 
+0

yeah nó đã làm việc !! Cảm ơn Jochem và codaddict ... – mohona

1
#!/bin/bash 
output=`sqlplus -s "user/[email protected] " <<EOF 
      set heading off feedback off verify off 
      select distinct machine from v\\$session; 
      exit 
EOF 
` 

echo $output 
if [[ $output =~ ERROR ]]; then 
    echo "ERROR" 
else 

    echo "OK" 
fi 
+0

Cảm ơn iddqd cho câu trả lời của bạn. – mohona

1
#! /bin/sh 

if echo "exit;" | sqlplus UID/[email protected] 2>&1 | grep -q "Connected to" 
then echo connected OK 
else echo connection FAIL 
fi 

Không biết liệu "Connected để "tin nhắn được đặt vào đầu ra tiêu chuẩn hoặc lỗi chuẩn, điều này sẽ kiểm tra cả hai. "qrep -q" thay vì "grep ...>/dev/null" giả định Linux.

+0

Cảm ơn Frayser đã trả lời câu hỏi của bạn. – mohona

0

Dưới đây là một lựa chọn tốt mà không lộ mật khẩu trên dòng lệnh

#!/bin/bash 
CONNECT_STRING=<USERNAME>/<PASS>@<SID> 
sqlplus -s -L /NOLOG <<EOF 
whenever sqlerror exit 1 
whenever oserror exit 1 
CONNECT $CONNECT_STRING 
exit 
EOF 

SQLPLUS_RC=$? 
echo "RC=$SQLPLUS_RC" 
[ $SQLPLUS_RC -eq 0 ] && echo "Connected successfully" 
[ $SQLPLUS_RC -ne 0 ] && echo "Failed to connect" 

exit SQLPLUS_RC 
Các vấn đề liên quan