关于oraclelinuxshellsqlloader导入文件以及exp备份的优化问题和shell导出oracle执行sql脚本的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Linux-
关于oracle linux shell sqlloader导入文件以及exp备份的优化问题和shell导出oracle执行sql脚本的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Linux - Shell - shell 执行方式、Linux - 常用 shell 简介及 shell 基本操作、Linux =有没有类似“Java Shell”而不是其他Linux shell?、linux oracle 上如何用 shell 脚本来将 oracle 的各项性能数据查询出来,并上传等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- oracle linux shell sqlloader导入文件以及exp备份的优化问题(shell导出oracle执行sql脚本)
- Linux - Shell - shell 执行方式
- Linux - 常用 shell 简介及 shell 基本操作
- Linux =有没有类似“Java Shell”而不是其他Linux shell?
- linux oracle 上如何用 shell 脚本来将 oracle 的各项性能数据查询出来,并上传
oracle linux shell sqlloader导入文件以及exp备份的优化问题(shell导出oracle执行sql脚本)
在进行导入和导出的时候,因为数据源不是exp导出的,所以需要自己写控制文件。
linux_sql.ctl(如果需要从shell脚本中向ctl中传递变量,参考这里的第三条)
load data infile './test.unl' append into table TBL_MERCH_INFO_TEST fields terminated by '@|#' trailing nullcols ( MERCH_ID,CLIENT_ID,PROV_CODE,BRANCH_ID,AREA )
#!/bin/bash DATE_STRING=$(date +%Y%m%d) DATE_STRING_LOG=${DATE_STRING}"log" DATE_STRING_BAD=${DATE_STRING}"bad" ERRORS_NUM=1000 ROWS_SUBMIT=200000 DB_USER="user" DB_PASS="password" DB_SERVICE="localhost/orcl" mkdir $DATE_STRING if [ ! -d $DATE_STRING ] then echo "[日志目录创建失败] $DATE_STRING" exit -1 fi echo "开始导入..." sqlldr $DB_USER/$DB_PASS@$DB_SERVICE control=linux_sql.ctl log=$DATE_STRING/$DATE_STRING_LOG.log bad=$DATE_STRING/$DATE_STRING_BAD.log errors=$ERRORS_NUM rows=<span>$ROWS_SUBMIT</span> <span>direct=y</span> echo "导入完成。"数据总量大概在125W条左右,之前的rows_submit设置的太小了,全部导入需要17分钟,改为100000或者200000后,可以达到3分钟左右
按表备份,因为不需要备份所有的表,所以只把自己需要的提取出来备份就可以
linux_exp.sh
#!/bin/bash DATE_STRING=$(date +%Y%m%d) DB_USER="user" DB_PASS="password" DB_SERVICE="localhost/orcl" DB_BUFFER=10240000 mkdir -p $DATE_STRING if [ ! -d $DATE_STRING ] then echo "[备份目录创建失败] $DATE_STRING" exit -1 fi echo "[表备份目录] $DATE_STRING" echo "开始按表进行备份..." #从数据库中读取数据表的名称 SLCT_TBLNM_RSLT=` sqlplus -s $DB_USER/$DB_PASS@$DB_SERVICE<< EOF set echo off Feedback off heading off underline off; select TABLE_NAME from USER_TABLES where TABLE_NAME like 'TBL%'; commit; exit; EOF` #开始进行数据库备份 for loop in `echo "$SLCT_TBLNM_RSLT" | sed 's/ //g;s/-//g'` do FILENAME=`echo $loop` exp $DB_USER/$DB_PASS@$DB_SERVICE buffer=$DB_BUFFER file=./$DATE_STRING/$FILENAME.dmp tables=$loop done echo "按表备份结束" exit 0关键在于buffer,之前buffer值设为64000的时候,需要大概3分钟,设为10240000,只需要18s,buffer的值在1024000到10240000之间时达到最优。
Linux - Shell - shell 执行方式
- 概述
- shell 的执行方式
- 背景
- 偶尔执行个 shell 脚本
- 一般都用 ./<script> 执行
- 最近忽然看到 有不同的执行方式, 感觉有必要整理一下, 然后和大家分享
- 偶尔执行个 shell 脚本
- 准备
- os
- centos7
- shell
- bash
- os
1. shell 脚本的普通执行
- shell 脚本执行
最常用的执行方式
> cd <path/to/scriptDir> > ./<script> [option and args]
- 其实 shell 脚本, 还有 其他的 执行方式
2. 其他的执行方式
普通方式
> cd <path/to/scriptDir> > ./<script> [option and args]
source
# 纳尼? source 也是用来执行脚本的? > cd <path/to/scriptDir> > source <script> [option and args]
普通加 &
> cd <path/to/scriptDir> > ./<script> [option and args]
3. 场景: 设置环境变量
- 一般的变量
- 只能在 当前 shell 里生效
- 其他 shell 里无法生效
- 只能在 当前 shell 里生效
- 环境变量
- 可以在 当前 shell 和 子 shell 里生效
- 设置环境变量
命令
# 方法1: 设置变量后, 直接 export > foo=bar > export foo # 方法2: 在 ~/.bash_profile 或者 /etc/profile 里添加, 然后 source 配置文件
- 方法2 的疑问
- 疑问1: source 不是执行 shell 脚本的吗?
- 解答
- 没错, 这些配置文件, 本质上就是 shell 脚本
- 解答
- 疑问2: 为啥要用 source, 直接 ./不行吗?
- 卧槽, 可以试试啊...
- 疑问1: source 不是执行 shell 脚本的吗?
4. 实验: 配置 环境变量
- 场景
- 配置环境变量
脚本
#!/bin/bash # demo.sh foo=bar export foo
- 验证变量是否生效
命令
> env | grep foo
- 配置环境变量
1. 方案1: source
命令
> source demo.sh
- 结果
- 没有问题
2. 方案2: ./
命令
> ./demo.sh
- 结果
- 发现检测不到 foo 的值
3. 方案3; ./ &
命令
> ./demo.sh &
- 结果
- 发现检测不到 foo 的值
4. 疑问: 为啥只有 方法1 可以呢?
4. 再次尝试: 是不是环境变量没有设置上啊
- 疑问
- 方法2 真的设置好变量了吗
脚本
#!/bin/bash foo=bar export foo env | grep foo
- 结果
- 脚本正常运行
- 运行完成
- 显示了 foo=bar
- 然后, 我再次尝试寻找环境变量
还是没有
> env | grep foo
- 脚本正常运行
- 疑问
- 这次确实设置上来, 为啥还是没有呢?
5. 环境变量
- 一般变量
- 作用域
- 只能在当前 shell 中使用
- 其他 shell 都不行
- 作用域
- 环境变量
- 作用域
- 当前 shell 和 子shell
- 回想一下
- 在 当前shell 配置了环境变量, 你重新开一个 ssh 是不是用不了这个变量?
- 作用域
- 用户变量
- 作用域
- 以 特定用户身份 登录的所有 shell
- 配置
- 用户目录的 .bash_profile 文件
- 好像 .bashrc 也有
- 废话, bashrc 会被 bash_profile 执行
- 好像 .bashrc 也有
- 用户目录的 .bash_profile 文件
- 机制
- 以 用户身份启动 shell 前, 会执行这个脚本
- 作用域
- 初始变量
- 作用域
- 所有 shell
- 配置
- /etc/bash_profile
- 机制
- 启动 shell 前, 会执行这个脚本
- 作用域
- 疑问
- 既然环境变量是 当前 shell 和 子 shell
- 那会不会是 shell 的关系?
6. shell 执行
- 执行方式
source <script>
./<script>
./<scirpt> &
- 区别
- 他们最主要区别, 是 shell 的区别
1. source <script>
- shell
- 使用 当前shell 执行
- 当前 shell 的 stdin, stdout, stderr 占用 console
- 使用 当前shell 执行
2. ./<script>
- shell
- 使用 当前shell 的 子shell 执行
- 当前 shell 直接挂机
- 子shell 接管 console
- stdin, stdout, stderr
bash <script>
跟这个一样, 就不单独列出来了
- 使用 当前shell 的 子shell 执行
3. ./<scirpt> &
- shell
- 使用 当前shell 的 子shell 执行
- 当前 shell 继续占用 console
- 子 shell 在后台执行
- 会返回一个 job 的编号
- 使用 当前shell 的 子shell 执行
7. 结合之前的环境变量, 大概可以做出如下的推理
- source 方法生效
- source 给当前 shell 配置了 环境变量
- 配置成功了后, 直接找到, 没有问题
./<script>
不生效- 用 script 执行命令后, 会首先生成 子shell
- 命令在 子shell 中, 配置了一个 环境变量
- 执行结束, 控制权返回 父shell
- 可是环境变量在 父shell 里不生效
./<script> &
不生效- 情况同上面的 类似
ps
- ref
- 学习 bash
- Linux - Shell - 变量简介
- &
- 这玩意是什么鬼
- 相关的 job 命令, 又是什么鬼
Linux - 常用 shell 简介及 shell 基本操作
1. 查询 shell 环境变量,切换 shell 种类
表明目前使用的 shell 种类是 bash。
要想改变 shell 种类,在终端输入想要运行的 shell 名称即可。在切换 shell 种类的过程中,可能会操作失败,这是因为 ubuntu 没有自带安装想要切换的 shell 种类。
2.shell 命令的基本格式
shell 的命令格式如下:
command -options [argument]
command:shell 命令的名称。
-options: 选项,同一个命令可能有很多不同的选项,用来完成不同的具体功能。
[argument]: 参数,作为 shell 命令的输入,有的 shell 命令可以没有参数,或者不带参数运行。
例如:
ls //查看当前目录下的文件及文件夹
ls -l //查看当前目录下的文件及文件夹的详细信息
ls -l /home //查看/home目录下的文件及文件夹的详细信息
3.shell 的常用特殊符号
(1)“*”
是一个通用符号,可以表示任意一个字符(包括空字符)或多个字符组成的字符串。例如
ls -l /bin/e* //查看/bin/目录下的所有以e开头的文件及文件夹的详细信息
(2)“?”
功能类似于 “*” 符号,但是只能表示单个字符,不能表示由多个字符组成的字符串。例如
ls -l /bin/e? //查看/bin/目录下的所有以e开头的长度为2的文件及文件夹的详细信息
(3)“[ ]”
指定范围,用来指定被显示的内容的范围。例如,在 /home/leon 目录下新建一个文件夹,名为 test, 在 test 文件夹下新建 5 个文件夹,名为 a、b、c、d、e。
cd /home/leon/test //进入到该目录下cd /home/leon/test
ls [a-c] //仅查看名为a~c的文件及文件夹
(4)“!”
排除符号,用来指定被屏蔽显示内容的部分。需要与 “[]” 符号联合使用。例如
ls [a-c] //仅查看名为a~c的文件及文件夹
(5)“;”
分割符号,用于在一行输入多个命令时,分隔各个命令。例如
ls;ls -l //查看当前目录下的文件及文件夹,然后查看他们的详细信息
(6)“`”
命令替代符,这个符号总是成对出现,他们包含的内容在 shell 中表示一条命令,并且会被执行。例如
echo `ls -l` //将命令“ls -l”的结果显示出来
echo ''ls -l'' //这里是单引号,表示显示“ls-l”这个字符串
(7)“#”
注释符号,以 “#” 开头的一行被当作是注释处理,不会被执行。
ls -l //查看当前目录下的文件和文件夹的详细信息
# ls -l //添加上“#”号,该命令被当作注释,不会被执行
4. 自动补全功能
输入 “who”, 然后按住 TAB 键,系统将发出警报声,此时可以继续输入,也可以在此按下 TAB 键,系统将列出说有 who 开头的命令。
5. 按方向键上和下可以选择曾经输入过的历史命令。
6.shell 别名机制
需要用到 “alias” 命令
mynet //输入mynet,Linux中并无此命令
ifconfig //ifconfig命令可以查看网络情况
alias mynet=ifconfig //给ifconfig起个别名mynet
mynet //mynet就可以生效了
Linux =有没有类似“Java Shell”而不是其他Linux shell?
解决方法
linux oracle 上如何用 shell 脚本来将 oracle 的各项性能数据查询出来,并上传
这是抄的一个 DBA 的脚本,在服务器上用 shell 将 oracle 数据库的数据查到,包括查询 141 主库,和 142 备库,然后用 ftp 上传到外网的一个服务器上进行展示,脚本有些长,直接用 nodepad++ 打开即可
#!/bin/ksh
time=date +''%Y%m%d%T''
. ~/.bash_profile
VALUE=sqlplus -silent "/ as sysdba" << END <br/>set pagesize 0 feedback off verify off heading off echo off <br/>select ''空闲空间:''||round(free_mb/1024)||''G,使用率:''||trunc((total_mb-free_mb)/total_mb*100)||''%'' from v\\\$asm_diskgroup where name=''FRA'';<br/>exit; <br/>END
echo "电子税务局数据库巡检时间 ${time}:${VALUE}"> /home/oracle/monitor/mon_space/logs/framon${time}.log
#mon session cnt
echo >>/home/oracle/monitor/mon_space/logs/framon${time}.log
VALUE=sqlplus -silent "/ as sysdba" << END<br/>set pagesize 0 feedback off verify off heading off echo off<br/>select ''会话数 ''||listagg(info, '','') WITHIN GROUP(ORDER BY info) names<br/>from (select ''节点'' || inst_id || '':'' || count(*) info<br/>from gv\\\$session<br/>group by inst_id);<br/>exit;<br/>END
echo "${VALUE}">> /home/oracle/monitor/mon_space/logs/framon${time}.log
#mon wait cnt
echo >>/home/oracle/monitor/mon_space/logs/framon${time}.log
VALUE=sqlplus -silent "/ as sysdba" << END<br/>set pagesize 0 feedback off verify off heading off echo off<br/>select /*+rule*/''活动会话数:''||count(*) from gv\\\$session where type=''USER'' and wait_class<>''Idle''<br/>union all<br/>select ''CPU使用率 ''||listagg(info, '','') WITHIN GROUP(ORDER BY info) names<br/>from (<br/>select ''节点''||inst_id||'': ''||round(sum(value)/2,1)||''%'' info from gv\\\$sysmetric where metric_name in (''Host CPU Utilization (%)'') group by inst_id<br/>);<br/>exit;<br/>END
echo "${VALUE}">> /home/oracle/monitor/mon_space/logs/framon${time}.log
#mon tablespace
echo >>/home/oracle/monitor/mon_space/logs/framon${time}.log
VALUE=sqlplus -silent "/ as sysdba" << END<br/>set pagesize 0 feedback off verify off heading off echo off<br/>select ''表空间使用率超过75%为:''||listagg(used_percent,'','') WITHIN GROUP(ORDER BY used_percent) names<br/>from<br/>(select a.tablespace_name||'' ''||<br/>round(replace((a.sz-b.sz)/a.sz*100,'','',''.''),2)||''%'' used_percent<br/>from (select tablespace_name,sum(bytes)/1048576 sz<br/>from dba_data_files group by tablespace_name) a,<br/>(select tablespace_name,sum(bytes)/1048576 sz<br/>from dba_free_space group by tablespace_name) b<br/>where a.tablespace_name=b.tablespace_name(+) <br/>and round(replace((a.sz-b.sz)/a.sz*100,'','',''.''),2)>=75);<br/>exit;<br/>END
echo "${VALUE}">> /home/oracle/monitor/mon_space/logs/framon${time}.log
#mon lock cnt
echo >>/home/oracle/monitor/mon_space/logs/framon${time}.log
VALUE=sqlplus -silent "/ as sysdba" << END<br/>set pagesize 0 feedback off verify off heading off echo off<br/>select /*+rule*/''数据库锁数量:''||count(*) from gv\\\$lock where request<>0;<br/>exit;<br/>END
echo "${VALUE}">> /home/oracle/monitor/mon_space/logs/framon${time}.log
#disk=df -mP /home|column -t |sed 1d | awk ''{print "disk:"$5}''|tr -d %
#echo ",141 磁盘空间:/home"${disk}>>/home/oracle/monitor/mon_space/logs/framon${time}.log
#disk=df -mP /|column -t |sed 1d | awk ''{print "disk:"$5}''|tr -d %
#echo ",/:"${disk}>>/home/oracle/monitor/mon_space/logs/framon${time}.log
#mon memory 141
echo >>/home/oracle/monitor/mon_space/logs/framon${time}.log
memused=free -m |grep buffers\/ |awk -F '':'' ''{print $2}'' |awk ''{print $1}''
available=free -m |grep buffers\/ |awk -F '':'' ''{print $2}'' |awk ''{print $2}''
memtotal=free -m |grep Mem |awk ''{print $2}''
memrate=expr $memused \* 100 / $memtotal
echo "服务器 141 内存使用率:" >>/home/oracle/monitor/mon_space/logs/framon${time}.log
echo ${memrate}%, >>/home/oracle/monitor/mon_space/logs/framon${time}.log
#mon memory 142
echo >>/home/oracle/monitor/mon_space/logs/framon${time}.log
memused=ssh 87.12.74.142 free -m |grep buffers\/ |awk -F '':'' ''{print $2}'' |awk ''{print $1}''
available=ssh 87.12.74.142 free -m |grep buffers\/ |awk -F '':'' ''{print $2}'' |awk ''{print $2}''
memtotal=ssh 87.12.74.142 free -m |grep Mem |awk ''{print $2}''
memrate=expr $memused \* 100 / $memtotal
echo "服务器 142 内存使用率:" >>/home/oracle/monitor/mon_space/logs/framon${time}.log
echo ${memrate}% >>/home/oracle/monitor/mon_space/logs/framon${time}.log
#mon disk
spvalue=70
SPACE=df -hP 2>/dev/null | awk ''int($5)>''$spvalue'' {print $6,$5}'' | wc -l
if [ $SPACE -gt 0 ]
then
echo 141 文件系统使用率: >>/home/oracle/monitor/mon_space/logs/framon${time}.log
df -hP 2>/dev/null | awk ''int($5)>''$spvalue'' {print $6,$5}'' >>/home/oracle/monitor/mon_space/logs/framon${time}.log
fi
SPACE=ssh gxgs-xwssb-nwyw-db2 df -hP 2>/dev/null | awk ''int($5)>''$spvalue'' {print $6,$5}'' | wc -l
if [ $SPACE -gt 0 ]
then
echo 142 文件系统使用率: >>/home/oracle/monitor/mon_space/logs/framon${time}.log
ssh gxgs-xwssb-nwyw-db2 df -hP 2>/dev/null | awk ''int($5)>''$spvalue'' {print $6,$5}'' >>/home/oracle/monitor/mon_space/logs/framon${time}.log
fi
#weblogic thread count
echo >>/home/oracle/monitor/mon_space/logs/framon${time}.log
VALUE=sqlplus -silent "/ as sysdba" << END<br/>set pagesize 0 feedback off verify off heading off echo off<br/>select ''weblogic独占线程超过30的数量:''||count(1) from hlwsb_sjfx.dzswj_monitor_weblogic_thread t where t.mon_date>sysdate- (30/1440) and t.hoggingthreadcount>30;<br/>exit;<br/>END
echo "${VALUE}">> /home/oracle/monitor/mon_space/logs/framon${time}.log
#weblogic thread mingxi
echo >>/home/oracle/monitor/mon_space/logs/framon${time}.log
VALUE=sqlplus -silent "/ as sysdba" << END<br/>set pagesize 0 feedback off verify off heading off echo off<br/>select ''weblogic独占线程超过30的服务明细:''|| to_char(wmsys.wm_concat(t.serverport)) from hlwsb_sjfx.dzswj_monitor_weblogic_thread t where t.mon_date>sysdate- (30/1440) and t.hoggingthreadcount>30<br/>group by t.serverport;<br/>exit;<br/>END
echo "${VALUE}">> /home/oracle/monitor/mon_space/logs/framon${time}.log
USER=weblogic
#密码
PASSWORD=Hlwsb101#%
#下载文件目录 1
SRCDIR=/home/weblogic/logstail/oracle_monitor/logs/
#FTP 目录 (待下载文件目录)
DESDIR=/home/oracle/monitor/mon_space/logs/
IP=87.16.16.218
PORT=3522
lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT}<<EOF
lcd ${DESDIR}
cd ${SRCDIR}
mput mon
by
EOF
rm -f /home/oracle/monitor/mon_space/logs/*
关于oracle linux shell sqlloader导入文件以及exp备份的优化问题和shell导出oracle执行sql脚本的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Linux - Shell - shell 执行方式、Linux - 常用 shell 简介及 shell 基本操作、Linux =有没有类似“Java Shell”而不是其他Linux shell?、linux oracle 上如何用 shell 脚本来将 oracle 的各项性能数据查询出来,并上传等相关知识的信息别忘了在本站进行查找喔。
本文标签: