GVKun编程网logo

oracle linux shell sqlloader导入文件以及exp备份的优化问题(shell导出oracle执行sql脚本)

2

关于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脚本)

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
)


linux_sqlldr.sh

#!/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 执行方式

Linux - Shell - shell 执行方式

  1. 概述
    1. shell 的执行方式
  2. 背景
    1. 偶尔执行个 shell 脚本
      1. 一般都用 ./<script> 执行
    2. 最近忽然看到 有不同的执行方式, 感觉有必要整理一下, 然后和大家分享
  3. 准备
    1. os
      1. centos7
    2. shell
      1. bash

1. shell 脚本的普通执行

  1. shell 脚本执行
    1. 最常用的执行方式

      > cd <path/to/scriptDir>
      > ./<script> [option and args]
  2. 其实 shell 脚本, 还有 其他的 执行方式

2. 其他的执行方式

  1. 普通方式

    > cd <path/to/scriptDir>
    > ./<script> [option and args]
  2. source

    # 纳尼? source 也是用来执行脚本的?
    > cd <path/to/scriptDir>
    > source <script> [option and args]
  3. 普通加 &
    > cd <path/to/scriptDir> > ./<script> [option and args]

3. 场景: 设置环境变量

  1. 一般的变量
    1. 只能在 当前 shell 里生效
      1. 其他 shell 里无法生效
  2. 环境变量
    1. 可以在 当前 shell 和 子 shell 里生效
  3. 设置环境变量
    1. 命令

      # 方法1: 设置变量后, 直接 export
      > foo=bar
      > export foo
      # 方法2: 在 ~/.bash_profile 或者 /etc/profile 里添加, 然后 source 配置文件
    2. 方法2 的疑问
      1. 疑问1: source 不是执行 shell 脚本的吗?
        1. 解答
          1. 没错, 这些配置文件, 本质上就是 shell 脚本
      2. 疑问2: 为啥要用 source, 直接 ./不行吗?
        1. 卧槽, 可以试试啊...

4. 实验: 配置 环境变量

  1. 场景
    1. 配置环境变量
      1. 脚本

        #!/bin/bash
        # demo.sh
        foo=bar
        export foo
    2. 验证变量是否生效
      1. 命令

        > env | grep foo

1. 方案1: source

  1. 命令

    > source demo.sh
  2. 结果
    1. 没有问题

2. 方案2: ./

  1. 命令

    > ./demo.sh
  2. 结果
    1. 发现检测不到 foo 的值

3. 方案3; ./ &

  1. 命令

    > ./demo.sh &
  2. 结果
    1. 发现检测不到 foo 的值

4. 疑问: 为啥只有 方法1 可以呢?

4. 再次尝试: 是不是环境变量没有设置上啊

  1. 疑问
    1. 方法2 真的设置好变量了吗
  2. 脚本

    #!/bin/bash
    foo=bar
    export foo
    env | grep foo
  3. 结果
    1. 脚本正常运行
      1. 运行完成
      2. 显示了 foo=bar
    2. 然后, 我再次尝试寻找环境变量
      1. 还是没有

        > env | grep foo
  4. 疑问
    1. 这次确实设置上来, 为啥还是没有呢?

5. 环境变量

  1. 一般变量
    1. 作用域
      1. 只能在当前 shell 中使用
      2. 其他 shell 都不行
  2. 环境变量
    1. 作用域
      1. 当前 shell 和 子shell
    2. 回想一下
      1. 在 当前shell 配置了环境变量, 你重新开一个 ssh 是不是用不了这个变量?
  3. 用户变量
    1. 作用域
      1. 以 特定用户身份 登录的所有 shell
    2. 配置
      1. 用户目录的 .bash_profile 文件
        1. 好像 .bashrc 也有
          1. 废话, bashrc 会被 bash_profile 执行
    3. 机制
      1. 以 用户身份启动 shell 前, 会执行这个脚本
  4. 初始变量
    1. 作用域
      1. 所有 shell
    2. 配置
      1. /etc/bash_profile
    3. 机制
      1. 启动 shell 前, 会执行这个脚本
  5. 疑问
    1. 既然环境变量是 当前 shell 和 子 shell
    2. 那会不会是 shell 的关系?

6. shell 执行

  1. 执行方式
    1. source <script>
    2. ./<script>
    3. ./<scirpt> &
  2. 区别
    1. 他们最主要区别, 是 shell 的区别

1. source <script>

  1. shell
    1. 使用 当前shell 执行
      1. 当前 shell 的 stdin, stdout, stderr 占用 console

2. ./<script>

  1. shell
    1. 使用 当前shell 的 子shell 执行
      1. 当前 shell 直接挂机
      2. 子shell 接管 console
        1. stdin, stdout, stderr
    2. bash <script> 跟这个一样, 就不单独列出来了

3. ./<scirpt> &

  1. shell
    1. 使用 当前shell 的 子shell 执行
      1. 当前 shell 继续占用 console
      2. 子 shell 在后台执行
        1. 会返回一个 job 的编号

7. 结合之前的环境变量, 大概可以做出如下的推理

  1. source 方法生效
    1. source 给当前 shell 配置了 环境变量
    2. 配置成功了后, 直接找到, 没有问题
  2. ./<script> 不生效
    1. 用 script 执行命令后, 会首先生成 子shell
    2. 命令在 子shell 中, 配置了一个 环境变量
    3. 执行结束, 控制权返回 父shell
    4. 可是环境变量在 父shell 里不生效
  3. ./<script> & 不生效
    1. 情况同上面的 类似

ps

  1. ref
    1. 学习 bash
    2. Linux - Shell - 变量简介
  2. &
    1. 这玩意是什么鬼
    2. 相关的 job 命令, 又是什么鬼
posted @ 2019-12-14 21:55 轩辕拾銉 阅读(...) 评论(...) 编辑 收藏 刷新评论刷新页面返回顶部

Linux - 常用 shell 简介及 shell 基本操作

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 =有没有类似“Java Shell”而不是其他Linux shell?

我最了解的编程语言是 Java.目前,我必须编写相当多的“shell脚本”来自动化我的服务器.有没有像“Java Shell”这样的东西,所以我可以用Java编写shell脚本?

解决方法

你可以得到groovy并使用groovysh.我已经做了一些事情,但我发现perl或bash / sh对于管理脚本最有用.当您需要做的就是执行OS命令和搜索文本时,像Java这样的应用程序语言会增加很多开销.

linux oracle 上如何用 shell 脚本来将 oracle 的各项性能数据查询出来,并上传

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" &lt;&lt; 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" &lt;&lt; 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" &lt;&lt; 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&lt;&gt;''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" &lt;&lt; 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)&gt;=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" &lt;&lt; END<br/>set pagesize 0 feedback off verify off heading off echo off<br/>select /*+rule*/''数据库锁数量:''||count(*) from gv\\\$lock where request&lt;&gt;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&gt;/dev/null | awk ''int($5)&gt;''$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&gt;/dev/null | awk ''int($5)&gt;''$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" &lt;&lt; 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&gt;sysdate- (30/1440) and t.hoggingthreadcount&gt;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" &lt;&lt; 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&gt;sysdate- (30/1440) and t.hoggingthreadcount&gt;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 的各项性能数据查询出来,并上传等相关知识的信息别忘了在本站进行查找喔。

本文标签: