sqlplus的非交互式使用
1 sqlplus交互界面存在的问题
sqlplus是ORACLE数据库的最重要的官方命令行client软件。是DBA的必备工具,使用它能够完毕差点儿所有的管理任务。然而。sqlplus的交互界面并非很友好,输入命令时不具有历史命令记录功能。默认的输出结果更是不堪入目。
在易用性方面,sqlplus确实比mysqlclient差了不少。
既然sqlplus交互模式存在这么多的不便。那么不如干脆直接使用非交互模式使用它,再借助操作系统提供的shell工具集来协助完毕更复杂的任务。sqlplus本身就是支持非交互式使用的,并且支持的很好,符合一般的Unix设计哲学:从标准输入读取命令。把结果写到标准输出。
2 sqlplus的两种非交互式使用方式
sqlplus在非交互模式下,能够从两个地方为其提供sql命令:一是通过外部文件,而是通过标准输入。
2.1 通过外部命令文件
sqlplus username/password@serverIP/侦听服务名 @命令文件名称
以下举一个样例。
命令文件名称为 1.sql。内容例如以下:
select count(*) from dba_objects;
exit;
运行命令为:
sqlplus sys/***@172.16.2.190/xgdb.db001.xigang @1.sql
此时运行完毕会把结果输出。
这样的外部命令文件的方式。须要建立单独的物理文件来存储命令。适合常常使用的大批量管理任务。
2.2 通过标准输入
既然sqlplus从标准输入来读取命令,那么就能够利用管道把命令发送给它。
echo 命令 | sqlplus username/password@serverIP/侦听服务名
这样的方式不须要在命令中包括 exit;,因为sqlplus运行后自己主动退出。以下是个样例:
echo 'select count(*) from dba_objects;' | sqlplus sys/***@172.16.2.190/xgdb.db001.xigang as sysdba
这样运行后结果输出到屏幕。因为sql语句是bash命令的參数。而整个命令行能够通过bash方便的历史记录来反复调用。又能够方便的使用上下箭头来反复使用运行过的sql语句了。
3 利用管道做兴许处理
既然sqlplus把结果输出到了标准输出,那么就能够借助管道,使用sed,awk等文字处理工具来得到想要的输出。
echo -e 'set pagesize 0\nselect table_name,owner from dba_tables;' | sqlplus -S sys/***@172.16.2.190/xgdb.db001.xigang as sysdba | awk '{printf("%-10d%-30s%-20s\n",NR,$1,$2);}'
4 须要注意的地方
使用外部文件时,文件里的命令与交互式使用全然同样,无需操心。
使用echo + 管道输入时,要避免 bash 元字符的干扰。一定要把sql命令使用单引號或双引號保护起来。
当sql命令中有单引號时。应选择使用双引號保护。如
echo "insert into t1(name) values('奥巴马');" | sqlplus ...
因为$在双引號里也会被当成元字符。所以须要对其进行转义
echo "select * from v\$nls_valid_values where parameter='LANGUAGE';" | sqlplus ...
另外,sqlplus不同意把sqlplus指令和sql命令混合在一行使用。
并且sql命令必须以;结尾。这样必须使用echo -e 选项来开启把”\n”解释成换行符。
比如
echo -e 'set pagesize 0\nset linesize 100\nselect * from dba_objects;' | sqlplus ...
5 一个简单的脚本
上述命令行方式尽管能够方便的通过bash的历史记录功能调用运行过的sql语句,可是命令行中除了sql语句还有大量的其它内容,显得繁琐。所以。写一个小脚本(文件名称为sql)会让调用起来很方便,例如以下:
#!/bin/bash -
if [ $# -ne 1 ]
then
echo "Usage: $0 'SQL statement'"
else
SQL="set pagesize 0\nset linesize 300\n$1"
echo -e "$SQL"
echo -e "$SQL" | sqlplus -S sys/***@172.16.2.190/xgdb.db001.xigang as sysdba
fi
这样调用起来就像以下一样。
sql 'select * from dba_objects;'
这样显得很干净利落。并且也不会在历史命令中记下ORACLE的账户信息,相对也安全。
sqlplus的非交互式使用的更多相关文章
- mysql交互式连接&非交互式连接
交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议. 非交互式操作:就是你在你的项目中进行程序调用.比如一边是tom ...
- 登录式与非登录式&交互式与非交互式shell及其环境初始化过程
交互式shell和非交互式shell(interactive shell and non-interactive shell) 交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的 ...
- 交互式shell和非交互式shell、登录shell和非登录shell的区别
交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(intera ...
- shell脚本分为三类:登录脚本、交互式脚本、非交互式脚本
shell脚本分为三类:登录脚本.交互式脚本.非交互式脚本 一. 登录脚本类似于windows下的计算机设置中的登录脚本和账户设置下的登录脚本的合集(我是这么理解的哈). 其配置文件的关键词为pref ...
- MHA手动切换 原创4 (非交互式切换)
非交互式切换:不输 YES 或者 NO [root@monitor app1]# masterha_master_switch --conf=/etc/masterha/app1.conf --mas ...
- 交互式shell和非交互式shell的区别
交互式模式就是shell等待你的输入,并且执行你提交的命令.这种模式被称作交互式是因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录.执行一些命令.签退.当你签退后,shell也终止 ...
- fdisk 非交互式创建 分区
一. key 非交互式创建分区, 与 交互式创建分区区别不大. 使用 fdisk 的默认选项, 使用空行即可, 不用回车. 创建 主分区 和 扩展分区时, 需要注意 分区号 二. 创建主分区 fdis ...
- parted分区和挂载及非交互式操作
author : headsen chen date : 2017-11-17 09:45:36 个人原创,转载请注明作者,出处,否则依法追究法律责任 1,将磁盘上原有的分区删除掉: 进入:#pa ...
- RHEL6非交互式工具sshpass和expect安装
RHEL6非交互式工具sshpass和expect安装 1 sshpass 在rhel6.4上,没有sshpass的软件包,无法采用yum方式安装.从源码编译安装非常简单. 1) 下载sshpass源 ...
随机推荐
- python采集百度搜索结果带有特定URL的链接
#coding utf-8 import requests from bs4 import BeautifulSoup as bs import re from Queue import Queue ...
- c# Resolve SQlite Concurrency Exception Problem (Using Read-Write Lock)
This article describes the c# example to solve the problem of SQlite concurrent exception method. To ...
- 框架——flask知识点回顾
1. flask--轻量级Web开发框架 2. Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL 3. Web程序框架的意义: 用于搭建Web应用程序 免去不同Web应用 ...
- Analysis of FCN
全卷积网络 FCN 详解 背景 CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题.神经网络大神Jonathan Long发表了<Fully ...
- MySQL中MyISAM与InnoDB区别及选择(转)
InnoDB: 支持事务处理等 不加锁读取 支持外键 支持行锁 不支持FULLTEXT类型的索引 不保存表的具体行数,扫描表来计算有多少行 DELETE 表时,是一行一行的删除 InnoDB 把数据和 ...
- ztree模糊搜索
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="X ...
- Poj3624 Charm Bracelet (01背包)
题目链接:http://poj.org/problem?id=3624 Description Bessie has gone to the mall's jewelry store and spie ...
- [转载]Oracle Golden Gate - 概念和机制 (ogg)
出处:https://www.cnblogs.com/qiumingcheng/p/5435907.html Golden Gate(简称OGG)提供异构环境下交易数据的实时捕捉.变换.投递. OGG ...
- P2P原理(转)
P2P(Peer to Peer)对等网络 P2P技术属于覆盖层网络(Overlay Network)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式.在C/S模式中,数据的分发 ...
- 复习-css控制文本字体属性
css控制文本字体属性 font-family:字体系列,如”serif“”sans-serif“ font-size:尺寸 font-style:字体样式,如“normal,italic(斜体).o ...