Centos7 安装Oracle记录
常用命令
卸载oracle 的时候要注意:除了oracle 的东西 其他的 centos usr/bin目录 不能删除
./startup.sh --启动tom
./shutdown.sh --关闭
source ~/.bash_profile --无法打开sql命令 oracle配置生效
sqlplus sys as sysdba --进入sqlplus,
startup --命令:启动服务(实例):
shutdown immediate --关闭服务(实例):
exit --退出
lsnrctl start #oracle用户# 启动监听器
lsnrctl stop #oracle用户# 关闭
lsnrctl status 监听状态
netstat -anp | grep 80 --查看端口
kill --杀死端口
---------------------------------------------------安装oracle------------------------------------------------------
修改主机名(永久有效)
hostnamectl set-hostname localhost
查看状态:
systemctl status firewalld
如果防火墙是开的就添加1521端口到防火墙,总之在配置监听器之前添加端口
firewall-cmd --zone=public --remove-port=1521/tcp --permanent --移除
firewall-cmd --zone=public --add-port=1521/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
重新载入
firewall-cmd --reload
查看端口
firewall-cmd --list-ports
1 #root用户# 检查依赖包
安装依赖包:三条命令分别执行
yum install -y xhost xclock xorg-x11-xauth xterm libXrender.x86_64 libXtst.x86_64 libXext.x86_64 libXtst.so.6 compat-libcap1
yum install -y binutils compat-libstdc++-33 elfutils-libelf* elfutils-libelf-devel* expat gcc gcc-c++ glibc glibc-common glibc-devel
yum install -y glibc-headers libaio* libaio-devel* libgcc libstdc++ libstdc++-devel pdksh syssta make unixODBC* unixODBC-deve* ksh
2 #root用户# 配置sshd 连接x11
# 编辑 /etc/ssh/sshd_config文件内容
#vim /etc/ssh/sshd_config
#X11Forwarding yes #取消注释 改为yes
#AllowTcpForwarding yes #取消注释 改为yes
# 编辑 /etc/ssh/ssh_config 文件内容
# vim /etc/ssh/ssh_config
# ForwardX11 yes #取消注释 改为yes
重启 ssh
# systemctl restart sshd.service
4 #root用户# 配置 vi /etc/security/limits.conf 将下面信息加入文件尾部 保存退出
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
5 #root用户# 配置 vi /etc/sysctl.conf 将下面信息加入文件尾部 保存退出
fs.aio-max-nr=1048576
fs.file-max=6815744
kernel.shmall=2097152
kernel.shmmni=4096
kernel.sem=250 32000 100 128
kernel.shmmax=1976971264
net.ipv4.ip_local_port_range=9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586
以下适用于8G内存左右服务器配置,12G或者16G以上建议调整
[root@oracledb ~] vim /etc/sysctl.conf
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
执行命令:sysctl -p 使文件生效
6 #root用户# 配置 vi /etc/pam.d/login 将下面信息加入文件尾部 保存退出
session required pam_limits.so
注意:也可以执行下面的命令,和上面是同一个效果的
echo 'session required pam_limits.so' >> /etc/pam.d/login
7 #root用户# 配置 vi /etc/profile 将下面信息加入文件尾部 保存退出
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
8 #root用户# 创建 目录
创建用户
[root@oracledb ~] groupadd oinstall
[root@oracledb ~] groupadd dba
[root@oracledb ~] useradd -g oinstall -G dba -m oracle
[root@oracledb ~] passwd oracle
上传文件在root文件中,安装前创建好oracle 用户 然后用oracle用户执行
9 #oracle用户 上传Oracle压缩文件
解压
[root@oracledb ~] mkdir -p /ora/oracle
[root@oracledb ~] unzip -d /ora/ linux.x64_11gR2_database_1of2.zip
[root@oracledb ~] unzip -d /ora/ linux.x64_11gR2_database_2of2.zip
[root@oracledb ~] chown -R oracle:oinstall /ora
[root@oracledb ~] chmod 755 -R /ora
10 #root用户# 设置oracle用户环境变量 vim /home/oracle/.bash_profile
(oracle 用户只是用户 数据库还是要放在根目录 /ora ,不要在/home/oracle/ora)
ora/oracle/product/12.1.0/dbhome_1/bin/
--在用的2021
export ORACLE_BASE=/ora/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1
export ORACLE_SID=orcl
export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH/
export LC_ALL="en_US"
export LANG="en_US"
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export PATH=$ORACLE_HOME/bin:$PATH
export PATH
--ZTXY
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export ORACLE_BASE=/ora/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH/
export LC_ALL="en_US"
export LANG="en_US"
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export PATH
source ~/.bash_profile --修改生效
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib --zkd
11 #oracle用户# 安装
如果图形界面调用不出来:Could not initialize class sun.awt.X11.XToolkit 需要执行下面语句
[grid@jx-rac1 grid]$ export DISPLAY=ip:0.0
[grid@jx-rac1 grid]$ export DISPLAY
[grid@jx-rac1 grid]$ echo $DISPLAY --查看
LANG=en_US --乱码
执行:./runInstaller 调用Oracle 安装图形界面
出现问题:ins-13016 ins-10013
根据图形界面操作
12 #oracle用户# 配置监听
a. 配置Oracle 监听 主机名称
# cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
# netca
orcl
Zmedu20120720
根据图形界面操作创建监听
b. 创建 Oracle 数据库
根据图形界面操作创建
# cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/
# dbca
(可以先不管 )修改 HOST = hotDB11g # hotDB11g自定义主机名称
修改 监听文件
vim /ora/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1/)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXP1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.11)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
修改 vim /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
LISTENER_ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.11)(PORT = 1521)) )
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
vim /ora/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
cd ./oracle/product/11.2.0/db_1/bin/
安装完成后
#oracle用户# 查看监听器状态
lsnrctl status
备注:打开不了监听1、添加环境 2、配置监听
13 #oracle用户# 创建数据库
$ dbca # 自动调用图形界面
netmgr #配置本地IP
14 sys 登录 sqlplus (改步骤可以不需要执行)
alter user sys identified by oracle123;
alter user system identified by oracle123;
source ~/.bash_profile --无法打开sql命令 oracle配置生效
5、进入sqlplus,命令:sqlplus sys as sysdba
6、管理员sysdba权限登陆oracle:conn /as sysdba
7、启动服务(实例):startup;
8、关闭服务(实例):shutdown immediate;
15 root 修改开机自动启动
a 修改 /ora/oracle/product/11.2.0/dbhome_1/bin/dbstart 启动Oracle服务文件
找到:ORACLE_HOME_LISTNER=$1 改为:ORACLE_HOME_LISTNER=$ORACLE_HOME
修改 vim /u01/app/oracle/product/11.2.0/dbhome_1/bin/dbshut 关闭Oracle服务文件
找到:ORACLE_HOME_LISTNER=$1 改为:ORACLE_HOME_LISTNER=$ORACLE_HOME
b 修改/etc/oratab文件 (创建数据库才有 orcl:/opt/oracle/app/product/11.2.0/dbhome_1:N)
找到文件中这行(orcl:/opt/oracle/app/product/11.2.0/dbhome_1:N)把 N 改为 Y
C 修改/etc/rc.d/rc.local 加入以下配置
su - oracle -l -c "/u01/app/oracle/product/11.2.0/dbhome_1/bin/lsnrctl start"
su - oracle -l -c /u01/app/oracle/product/11.2.0/dbhome_1/bin/dbstart
赋予文件有可执行权限
chmod +x /etc/rc.d/rc.local
启动数据库实例后查看内存使用情况,如果内存占用大就修改内存分配大小
使用sqlplus 登录
#sqlplus sys as sysdba
--显示 sga 分配情况
show parameter sga;
修改 sga 分配:
alter system set sga_target=1024m scope=spfile;
alter system set sga_max_size=1024m scope=spfile;
打印:System altered. 表示成功
--显示内存分配情况
show parameter memory;
修改内存分配:
alter system set memory_target = 2048M scope=spfile;
alter system set memory_max_target =2048M scope=spfile;
打印:System altered. 表示成功
然后关闭数据库实例,再启动数据库实例
关闭服务(实例):shutdown immediate;
启动服务(实例):startup
ORACLE_HOME环境变量
第一,用oracle用户名登录linux系统。而不是root登录后su oracle。
第二,用oracle用户名登录linux系统后,vi .bash_profile,其中,文件.bash_profile
在/usr/oracle目录下,它是隐藏文件,可以ls -a 显示所有文件
第三,编辑.bash_profile文件,内容如下:
附加:
创建表空间
create tablespace ZZDY
logging
datafile '/u01/app/oracle/oradata/ORCL/datafile/zzdy.dbf'
size 50m
autoextend on
next 50m maxsize unlimited
extent management local;
查看sys用户
select*from all_users;
12c sqlplus创建用户:
create user C##ZKDRSC identified by ZKDRSC#2020; --新建用户
grant create session,resource to C##ZKDRSC; ---授权
grant connect,resource,dba to C##ZKDRSC; --授权DBA权限
grant connect, resource to C##ZKDRSC; --授权DBA权限
select * from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system
select * from all_users; 查看你能管理的所有用户!
select * from user_users; 查看当前用户信息 !
sqlplus C##ZKDRSC/ZKDRSC#2020
乱码
1. 查看oracle服务端的字符集
(1) 登录
sqlplus /nolog
conn /as sysdba
(2) 查看字符集
select userenv('language') from dual;
2. 查看oracle客户端的字符集
echo $NLS_LANG
3. 修改oracle服务端的字符集
(1) 登录
sqlplus /nolog
conn /as sysdba
(2) 启动RESTRICTED模式
shutdown immediate
startup mount
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
alter database open;
alter database character set INTERNAL_USE UTF8;
shutdown immediate
startup
exit
需要重启plsql
之前在数据库中是乱码的数据仍然是乱码,重新插入数据才正常
导入dmp格式 oracle 用户
imp C##ZKDRSC/ZKDRSC#2020 file=/zzdy/2.DMP full=y
到出dmp格式
exp ZTXYZZDYV81/ZTXYZZDYV81 file=/ora/BLGICS.dmp
oracle 在 linux 下的开机自动启动脚本,设置如下:
1.user root 下面修改:
[root@data55 ~]# vi /etc/oratab
hpxtdb:/opt/oracle/product/12.1.0.2:Y
将N该为Y
虚拟机测试成功配置:
ORACLE_SID:ORACLE_HOME:Y
orcl:/home/oracle/app/oracle/product/12.1.0/dbhome_3:Y
2.user oracle 下面修改:
[root@data55 ~]# su - oracle
[oracle@data55 ~]$cd $ORACLE_HOME/bin
[oracle@data55 bin]$ vi dbstart
找到 ORACLE_HOME_LISTNER=$1 这行, 修改成:
ORACLE_HOME_LISTNER=/opt/oracle/product/12.1.0.2/ //建议这一条
或者直接修改成:
ORACLE_HOME_LISTNER=$ORACLE_HOME
同样道理修改 dbshut
[oracle@data55 bin]$ vi dbshut
测试运行 dbshut, dbstart 看能否启动oracle 服务及listener服务
[oracle@data55 bin]$ ps -efw | grep ora_
[oracle@data55 bin]$ lsnrctl status
[oracle@data55 bin]$ ps -efw | grep LISTEN | grep -v grep
3.系统启动项
[root@data55 ~]# chmod +x /etc/rc.d/rc.local
[root@data55 ~]# vi /etc/rc.d/rc.local
在用的
虚拟机测试成功:
su oracle -lc "/home/oracle/app/oracle/product/12.1.0/dbhome_3/bin/lsnrctl start"
su oracle -lc /home/oracle/app/oracle/product/12.1.0/dbhome_3/bin/dbstart
## 末尾添加
[[
su - oracle -lc dbstart
]]
[root@data55 ~]# cat /etc/rc.d/rc.local //查看配置
第四部:新建Oracle服务启动脚本
root 用户打开
vim /etc/init.d/oracle
--添加
#!/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=/ora/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="oracle"
# if the executables do not exist -- display error
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi
# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup
su $ORA_OWNR -lc $ORACLE_HOME/bin/dbstart
echo "Oracle Start Succesful!OK."
;;
stop)
# Oracle listener and instance shutdown
su $ORA_OWNR -lc $ORACLE_HOME/bin/dbshut
echo "Oracle Stop Succesful!OK."
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo $"Usage: `basename $0` {start|stop|reload|reload}"
exit 1
esac
exit 0
保存退出
四、检查一下脚本能否正确执行
cd /etc/rc.d/init.d
./oracle start
./oracle stop
五、加入自动启动行列
执行如下命令:
[root@localhost ~]# chkconfig --add oracle
提示 : oracle服务不支持 chkconfig
“服务不支持 chkconfig”:——这个提示是因为oracle自启动脚本前面必须要有以下这两行
#chkconfig: 2345 00 01
#description:oracle 11g service
chmod 750 /etc/rc.d/init.d/oracle
ln -s /etc/rc.d/init.d/oracle /etc/rc2.d/S61oracle
ln -s /etc/rc.d/init.d/oracle /etc/rc3.d/S61oracle
ln -s /etc/rc.d/init.d/oracle /etc/rc4.d/S61oracle
ln -s /etc/rc.d/init.d/oracle /etc/rc0.d/K61oracle
ln -s /etc/rc.d/init.d/oracle /etc/rc6.d/K61oracle
chkconfig –level 234 oracle on
chkconfig –add oracle
------------------------------
ln -s /etc/init.d/orcl /etc/rc.d/rc2.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc3.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc4.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc5.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc0.d/K01orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc1.d/K01orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc6.d/K01orcl
若想删除链接,执行如下:
rm -rf /etc/rc.d/rc3.d/S99orcl
rm -rf /etc/rc.d/rc4.d/S99orcl
rm -rf /etc/rc.d/rc5.d/S99orcl
rm -rf /etc/rc.d/rc0.d/K0orcl
rm -rf /etc/rc.d/rc1.d/011orcl
rm -rf /etc/rc.d/rc6.d/S01orcl
-----------------------------------------------------------------------------
ORA-28000
(1) conn sys/oracle as sysdba
(2)select username,account_status from dba_users where username='xxx';,查看到用户锁了
(3)解锁xxx用户,SQL> alter user xxx account unlock;
(4)查看用户限制登陆次数select * from dba_profiles where RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS';
(5)alter profile default limit failed_login_attempts unlimited;修改用户无论输入多少次都不会被锁定
ORA-12519
即 sqlplus sys/sa as sysoper;
进入SQLPLUS后,先把数据库关闭,可以使用shutdown abort命令,也可以使用shutdown immediate命令,推荐使用shutdown abort命令。然后使用命令startup force即可,说白了就是重启数据库。
ORA-01078和LRM-00109错误
启动服务(实例):startup
cp /oracle/admin/xok/pfile/init.ora.75200916276 /oracle/product/11.1.0/dbs/initorcl.ora
把pfile/路径下init.ora 复制到dbs/目录下 改名/initorcl.ora
ORA-01034: ORACLE not available
实例没开启
ORA-12505 -
ORCL 错误
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
实例没开启
-------开启startup失败 -----------去pfile 复制init 到dbs 命名initorcl
ORA-01078: failure in processing system parameters
ORA-00823: Specified value of sga_target greater than sga_max_size
ORA-01081: cannot start already-running ORACLE - shut it down first
设置 Oracle启动命令vim /usr/bin/oracle.sh
增加的内容为:
#! /bin/bash
# script For oracle19c.service
/opt/oracle/product/19c/dbhome_1/bin/lsnrctl start
/opt/oracle/product/19c/dbhome_1/bin/dbstart /opt/oracle/product/19c/dbhome_1设置权限
chmod 777 /usr/bin/oracle.sh设置一个 systemd的服务
vim /etc/systemd/system/oracle19c.service增加内容为:
[Unit]Description=Oracle19cAfter=syslog.target network.target
[Service]LimitMEMLOCK=infinityLimitNOFILE=65535Type=oneshotRemainAfterExit=yesUser=oracleEnvironment="ORACLE_HOME=/opt/oracle/product/19c/dbhome_1"ExecStart=/usr/bin/oracle.sh
[Install]WantedBy=multi-user.target
设置服务自动启动
systemctl daemon-reload && systemctl enable oracle19c
------解决oracle连接一段时间就断连的问题(未验证是否可用)
(1) SQL>show parameter resource_limit;
如果为FALSE,则将其修改为TRUE,否则配置不会生效:
SQL>alter system set resource_limit=true;
(2) 创建一个新的profile文件:
SQL>create profile c##new_profile_name limit connect_time unlimited idle_time unlimited;
(3) 将这个新的配置文件分配给该用户:
SQL>alter user C##ZKDRSCV8 profile c##new_profile_name;
DBLINK:
create public database link ZZDY connect to "user" identified by "pwd" using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ykt)
)
)';
2021-3-31定时备份数据库
oralce 用户下创建目录zzdy/date/ 创建目录:mkdir dir1
创建脚本文件 backup.sh
单独导出:exp C##V81/C##V81@192.168.88.14/ORCL owner=C##V81 file=/zzdy/date/satp_$(date +%Y-%m-%d_%H:%M:%S).DMP
------------一般采用这个---------------
#:本脚本自动备份7天的数据库,每次备份完成后,删除7天之前的数据。
#加载oracle的相关参数
#如果oracle参数不明确,请使用命令查看
#环境变量
export ORACLE_BASE=/ora/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
#oracle字符集
export NLS_LANG=AMERICAN_AMERICA.UTF8
#获取当前时间,格式:20150210
DATE=$(date +%Y%m%d)
#获取7天之前的时间,格式:20150203
DATE_RM=$(date -d "7 days ago" +%Y%m%d)
#设置备份目录,
#export DIR=/ora/bak
#echo $DIR
#创建日期目录
#mkdir $DIR/$DATE
#开始备份,此处采用exp方式导出,根据实际情况可选用expdb数据方式导出
echo 'Oracle backup...'
exp C##ZKDRSCV8/ZKDRSC#2020@192.168.21.20/ORCL owner=C##ZKDRSCV8 file=/zzdy/date/satp_$(date +%Y-%m-%d_%H:%M:%S).DMP
log=$DIR/$DATE'/zzdy274_log_'$DATE'.log'
echo 'Oracle backup successfully.'
echo 'remove...'
rm -rf $DIR/$DATE_RM
echo 'remove successsfully.'
编辑脚本文件为可执行文件
chmod +x /zzdy/date/backup.sh
编写定时任务crontab脚本
[root@localhost data]# crontab -e
#为2点18分 不加cd可以用
18 14 * * * cd /home/oracle/date/backup.sh
05 15 * * * /home/oracle/date/backup.sh
赋予脚本权限
chmod 777 ./backup.sh
tail -f /var/log/cron #跟踪查询定时任务是否执行
代表成功:May 10 21:37:01 localhost CROND[26311]: (root) CMD (/ora/backup.sh)
cat /var/spool/cron/root #查询root下有那些定时任务