[Oracle Note] Oracle Shell Scripting[from forum]
Oracle Shell Scripting
This article presents some basic techniques for creating Windows batch files and UNIX/Linux shell scripts that connect to SQL*Plus and RMAN.
- Windows
- UNIX and Linux (Method 1)
- UNIX and Linux (Method 2)
- UNIX and Linux (Returning values from SQL)
Windows
To run an SQL script using SQL*Plus, place the SQL along with any SQL*Plus commands in a file and save it on your operating system. For example, save the following script in a file called "C:\emp.sql".
CONNECT scott/tiger SPOOL C:\emp.lst SET LINESIZE 100 SET PAGESIZE 50 SELECT * FROM emp; SPOOL OFF EXIT;
Next, create a batch file called "C:\get_emp.bat" containing the following command.
sqlplus /nolog @C:\emp.sql
The resulting batch file can be run manually, by double-clicking on it, or scheduled using the Scheduled Tasks Wizard (Start > Programs > Accessories > System Tools > Scheduled Tasks) or the AT scheduler.
The method is very similar when using Recovery Manager (RMAN). As an example, place the following RMAN commands in a file called "C:\cmdfile.txt".
RUN { ALLOCATE CHANNEL ch1 TYPE DISK FORMAT 'C:\oracle\backup\DB10G%d_DB_%u_%s_%p'; BACKUP DATABASE PLUS ARCHIVELOG; RELEASE CHANNEL ch1; } EXIT;
Next create a batch file called "C:\backup.bat" containing the following command.
rman target=/ @cmdfile.txt
This command can include a catalog=
entry if a recovery catalog is used. Once again, resulting batch file can be run manually or scheduled.
UNIX and Linux (Method 1)
The previous methods works equally well in UNIX and Linux environments. For example, save the following script in a file called "/u01/emp.sql".
CONNECT scott/tiger SPOOL /u01/emp.lst SET LINESIZE 100 SET PAGESIZE 50 SELECT * FROM emp; SPOOL OFF EXIT;
Next, create a shell script called "/u01/get_emp.ksh" containing the following lines.
#!/bin/ksh sqlplus /nolog @/u01/emp.sql
The following command makes the file executable for the file owner.
chmod u+x /u01/get_emp.ksh
The resulting shell script can be run manually from the command line, or scheduled using CRON.
For RMAN, place the following RMAN commands in a file called "/u01/cmdfile.txt".
RUN { ALLOCATE CHANNEL ch1 TYPE DISK FORMAT '/u01/backup/DB10G/%d_DB_%u_%s_%p'; BACKUP DATABASE PLUS ARCHIVELOG; RELEASE CHANNEL ch1; } EXIT;
Next create a batch file called "/u01/backup.ksh" containing the following lines.
#!/bin/ksh rman target=/ @/u01/cmdfile.txt
This command can include a catalog=
entry if a recovery catalog is used. Once again, resulting shell script must be made executable using the following command.
chmod u+x /u01/backup.ksh
The shell script is now ready to run.
UNIX and Linux (Method 2)
UNIX and Linux environments also allow the SQL*Plus and RMAN commands to be piped directly from the command line. For example, save the following commands in a file called "/u01/get_emp.ksh".
#!/bin/ksh sqlplus /nolog << EOF CONNECT scott/tiger SPOOL /u01/emp.lst SET LINESIZE 100 SET PAGESIZE 50 SELECT * FROM emp; SPOOL OFF EXIT; EOF
Notice the "<< EOF" and "EOF" tags, indicating the start and end of the command being piped into the SQL*Plus executable. The shell script is made executable using the following command.
chmod u+x /u01/get_emp.ksh
The shell script is ready to be run manually from the command line or scheduled using CRON.
The following example shows how RMAN can use the same method. Create a file called "/u01/backup.ksh" with the following contents.
#!/bin/ksh rman target=/ << EOF RUN { ALLOCATE CHANNEL ch1 TYPE DISK FORMAT '/u01/backup/DB10G/%d_DB_%u_%s_%p'; BACKUP DATABASE PLUS ARCHIVELOG; RELEASE CHANNEL ch1; } EXIT; EOF
Once again, the script can be made executable using the following command.
chmod u+x /u01/backup.ksh
The shell script is now ready to run.
UNIX and Linux (Returning values from SQL)
The following code show a script to pull the output of a query into a shell script variable.
#!/bin/bash RETVAL=`sqlplus -silent scott/tiger <<EOF SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF SELECT * FROM emp; EXIT; EOF` if [ -z "$RETVAL" ]; then echo "No rows returned from database" exit 0 else echo $RETVAL fi
If you are returning a single value, this method works well. If you are returning multiple rows of multiple columns it gets a bit messy and forces you to parse the return value.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本