Linux系统安装Oracle
<p>[TOC]</p>
<h3>安装包下载地址:[点击下载oracle](<a href="http://101.69.243.254:5010/share/N96RROHH">http://101.69.243.254:5010/share/N96RROHH</a> "点击下载oracle安装包")</h3>
<h3>1. 检查服务器是否已安装Oracle</h3>
<ul>
<li><strong>查看安装的主目录和环境变量</strong>
<pre><code class="language-shell">echo $ORACLE_HOME
env | grep ORA</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/88095e0927d84853c0778d34407730be" alt="" />
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/0587b1e1b63a98ae2d89316fd1abe128" alt="" /></p></li>
<li><strong>查看实例名</strong>
<pre><code class="language-shell">su - oracle
sqlplus / as sysdba
SQL&gt; select instance_name from v$instance;</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/ebc7ab040f702f9b63e323579762f230" alt="" /></p></li>
<li><strong>查看oracle启动的后台进程</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/404e623740a189681b30f24c24bd78ea" alt="" /></li>
<li><strong>关闭服务</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/bc5e7903b37d8a781063eedd7901da22" alt="" /></li>
<li><strong>再次查看oracle启动的后台进程,可以看到已经没有了</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/13d683205dd2245edd03f52d06c8b283" alt="" /></li>
<li><strong>查看监听lsnrctl status</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/8ab7071356e07cd1166bfbf836217a75" alt="" /></li>
<li><strong>停止监听lsnrctl stop</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/81906dfbbe601c3e9a7af72ac3ad484a" alt="" /></li>
<li><strong>删除$ORACLE_BASE目录下的子目录及文件</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/a71ccb7d4c86bb6bfb0f7db97208942f" alt="" /></li>
<li><strong>删除/usr/local/bin下的三个文件:dbhome,oraenv,coraenv</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/eb6eb24ababc016dbdc3a637ffa25fa1" alt="" /></li>
<li><strong>删除/etc下的两个文件:oratab和oralnst.loc</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/7b7d5ffc731620c3b0c5f535178e67f0" alt="" /></li>
<li><strong>删除/opt目录的ORCLfmap子目录</strong>
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/9d10d18406104c6e6ca46964836bca04" alt="" /></li>
<li><strong>删除建立的用户及组oinstall 和dba(若要重新安装可以不删除)</strong>
<pre><code class="language-shell">userdel –r oracle
groupdel oinstall
groupdel dba
groupdel oper</code></pre></li>
</ul>
<h3>2.安装环境设置</h3>
<h4>2.1修改hosts文件</h4>
<p>修改hosts文件保持ip与主机名对应。(如果服务器涉及到堡垒机主机名的话,不建议修改,可用hostname查看当前主机名)</p>
<pre><code class="language-shell">vim /etc/hosts
vim /etc/hostname
shutdown -r now # 服务器主机名修改后必须重启才能生效</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/8de8e037c4c68ea1ef1ef81bb010a932" alt="" />
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/0db81160f206351ae086a70370952d3c" alt="" />
<img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/725913e7672d28c43c3b61b095164d5b" alt="" /></p>
<p><code>注:重启之后,hosts文件若生效主机名则会更改为oracle,若不生效,则后面修改db_install.rsp文件的时候需要注意,ORACLE_HOSTNAME的值必须为命令hostname查询出的主机名</code></p>
<h4>2.2关闭Selinux</h4>
<pre><code class="language-shell">sed -i '7s/enforcing/disabled/' /etc/selinux/config
setenforce 0
getenvorce # 查看当前selinux模式</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/a0a2a2dec6d583fb92b27ad722eba11b" alt="" /></p>
<h4>2.3防火墙开放 1521 端口</h4>
<pre><code class="language-shell"># Centos 6防火墙iptables:
yum install -y iptables-services
vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
systemctl enable iptables
# CentOS 7防火墙firewalld
firewall-cmd --state # 查看防火墙状态
firewall-cmd --zone=public --add-port=1521/tcp --permanent # 永久开启1521端口
firewall-cmd --reload # 更新防火墙规则</code></pre>
<h4>2.4安装软件包</h4>
<p>如安装之后监听启动不了,重新逐个去安装依赖</p>
<pre><code class="language-shell">yum -y install binutils compat-libstdc++-33 compat-libstdc++-33.i686 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc++-devel make sysstat unixODBC unixODBC</code></pre>
<h4>2.5创建用户组与用户</h4>
<pre><code class="language-shell"># 创建用户组oinstall,dba,oper
groupadd oinstall
groupadd dba
groupadd oper
# 创建用户oracle并创建密码
useradd -g oinstall -G dba,oper oracle
# 修改用户密码
passwd oracle</code></pre>
<h4>2.6修改kernel内核</h4>
<pre><code class="language-java">vim /etc/sysctl.conf
kernel.shmmni=4096 #这个内核参数用于设置系统范围内共享内存段的最大数量,该参数的默认值是 4096,通常不需要更改。
kernel.shmmax=2147483648 #该参数定义了共享内存段的最大尺寸(以字节为单位),缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。
kernel.shmall=2097152 #该参数表示系统一次可以使用的共享内存总量(以页为单位),缺省值就是2097152,通常不需要修改。
kernel.sem=250 32000 100 128
fs.aio-max-nr=1048576
fs.file-max=65536 #设置最大打开文件数
net.ipv4.ip_local_port_range=9000 65500 #可使用的IPv4端口范围
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586
sysctl -p # 使改动立即生效</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/3145f460d62a221bd95ee612118dd594" alt="" /></p>
<h4>2.7修改系统资源限制</h4>
<pre><code class="language-java">vim /etc/security/limits.conf
oracle soft nproc 20470
oracle hard nproc 16384
oracle soft nofile 10240
oracle hard nofile 65536
oracle soft stack 10240</code></pre>
<h4>2.8修用户验证选项,关联设置</h4>
<pre><code class="language-shell">vim /etc/pam.d/login
#根据最后一条session规则的注释,应该加在最后一条规则之前
session required /lib64/security/pam_limits.so
session required pam_limits.so</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/188a6e082bd56144732affbef50609be" alt="" /></p>
<h4>2.9创建安装目录与目录权限</h4>
<pre><code class="language-shell">mkdir -p /risen/soft/database/oracle/product/11.2.0 # 安装目录
mkdir /risen/soft/database/oracle/oradata # 数据存储目录
mkdir /risen/soft/database/oracle/inventory # 清单目录
mkdir /risen/soft/database/oracle/fast_recovery_area # 恢复目录
chown -R oracle.oinstall /risen/soft/database/oracle # 递归修改目录归属
chmod -R 755 /risen/soft/database/oracle # 递归修改目录及文件权限</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/8b51af901978a70c20e5c8d24cfc0daa" alt="" /></p>
<h3>3.安装Oracle Database</h3>
<p>上传安装文件至/home目录下并解压,解压后都在生成的database目录下,若没有安装unzip则执行yum -y install unzip zip安装</p>
<pre><code class="language-shell">unzip p13390677_112040_Linux-x86-64_2of7.zip
unzip p13390677_112040_Linux-x86-64_1of7.zip</code></pre>
<h4>3.1准备Oracle安装应答模版文件</h4>
<pre><code class="language-shell">cp -a /home/database/response/* /risen/soft/database/oracle/
chown -R oracle.oinstall /risen/soft/database/oracle
chmod 755 /risen/soft/database/oracle/*.rsp # 给Oracle下后缀为rsp的文件设置权限</code></pre>
<h4>3.2修改 db_install.rsp 的内容</h4>
<pre><code class="language-java">su - oracle
cd /risen/soft/database/oracle/
vim db_install.rsp</code></pre>
<ul>
<li><strong>编辑文件修改内容如下</strong></li>
</ul>
<pre><code class="language-java"># 安装类型,只装数据库软件
oracle.install.option=INSTALL_DB_SWONLY
# 主机名称(命令hostname查询)
ORACLE_HOSTNAME=oracle
# 安装组
UNIX_GROUP_NAME=oinstall
# INVENTORY目录(**不填就是默认值,因个人创建安装目录而定)
INVENTORY_LOCATION=/risen/soft/database/oracle/inventory
# 选择语言
SELECTED_LANGUAGES=en,zh_CN
# oracle_home路径根据目录情况注意修改
ORACLE_HOME=/risen/soft/database/oracle/product/11.2.0
# oracle_base 注意修改
ORACLE_BASE=/risen/soft/database/oracle
# oracle版本
oracle.install.db.InstallEdition=EE
# 自定义安装,否,使用默认组件
oracle.install.db.EEOptionsSelection=false
# dba用户组
oracle.install.db.DBA_GROUP=dba
# oper用户组
oracle.install.db.OPER_GROUP=dba
# 注意此参数,设定一定要为true
DECLINE_SECURITY_UPDATES=true</code></pre>
<h4>3.3设置Oracle用户环境变量</h4>
<pre><code class="language-shell">su - oracle
vim ~/.bash_profile</code></pre>
<ul>
<li><strong>添加内容如下</strong></li>
</ul>
<pre><code class="language-shell">export ORACLE_BASE=/risen/soft/database/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=orcl
export ORACLE_OWNER=oracle
export NLS_LANG=american_america.AL32UTF8
export LANG=en_US.UTF-8 PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/lib:$ORACLE_HOME/bin
export PATH
source .bash_profile # 每次重启以后都要重新执行,单次有效</code></pre>
<h4>3.4在Oracle用户下开始安装</h4>
<pre><code class="language-shell">cd /home/database
./runInstaller -silent -ignorePrereq -responseFile /risen/soft/database/oracle/db_install.rsp</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/f3380f1183636821980542cfe9157e4c" alt="" />
安装时间较长,请耐心等待,出现以下内容代表安装成功
<img src="<a href="https://gitee.com/xiehzijun/risen/raw/master/img/image-20210517203045063.png"">https://gitee.com/xiehzijun/risen/raw/master/img/image-20210517203045063.png"</a>; alt="image-20210517203045063" style="zoom:50%;" /></p>
<pre><code class="language-shell">exit # 根据提示需要退回root用户执行
/risen/soft/database/oracle/inventory/orainstRoot.sh
/risen/soft/database/oracle/product/11.2.0/root.sh</code></pre>
<p>注意:重新安装oracle时,没有orainstRoot.sh文件
原因:没删除/etc/oraInst.loc文件
解决步骤:删除/etc/oraInst.loc文件,将新建目录下的文件全部清空,重新依次操作执行。</p>
<h4>3.5以静默方式配置监听</h4>
<pre><code class="language-shell">su - oracle
netca /silent /responseFile /risen/soft/database/oracle/netca.rsp</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/80b7339c573eb9836c31752e5da12d96" alt="" />
成功运行后,在/risen/soft/database/oracle/product/11.2.0/network/admin/中生成listener.ora和sqlnet.ora;通过netstat命令可以查看1521端口正在监听</p>
<pre><code class="language-shell">netstat -tnulp |grep 1521</code></pre>
<p><img src="<a href="https://gitee.com/xiehzijun/risen/raw/master/img/image-20210517203648174.png"">https://gitee.com/xiehzijun/risen/raw/master/img/image-20210517203648174.png"</a>; alt="image-20210517203648174" style="zoom:50%;" /></p>
<h4>3.6进行静默建立新库和实例</h4>
<pre><code class="language-shell">vim /risen/soft/database/oracle/dbca.rsp
#编辑文件修改如下内容
GDBNAME = &quot;orcl&quot;
SID = &quot;orcl&quot;
SYSPASSWORD = &quot;Risen@2021&quot;
SYSTEMPASSWORD = &quot;Risen@2021&quot;
SYSMANPASSWORD = &quot;Risen@2021&quot;
DBSNMPPASSWORD = &quot;Risen@2021&quot;
DATAFILEDESTINATION = /risen/soft/database/oracle/oradata/ # 数据目录
RECOVERYAREADESTINATION = /risen/soft/database/oracle/fast_recovery_area # 恢复目录
CHARACTERSET = &quot;AL32UTF8&quot;
TOTALMEMORY = &quot;6533&quot;</code></pre>
<p>开始静默安装</p>
<pre><code class="language-shell">dbca -silent -responseFile /risen/soft/database/oracle/dbca.rsp</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/09466a9e02e139f6b30b5580fdc32758" alt="" /></p>
<pre><code class="language-shell">lsnrctl status #查看状态
lsnrctl start #启动监听
lsnrctl stop #停止监听
lsnrctl relo1ad #重启监听</code></pre>
<p><img src="<a href="https://gitee.com/xiehzijun/risen/raw/master/img/image-20210705093646542.png"">https://gitee.com/xiehzijun/risen/raw/master/img/image-20210705093646542.png"</a>; alt="image-20210705093646542" style="zoom:50%;" />
静默安装常见问题 :<a href="https://www.cnblogs.com/bayolante/p/10417286.html">https://www.cnblogs.com/bayolante/p/10417286.html</a></p>
<h3>4.登陆查看实例状态</h3>
<pre><code class="language-shell">sqlplus / as sysdba
select status from v$instance;</code></pre>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/940dedb4ffd549d21831546577d374a3" alt="" />
Oracle 11g不能导出空表,设置deferred_segment_creation 参数:禁用"段推迟创建"(也就是直接创建segment),无论是空表还是非空表,都分配segment:
在sqlplus中,执行如下命令
<code>alter system set deferred_segment_creation=false;</code>
查看
<code>show parameter deferred_segment_creation;</code>
注意:该值设置后只对后面新增的表产生作用,对之前建立的空表(已经存在的)不起作用,仍不能导出。并且要重新启动数据库,让参数生效。</p>
<h3>5.Oracle数据库启动&关闭</h3>
<pre><code class="language-shell">用oracle用户执行sqlplus / as sysdba连接oracle
#分步启动:
STARTUP NOMOUNT; # 启动实例
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN; # 打开数据库
startup; # 直接启动
SHUTDOWN IMMEDIATE; # 关闭数据库
select* from v$version; # 查看数据库版本</code></pre>
<h3>6.Oracle创建测试表空间&测试用户</h3>
<pre><code class="language-shell"># 创建名为RISEN_TEXT的表空间
create tablespace RISEN_TEXT logging datafile'/risen/soft/database/oracle/oradata/orcl/RISEN_TEXT.dbf' size 1024m autoextend on next 100m maxsize 10240m extent management local;
# 创建库用户
create user RISEN_TEXT identified by RISEN_test@2021 default tablespace RISEN_TEXT; #创建名为RISEN_TEXT密码RISEN_test@2021关联RISEN_TEXT库的用户
# 赋予用户权限
grant dba to RISEN_TEXT; # 不建议给普通用户授予DBA权限,若无此权限工具登录提示缺乏创建会话权限;拒绝登录
# 查看所有拥有dba权限的用户
select * from dba_role_privs where granted_role='DBA';
# 取消用户dba权限(取消后必须重新授予用户创建session会话权限,否则无法正常登录使用)
revoke dba from RISEN_TEXT;
# 授予用户创建session会话权限
grant create session to RISEN_TEXT;</code></pre>
<h3>7.查询归档模式是否开启</h3>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/4f5c6a954f43f3990f6971c7534d6477" alt="" /></p>
<pre><code class="language-shell">archive log list; # 查询归档模式是否开启,Disabled/Enabled
sqlplus / as sysdba登录执行:
shutdown immediate; #关闭数据库
startup mount; #开启数据库至mount状态
修改数据库模式:
alter database noarchivelog; #关闭归档模式
alter database archivelog; #开启归档模式
show parameter recovery; #当前归档日志目录
alter system set db_recovery_file_dest='/risen/soft/database/oracle/fast_recovery_area' scope=spfile; #更改归档日志目录
alter system set db_recovery_file_dest_size=10G scope=spfile; #更改归档日志目录大小(根据磁盘内存调整)
alter database open; #打开数据库</code></pre>
<h3>8.定时清理归档日志</h3>
<pre><code class="language-shell">切换用户
su - oracle
cd /risen/data/sh #存放脚本的路径(根备份脚本呢放在一起)
vi del_arch.sh #创建清理脚本</code></pre>
<ul>
<li>添加如下内容</li>
</ul>
<pre><code class="language-shell">#!/bin/bash
echo &quot;----------------------------------------`date`---------------------------------------&quot;
source ~/.bash_profile
rman target / &gt;&gt; /risen/data/sh/del_archive.log &lt;&lt;EOF # 记录日志del_archive.log 后期检查是否执行成功
crosscheck archivelog all; # 把无效的expired的archivelog标出来
delete noprompt expired archivelog all; # 直接全部删除过期的归档日志
delete noprompt archivelog all completed before 'sysdate-7'; # 直接删除七天前所有的归档日志
exit
EOF
echo -e &quot;\n&quot;
echo &quot;------------------------------------ FINISHED ------------------------------------&quot;</code></pre>
<ul>
<li>设置定时任务</li>
</ul>
<pre><code class="language-shell">chmod +x del_arch.sh #授权脚本执行权限
crontab -e #设置定时任务
00 1 * * * sh /risen/data/sh/del_arc.sh # 每日1点执行</code></pre>
<h3>9.客户端连接测试</h3>
<p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/68cdec29d1cd7822ecfcad88c982caef" alt="" /></p>
<h3>10.设置开机启动</h3>
<pre><code class="language-shell"># 修改dbstart
vim /risen/soft/database/oracle/product/11.2.0/bin/dbstart
ORACLE_HOME_LISTNER=$ORACLE_HOME
# 修改dbshut
vim /risen/soft/database/oracle/product/11.2.0/bin/dbshut
ORACLE_HOME_LISTNER=$ORACLE_HOME
# 修改oratab
vim /etc/oratab
orcl:/risen/soft/database/oracle/product/11.2.0:Y</code></pre>
<ul>
<li>创建启动文件</li>
</ul>
<pre><code class="language-shell">vim /etc/init.d/oracle</code></pre>
<ul>
<li>添加如下内容</li>
</ul>
<pre><code class="language-shell">#!/bin/sh
# chkconfig: 345 61 61
# description: Oracle 11g R2 AutoRun Servimces
# /etc/init.d/oracle
#
# Run-level Startup script for the Oracle Instance, Listener, and
# Web Interface
export ORACLE_BASE=/risen/soft/database/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=orcl
export ORACLE_UNQNAME=$ORACLE_SID
export PATH=$ORACLE_HOME/bin:/user/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH ORA_OWNR=&quot;oracle&quot;
# if the executables do not exist -- display error
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo &quot;Oracle startup: cannot start&quot;
exit 1
fi
# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display
case &quot;$1&quot; in
start)
# Oracle listener and instance startup
su $ORA_OWNR -lc $ORACLE_HOME/bin/dbstart
echo &quot;Oracle Start Succesful!OK.&quot;
;;
stop)
# Oracle listener and instance shutdown
su $ORA_OWNR -lc $ORACLE_HOME/bin/dbshut
echo &quot;Oracle Stop Succesful!OK.&quot;
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo $&quot;Usage: 'basename $0' {start|stop|reload|reload}&quot;
exit 1
esac
exit 0</code></pre>
<ul>
<li>给启动文件设置权限</li>
</ul>
<pre><code class="language-shell">chmod +x /etc/init.d/oracle
chkconfig --add oracle
chkconfig oracle on
systemctl status/start/stop oracle.service</code></pre>
<h3>11.备份&还原</h3>
<p>导出dmp:</p>
<pre><code class="language-shell">exp 用户名/密码@ip:1521/ORCL owner=导出用户 file=F:\backup.dmp</code></pre>
<p>导入dmp:</p>
<pre><code class="language-shell">imp 用户名@ip:1521/ORCL file=D:\backup.dmp fromuser=导出用户 touser=导入指定用户;</code></pre>
<h3>12.开启自动备份策略</h3>
<p><a href="http://101.69.243.254:5010/share/vqMGRMM0/%E6%95%B0%E6%8D%AE%E5%BA%93/oracle">http://101.69.243.254:5010/share/vqMGRMM0/%E6%95%B0%E6%8D%AE%E5%BA%93/oracle</a></p>
<pre><code class="language-shell">mkdir -p /risen/soft/database/oracle/databak
vim oracle.sh</code></pre>
<ul>
<li>定时脚本内容</li>
</ul>
<p>修改环境变量oracle_base,oracle_home为当前oracle安装目录,oracle_sid,nls_lang与静默安装中文件dbca.rsp设置的值一样,修改用户名,密码,模式名,ip地址(若本地备份则不需要修改),oracle端口(默认为1521),备份文件的保留时间,备份文件夹(需自行创建)</p>
<pre><code class="language-shell">#!/bin/sh
#环境变量
export ORACLE_BASE=/risen/soft/database/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=en_US.UTF-8
export NLS_LANG=&quot;AMERICAN_AMERICA&quot;.AL32UTF8
#用户名
user=orcl
#密码
passwd=orcl
#实例名
Instance=orcl
#ip地址
ip=127.0.0.1
#oracle端口
port=1521
#保留天数
days=7
#备份文件夹
bakdir=/risen/soft/database/oracle/databak
#备份失败输出日志
errordir=$bakdir/errorlog
#备份数据库文件前缀
orowner=DB_$Instance
#备份文件全称
bakdata=$orowner&quot;_&quot;$(date +%Y%m%d).dmp
#备份日志全称
baklog=$orowner&quot;_&quot;$(date +%Y%m%d).log
[ -d ${bakdir} ] || mkdir -p ${bakdir}
cd $bakdir
[ -d ${errordir} ] || mkdir -p ${errordir}
exp $user/$passwd@$ip:$port/$Instance grants=y file=$bakdir/$bakdata log=$bakdir/$baklog owner=$user &gt;&gt; /dev/null 2&gt;&amp;1
if [ $? -eq 0 ];then
echo &quot;备份用户$user 成功&quot;
else
echo &quot;备份用户$user 失败,请到目录$bakdir 下查看日志&quot;
mv $bakdir/$baklog $errordir
exit
fi
tar -zcvf $bakdata.tar.gz $bakdata &amp;&amp; rm -f $bakdata &gt;&gt; /dev/null 2&gt;&amp;1
tar -zcvf $baklog.tar.gz $baklog &amp;&amp; rm -f $baklog &gt;&gt; /dev/null 2&gt;&amp;1
find $bakdir -type f -name &quot;*.tar.gz&quot; -mtime +$days -exec rm -rf {} \; &gt;&gt; /dev/null 2&gt;&amp;1
</code></pre>
<ul>
<li>设置定时任务</li>
</ul>
<pre><code class="language-shell">chmod +x oracle.sh
./oracle.sh #手动执行一次备份看看是否成功
crontab -e
00 23 * * * /bin/bash /risen/data/sh/oracle.sh #设置定时备份,每天晚十一点执行备份</code></pre>