Shell 指令碼 串連 oracle 資料庫
最近研究了一下怎樣使用shell 指令碼串連資料庫,然後執行查詢語句。這樣對於需要定時執行的指令碼,我們可以建個 crontab 去定時執行。
先介紹一下用戶端的安裝: linux 環境需要用 sqlplus 用戶端去串連oracle 資料庫,首先我們需要確認有沒有安裝:which sqlplus 如果沒有安裝就需要先安裝一下,安裝步驟如下:
到oracle 官網下載,之後安裝以下兩個模組:
rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
rpm -ivh oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm
配置環境變數:
vim /etc/profile
儲存之後,執行: source /etc/profile
whereis oracle #查看oracle 用戶端安裝路徑
進入用戶端目錄
添加設定檔:touch tnsnames.ora
編輯設定檔:vim tnsnames.ora
DATABASENAME = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = servicename) ) )
編輯儲存完成以後,可以用命令列測試是否串連成功
sqlplus username/password@DATABASENAME
如果正常的話,就可以順利的連上oracle 資料庫了。
那我們就開始寫自己的shell 指令碼:
#! /bin/bashsqlplus username/password@DATABASENAME >tmp.txt << EOFset heading offset line 4000set WRAP OFFSelect user_id,mobile From txlx_xxx_user_info Where rownum <20;exitEOFsed -i 1,12d tmp.txtsed -i -e '/selected/,$d' tmp.txtsed -i -e '/Disconnected/,$d' tmp.txtsed -i '$d' tmp.txt
逐行解釋一下:
#!/bin/bash #shell 指令碼開頭,指定使用哪種shell串連資料庫語句,標準輸出到 tmp.txt,從<<EOF 之間擷取輸入去掉表頭設定行寬度關閉自動換行查詢語句退出EOF 輸入結束sed 刪除tmp.txt 1~12 行串連資料庫產生的文本刪除 selected 到最後一行的文本刪除 Disconnected 到最後一行的文本刪除最後一行文本