Linux/Unix shell 引數傳遞到SQL指令碼
在資料庫運維的過程中,Shell 指令碼在很大程度上為運維提供了極大的便利性。而shell 指令碼引數作為變數傳遞給SQL以及SQL指令碼也是DBA經常碰到的情形之一。本文主要討論瞭如何將shell指令碼的引數傳遞到SQL指令碼之中並執行SQL查詢。
有關shell與SQL之間的變數傳遞,請參考: Linux/Unix shell sql 之間傳遞變數
1、啟動sqlplus時執行指令碼並傳遞引數
[python] view plaincopyprint?-
[email protected]:~/dba_scripts/custom/awr> more tmp.sh
- #!/bin/bash
- # ----------------------------------------------
- # Set environment here
- # Author : Robinson Cheng
- # Blog : http://blog.csdn.net/robinson_0612
- # ----------------------------------------------
- if [ -f ~/.bash_profile ]; then
- . ~/.bash_profile
- fi
-
if [ -z "${1}" ] || [ -z "${2}" ] || [ -z
- echo "Usage: "
- echo " `basename $0` <ORACLE_SID> <begin_dat> <end_date>"
- read -p "please input begin ORACLE_SID:" ORACLE_SID
- read -p "please input begin date and time(e.g. yyyymmddhh24):" begin_date
-
read -p "please input end date and time(e.g. yyyymmddhh24):"
- else
- ORACLE_SID=${1}
- begin_date=${2}
- end_date=${3}
- fi
- export ORACLE_SID begin_date end_date
- #Method 1: pass the parameter to script directly after script name
- sqlplus -S gx_adm/gx_adm @/users/robin/dba_scripts/custom/awr/tmp.sql $begin_date $end_date
- exit
- [email protected]:~/dba_scripts/custom/awr> more tmp.sql
- SELECT snap_id, dbid, snap_level
- FROM dba_hist_snapshot
- WHERE TO_CHAR (begin_interval_time, 'yyyymmddhh24') = '&1'
- AND TO_CHAR (end_interval_time, 'yyyymmddhh24') = '&2';
- exit;
2、在SQL提示符下傳遞引數
[python] view plaincopyprint?- [email protected]:~/dba_scripts/custom/awr> more tmp2.sh
- #!/bin/bash
- # ----------------------------------------------
- # Set environment here
- # Author : Robinson Cheng
- # Blog : http://blog.csdn.net/robinson_0612
- # ----------------------------------------------
- if [ -f ~/.bash_profile ]; then
- . ~/.bash_profile
- fi
- if [ -z "${1}" ] || [ -z "${2}" ] || [ -z "${3}" ] ;then
- echo "Usage: "
- echo " `basename $0` <ORACLE_SID> <begin_dat> <end_date>"
- read -p "please input begin ORACLE_SID:" ORACLE_SID
- read -p "please input begin date and time(e.g. yyyymmddhh24):" begin_date
- read -p "please input end date and time(e.g. yyyymmddhh24):" end_date
- else
- ORACLE_SID=${1}
- begin_date=${2}
- end_date=${3}
- fi
- export ORACLE_SID begin_date end_date
- #Method 2: pass the parameter in SQL prompt. Using the same method with method 1
- sqlplus -S " / as sysdba" <<EOF
- @/users/robin/dba_scripts/custom/awr/tmp.sql $begin_date $end_date
- exit;
- EOF
- exit
3、通過定義變數的方式來傳遞引數
[python] view plaincopyprint?- [email protected]:~/dba_scripts/custom/awr> more tmp3.sh
- #!/bin/bash
- # ----------------------------------------------
- # Set environment here
- # Author : Robinson Cheng
- # Blog : http://blog.csdn.net/robinson_0612
- # ----------------------------------------------
- if [ -f ~/.bash_profile ]; then
- . ~/.bash_profile
- fi
- if [ -z "${1}" ] || [ -z "${2}" ] || [ -z "${3}" ] ;then
- echo "Usage: "
- echo " `basename $0` <ORACLE_SID> <begin_dat> <end_date>"
- read -p "please input begin ORACLE_SID:" ORACLE_SID
- read -p "please input begin date and time(e.g. yyyymmddhh24):" begin_date
- read -p "please input end date and time(e.g. yyyymmddhh24):" end_date
- else
- ORACLE_SID=${1}
- begin_date=${2}
- end_date=${3}
- fi
- export ORACLE_SID begin_date end_date
- #Method 3: pass the parameter to global variable firstly.
- sqlplus -S " / as sysdba" <<EOF
- define begin_date=$begin_date
- define end_date=$end_date
- prompt "variable value for begin_date is: &begin_date"
- prompt "variable value for end_date id : &end_date"
- @/users/robin/dba_scripts/custom/awr/tmp3.sql begin_date end_date
- exit;
- EOF
- exit
- [email protected]:~/dba_scripts/custom/awr> more tmp3.sql
- SELECT snap_id, dbid, snap_level
- FROM dba_hist_snapshot
- WHERE TO_CHAR (begin_interval_time, 'yyyymmddhh24') = '&begin_date'
- AND TO_CHAR (end_interval_time, 'yyyymmddhh24') = '&end_date';
- exit;
4、測試指令碼
[python] view plaincopyprint?- [email protected]:~/dba_scripts/custom/awr> ./tmp.sh
- Usage:
- tmp.sh <ORACLE_SID> <begin_dat> <end_date>
- please input begin ORACLE_SID:CNMMBO
- please input begin date and time(e.g. yyyymmddhh24):2013030709
- please input end date and time(e.g. yyyymmddhh24):2013030710
- SNAP_ID DBID SNAP_LEVEL
- ---------- ---------- ----------
- 138779385067151
- [email protected]:~/dba_scripts/custom/awr> ./tmp2.sh MMBOTST 20130307092013030710
- SNAP_ID DBID SNAP_LEVEL
- ---------- ---------- ----------
- 3626235092549841
- [email protected]:~/dba_scripts/custom/awr> ./tmp3.sh MMBOTST 20130307102013030711
- "variable value for begin_date is: 2013030710"
- "variable value for end_date id : 2013030711"
- SNAP_ID DBID SNAP_LEVEL
- ---------- ---------- ----------
- 3626335092549841
5、小結
a、本文主要描述了將shell的引數傳遞給SQL指令碼
b、方式1的用法是直接將shell變數跟在指令碼之後, sqlplus userid/pwd @script_name $para1 $para2
c、方式2是啟動sqlplus後在SQL提示符下來傳遞引數, SQL>@script_name $para1 $para2
d、方式3則是將shell變數的值先傳遞給define定義的變數,然後再傳遞給SQL指令碼 SQL>@script_name var1 var2
e、注意方式3中SQL指令碼的替代變數與define定義的變數名相同
相關推薦
Linux/Unix shell 引數傳遞到SQL指令碼
在資料庫運維的過程中,Shell 指令碼在很大程度上為運維提供了極大的便利性。而shell 指令碼引數作為變數傳遞給SQL以及SQL指令碼也是DBA經常碰到的情形之一。本文主要討論瞭如何將shell指令碼的引數傳遞到SQL指令碼之中並執行SQL查詢。 有關shell與
Linux/Unix shell 指令碼中呼叫SQL RMAN指令碼
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Linux Unix shell 編程指南學習筆記(第四部分)
fcm 驗證 () only arguments line div 反饋 sed 第十六章 shell腳本介紹 此章節內容較為簡單,跳過。 第十七章 條件測試 test命令 expr命令 test 格式 test condition 或者 [
關於 Shell 引數傳遞 與 預設值
簡介 除了基本的獲取指令碼執行時的傳入引數外, 還有更便捷的語法糖: 引數預設值, 自動賦值. 基本傳參 先來一個示例: #!/bin/sh echo 引數0: $0; echo 引數1: $1; echo 引數2: $2; echo 引數3: $3; echo 引數4: $4; 執行測試
Linux/Unix shell 監控Oracle例項(monitor instance)
使用shell指令碼實現對Oracle資料庫的監控與管理將大大簡化DBA的工作負擔,如常見的對例項的監控,監聽的監控,告警日誌的監控,以及資料庫的備份,AWR report的自動郵件等。本文給出Linux 下使用 shell 指令碼來監控 Oracle 例項。1、監控
以shell方式執行sql指令碼總是不成功的一則原因
shell指令碼: ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Linux Unix shell 程式設計指南學習筆記(第四部分)
第十六章 shell指令碼介紹 此章節內容較為簡單,跳過。 第十七章 條件測試 test命令 expr命令 test 格式 test condition 或者 [ condition ] (注意: condition兩側有空格) 檔案狀態測試:
Shell引數傳遞
在執行shell指令碼執行時,可以向指令碼傳遞引數,指令碼內用$1 $2 $3...來獲取引數,$1代表傳遞的第一個引數,以此類推。 指令碼如下 #!/bin/bash echo "執行的檔名
Shell指令碼通過引數傳遞呼叫指定函式
我們在寫一些功能性指令碼的時候,往往會把操作相似或者引數類似行為接近的函式放在同一個shell指令碼中,這樣管理方便,維護簡單,也很清晰。對於這種情況,通常的辦法是,在shell指令碼中定義所有用到的函式,然後在正文程式碼中用case語句讀入輸入的命令函式引數來呼叫指定的相
linux bash環境下面給expect指令碼傳遞引數
#!/usr/bin/expect # file name :rauth # Usages : rauth username [ passworld ] # Description : 自動傳送使用者名稱與密碼 # 執行 myxrgsu -a if { $argc !=
shell指令碼引數傳遞和main函式引數傳遞方式類似
shell指令碼 test.sh呼叫的時候傳入引數,param1,param2: #test.sh param1 param2 那麼在指令碼內部相當於把 test.sh param1 param2 看成三個引數出入,所以引數0為$0 (test.sh),引數1為$1 (pa
向shell或者sql指令碼傳參或接收引數的方法
1.向shell中傳引數的方法,後面是重定向,將日誌匯出到當前目錄下sh a.sh aaa bbb > a.log2.shell中接收引數的方法echo "@a.sql $1"|sqlplus $1/$23.通過shell呼叫sql指令碼,並向其中傳引數的方法:echo
Linux系統——shell指令碼
shell指令碼程式設計 作用:通過命令列解析的方式,自動執行設定好的程式或命令程式碼。(若將指令碼掛到定時任務中,就會自動在非工作時間裡自動觸發執行程式) Shell指令碼檔案以“.sh”結尾 規範的Shell指令碼第一行會指出由哪個程式
Linux系統——shell指令碼應用示例
傳入一個網段地址,自動找出本網段記憶體活的IP地址。2,將存活的IP地址當作密碼來建立Linux使用者,使用者名稱格式為:你的名字_數字 3,有幾個存活IP地址,就自動建立幾個使用者 4,最後將建立的使用者名稱和密碼寫入到/tmp目錄下的某檔案裡 (1)找存活的ip (2)將ip去
鳥哥的 Linux私房菜讀書筆記--shell scripts(程式化指令碼)
1、關於shell scripts shell scripts是利用 shell的功能寫的一個程式program,這個程式是使用純文字文,將一些shell的語法與指令(含外部指令)寫在裡面,搭配正則表示法、管線命令與資料流重導向等功能,以達到我們想要的處理目的。其中shell是指文字介面底下
Shell 實現Docker MySQL5.7安裝及SQL指令碼執行
Linux Shell 實現Docker MySQL安裝及指令碼執行的目標: 1、實現MySQL5.7安裝 2、安裝完成後建立對應的賬號和資料庫例項表等 建立docker mysql容器例項 定義docker_mysql_install.sh #! /bin/bash #fi
【linux】shell指令碼除錯技術
在使用gcc編譯keepalived原始碼的時候,需要執行configure生成Makefile,然後用make命令編譯。但是在這個過程中,configure檔案卻一直無法掃描到一個已經安裝的三方庫。無奈,只能檢視configure原始碼。configure其實就是一個shell指令碼,為了
[一天幾個linux命令] shell指令碼之正則表示式
shell指令碼之正則表示式 原文連結:Linux–shell指令碼之正則表示式 概念及特點 概念 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定的字元、及這些特定字元的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯。規定一些特殊語
shell程式設計-引數傳遞
一、傳參介紹 (1)C語言中可以通過main函式的argc和argv給程式傳參 (2)shell程式本身也可以在呼叫時傳參給他。在shell程式內部使用傳參也是使用的一些特定符號來表示的,包括: $#表示呼叫該shell時傳參的個數。($#計數時只考慮真正的引數個數) $0、$1、$
jmeter 傳送加密請求 beanshell斷言 執行緒組間傳遞引數 jmeter bean shell斷言加密的響應資訊(加密介面測試二) jmeter 執行緒組之間的引數傳遞(加密介面測試三)
原文地址https://www.cnblogs.com/wnfindbug/p/5817038.html 最近在做http加密介面,請求頭的uid引數及body的請求json引數都經過加密再發送請求,加密方式為:ase256。所以,jmeter傳送請求前也需要對uid及jso