# 百分百可靠!
下载oracle 12c安装包:
https://pan.baidu.com/s/1T_XY97PnlnYrp4vXo0WivA
提取码:dgj8
下载好oracle 12c的安装包(database12c.tar.gz)后,准备好linux系统镜像包(例如:CentOS-7-x86_64-DVD-2009.iso)
挂载iso镜像包,为lib依赖包的安装做准备:
mount -o loop /usr/local/CentOS-7-x86_64-DVD-2009.iso /mnt
将xxx-Base.repo配置文件移走:mv /etc/yum.repos.d/CentOS-Base.repo /root
编辑xxx-Media.repo配置文件:vim /etc/yum.repos.d/CentOS-Media.repo
增加一行仓库地址:file:///mnt/,并将enabled修改为1启用,例如:
防止安装过程中防火墙干扰,需要先关闭防火墙:systemctl stop firewalld
防止限制太严格,关闭selinux:
vim /etc/selinux/config 将 SELINUX 设置成:disabled
1、修改Linux内核参数:
执行 vim /etc/sysctl.conf ,在sysctl.conf文件末尾添加如下参数,然后执行 sysctl -p 命令,使得配置的内核参数生效
fs.aio-max-nr=1048576
fs.file-max=6815744
kernel.sem=250 32000 100 128
kernel.shmall=2097152
kernel.shmmax=2147483648
kernel.shmmni=4096
net.core.rmem_default=1048576
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
net.ipv4.ip_local_port_range=9000 65500
#kernel.shmall 和 kernel.shmmax 参数设置说明:
1. kernel.shmmax :
是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的 SGA , 设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及 ServerProcess 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低 ( 在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响 ) ,但是其他时候都不会有影响。
官方建议值:
32 位 linux 系统:可取最大值为 4GB ( 4294967296bytes ) -1byte ,即 4294967295 。建议值为多于内存的一半,所以如果是 32 为系统,一般可取值为 4294967295 。 32 位系统对 SGA 大小有限制,所以 SGA 肯定可以包含在单个共享内存段中。
64 位 linux 系统:可取的最大值为物理内存值 -1byte ,建议值为多于物理内存的一半,一般取值大于 SGA_MAX_SIZE 即可,可以取物理内存 -1byte 。
内存为 12G 时,该值为 12*1024*1024*1024-1 = 12884901887
内存为 16G 时,该值为 16*1024*1024*1024-1 = 17179869183
内存为 32G 时,该值为 32*1024*1024*1024-1 = 34359738367
内存为 64G 时,该值为 64*1024*1024*1024-1 = 68719476735
内存为 128G 时,该值为 128*1024*1024*1024-1 = 137438953471
2. kernel.shmall :
该参数控制可以使用的共享内存的总页数。 Linux 共享内存页大小为 4KB, 共享内存段的大小都是共享内存页大小的整数倍。
一个共享内存段的最大大小是 16G ,那么需要共享内存页数是 16GB/4KB==4194304 (页),
当内存为 12G 时, kernel.shmall = 3145728
当内存为 16G 时, kernel.shmall = 4194304
当内次为 32G 时, kernel.shmall = 8388608
当内存为 64G 时, kernel.shmall = 16777216
当内存为 128G 时, kernel.shmall = 33554432
2、安装Oracle12c的依赖包:
yum install binutils gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXext libXtst libX11 libXau libxcb libXi make sysstat libnsl.x86_64 -y
缺少的lib依赖包可以从该网站下载:https://centos.pkgs.org/
3、创建Oracle用户和用户组
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
echo "oracle" | passwd oracle --stdin
4、修改oracle用户权限文件
执行 vim /etc/security/limits.conf ,在文件中添加以下内容
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
执行 vim /etc/pam.d/login ,在文件中添加以下内容
session required /lib64/security/pam_limits.so
session required pam_limits.so
执行 vim /etc/profile,在文件中添加以下内容,然后执行 source /etc/profile 使得修改生效
#oracle config
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
5、创建安装目录和文件权限
mkdir -p /opt/database/oracle/product/12.2.0
mkdir /opt/database/oracle/oradata
mkdir /opt/database/oracle/inventory
mkdir /opt/database/oracle/fast_recovery_area
chown -R oracle:oinstall /opt/database/oracle/
chmod -R 755 /opt/database/oracle/
6、配置Oracle环境变量
执行 vim /home/oracle/.bash_profile ,在文件中添加如下内容,然后执行 source /home/oracle/.bash_profile ,使得环境变量生效
umask 022
ORACLE_BASE=/opt/database/oracle
ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
ORACLE_SID=orcl
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/12.2.0/lib:$LD_LIBRARY_PATH
NLS_LANG="SIMPLIFIED CHINESE_CHINA".UTF8
LANG=zh_CN.UTF-8
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH NLS_LANG LANG
stty erase ^h
7、上传oracle12c的二进制安装包并解压
这里将 database12c.tar.gz 上传到/usr/local文件夹下,然后执行:
tar -zxvf database12c.tar.gz
来解压
然后将 response 文件夹整个复制到 /home/oracle ,并赋权
cp -R /usr/local/database/response /home/oracle/
chmod -R 777 /home/oracle/response
8、切换到 /home/oracle/response 目录,并修改 db_install.rsp 文件的内容(有的参数修改值,没有的的参数新增即可)
cd /home/oracle/response
vim db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=localhost.localdomain
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/opt/database/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/opt/database/oracle/product/12.2.0/dbhome_1
ORACLE_BASE=/opt/database/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.config.starterdb.characterSet=AL32UTF8
DECLINE_SECURITY_UPDATES=true
9、先切换到 oracle 用户下,再执行安装数据库程序
su - oracle
source /home/oracle/.bash_profile
cd /usr/local/database/
./runInstaller -silent -responseFile /home/oracle/response/db_install.rsp -ignorePrereq
退回到 root 用户下,执行:
exit
sh /opt/database/oracle/inventory/orainstRoot.sh
sh /opt/database/oracle/product/12.2.0/dbhome_1/root.sh
#如看到:The execution of the script is complete ,说明 orainstRoot.sh 执行成功了,这里是在调整用户组和操作权限;root.sh的执行结果可以查看控制提示的log日志文件。
10、配置监听
切换到 oracle 用户,加载 .bash_profile 配置文件,并执行 netca命令:
su - oracle
source /home/oracle/.bash_profile
cd /home/oracle/response
netca /silent /responseFile /home/oracle/response/netca.rsp
然后执行:lsnrctl reload ,再执行 netstat -tunlp | grep 1521,查看监听的端口号是否启动
11、在文件 sqlnet.ora 中加入以下代码
执行:vim $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
12、创建数据库
执行 vim /home/oracle/response/dbca.rsp 命令编辑文件
下面两种配置方式,只能二选一!不能两种都配置。
#注意:下面的参数选项一个都不能多一个都不能少!
第一种配置:
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v12.2.0
gdbName=orcl
sid=orcl
databaseConfigType=SI
createAsContainerDatabase=false
templateName=/opt/database/oracle/product/12.2.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc
emExpressPort=5500
omsPort=0
characterSet=AL32UTF8
listeners=LISTENER
initParams=sga_target=1790MB
memoryPercentage=40
automaticMemoryManagement=false
totalMemory=800
第二种配置(生成pdb数据库实例):
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v12.2.0
gdbName=orcl
sid=orcl
databaseConfigType=SI
createAsContainerDatabase=true
numberOfPDBs=1
pdbName=orclpdb
templateName=/opt/database/oracle/product/12.2.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc
emExpressPort=5500
omsPort=0
characterSet=AL32UTF8
listeners=LISTENER
memoryPercentage=40
automaticMemoryManagement=false
totalMemory=0
然后执行如下命令创建数据库实例,并且给 SYS、SYSTEM 两个用户设置密码
dbca -silent -createDatabase -responseFile /home/oracle/response/dbca.rsp
数据库安装完成!
#配置系统环境
登录数据库,数据库用户密码有效期改成无限期,修改oracle数据库线程数,并保存修改,然后重启数据库
su - oracle
sqlplus / as sysdba
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED ;
show parameter processes
alter system set processes = 3000 scope = spfile;
create pfile from spfile;
shutdown abort
startup
#异常问题:ORA-00821: Specified value of sga_target *** is too small, needs to be at least ***
解决办法:
1、执行 create pfile from spfile , 根据 spfile 文件参数生成 pfile 文件
2、找到生成的 pfile 文件,一般名称为 init [实例名].ora,修改 sga_target 参数值为需要的值
3、执行 create spfile from pfile ,将修改之后的参数值回写到 spfile 文件
4、启动数据库,执行:startup
#异常问题:Oracle ORA-01017: invalid username/password;logon denied
解决办法:
1、执行 alter user system account unlock; 给用户解锁
2、执行 ALTER USER system IDENTIFIED BY "新密码"; 修改用户密码
#关闭远程以dba账号登录
alter system set remote_login_passwordfile=none scope=spfile sid='*';
#pdb数据库实例操作
ALTER PLUGGABLE DATABASE orclpdb OPEN; //启动指定的pdb数据库实例
ALTER SESSION SET CONTAINER=orclpdb; //连接到指定的pdb实例
alter pluggable database all open; //启动所有pdb数据库实例
#设置重启服务器后自启动数据库
切换到 oracle 用户,然后运行: vim /etc/oratab
找到文件中的 XXX:/XXX/.../dbhome_1:N ,将最后的 N 改为Y
切换为 root 用户,然后运行:vim /etc/rc.d/rc.local ,在文件末尾添加:
su oracle -lc "/XXX/.../dbhome_1/bin/lsnrctl start"
su oracle -lc /XXX/.../dbhome_1/bin/dbstart
#查看 dbstart 文件的 ORACLE_HOME_LISTNER 参数值,是否为 $ORACLE_HOME,如果是 $v,将它改为: $ORACLE_HOME
#如果是pdb数据库,还需要设置开机随cdb启动:
alter pluggable database orcl save state;
给该文件添加可执行权限:chmod +x /etc/rc.d/rc.local
重启服务器后,通过:ps -ef | grep ora_ ,可以验证oracle进程是否启动。
#修改端口号
1、修改 listener.ora 文件中的端口号和 ip 地址,并添加实例监听
LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 7777)) )
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = /opt/database/oracle/product/12.2.0/dbhome_1)
(SID_NAME = ORCL)
)
)
2、修改 tnsnames.ora 中的端口号和 ip 地址
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 7777))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
3、修改监听端口
alter system set local_listener="(address = (protocol = tcp)(host = xxx.xxx.xxx.xxx)(port = 7777))";
4、重启监听服务
lsnrctl reload
#netstat -an|grep 9999 查看端口号是否启动
5、开启防火墙、启用端口号、重启防火墙
systemctl start firewalld
firewall-cmd --zone=public --add-port=7777/tcp --permanent
firewall-cmd --reload
# 如果是 iptables 防火墙,执行:iptables -I INPUT -p tcp --dport 7777 -j ACCEPT ,开启端口启用
#初始化表空间
#查看表空间使用率
SELECT Upper(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')
|| '%' "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,
Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY "表空间名" desc
#查看已存在表空间
select file_name from dba_data_files
#增加所需空间大小
alter database datafile '\oracle\oradata\xxxx.dbf' resize 4000m
#设置空间自动扩展
alter database datafile '\oracle\oradata\xxx.dbf' autoextend on next 100m maxsize 10000m