一.简介

oracle 12c,c指cloud,实现云数据库的支持。
增加CDB和PDB的概念,CDB(Container Database)数据库容器,PDB(Pluggable Database),可插拔数据库。
引入多租户架构,允许在单个数据库实例中创建多个独立的租户,实例与数据库可以是一对多的关系。
oracle 12c之前,实例与数据库不可能是一对多的关系,实例与数据库是一对一或多对一关系(RAC),一个实例只能与一个数据库相关联。
oracle 12c之后,通过在CDB下创建多个PDB,每个PDB类似于oracle 11g里面的实例,然后一个CDB下的各个PDB是相互隔离的。

二.安装前准备

oracle官方安装指导文档 MOS账号登录

主流操作系统和oracle版本支持列表

oracle版本

linux版本 

windows版本

12c

oracle linux/redhat  7

2012R2~2019

资源规划 

资源 2C8G 100G

oracle linux 7 x86

192.168.77.181 oracledb

oracle 12c

目录规划

ORACLE_BASE目录:/oracle/app/oracle
ORACLE_HOME目录:/oracle/app/oracle/product/12c/db_1
数据文件存储路径: /oracle/app/oracle/oradata
安装使用升级目录:/oracle/app/oraInventor

1.安装前准备

#配置hosts
hostnamectl set-hostname oracledb
cat >>/etc/hosts<<'EOF'
192.168.77.181 oracledb
EOF
#关闭SELINUX和防护墙
systemctl disable firewalld
systemctl stop firewalld
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
setenforce 0
#关闭NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
#关闭透明大页和NUMA,内存大于32G,可以不关闭大页
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
sed -i '/^GRUB_CMDLINE_LINUX/d' /etc/default/grub
cat >> /etc/default/grub<<'EOF'
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off"
EOF
grub2-mkconfig -o /etc/grub2.cfg
#创建组
groupadd oinstall
groupadd dba
groupadd backupdba
groupadd dgdba
groupadd kmdba
groupadd oper
groupadd racdba
#创建oracle用户,将oracle添加oinstall组和附加组
useradd -g oinstall -G oinstall,dba,backupdba,dgdba,kmdba,oper,racdba oracle
echo 123456 | passwd --stdin oracle
#创建目录并授权
mkdir -p /oracle/app/oracle
chown -R oracle:oinstall /oracle
chmod -R 775 /oracle
#环境变量配置
su  - oracle
cat >> ~/.bash_profile<<'EOF'
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=/oracle/app/oracle/product/12c/db_1
export ORACLE_UNQNAME=ALIDB
export ORACLE_SID=ALIDB
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME/bin
export CLASSPATH=$CLASSPATH:$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
EOF
source ~/.bash_profile
exit
#使用系统镜像包 配置yum源
mount /dev/cdrom /mnt
cd /etc/yum.repos.d/
gzip *.repo
cat >redhat.repo<<'EOF'
[redhat7]
name=redhat7
baseurl=file:///mnt
gpgcheck=0
enable=1
EOF
#安装依赖
yum -y install autoconf \
automake \
bc \
binutils \
binutils-devel \
bison  \
cpp \
compat-db*  \
compat-gcc-34 \
compat-gcc-34-c++ \
compat-libcap1 \
compat-libstdc++-33 \
compat-libstdc++-33.i686 \
elfutils-libelf-devel-0.97 \
elfutils-libelf-devel \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc-* \
glibc-*.i686 \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
ksh \
libgcc \
libXpm-*.i686\
libXp.so.6 \
libXt.so.6 \
libXtst.so.6 \
libXext \
libXext.i686 \
libXtst \
libXtst.i686 \
libX11 \
libX11.i686 \
libXau \
libXau.i686 \
libxcb \
libxcb.i686 \
libXi \
libXi.i686 \
libXtst \
libstdc++-docs \
libgcc_s.so.1 \
libstdc++.i686 \
libstdc++-devel \
libstdc++-devel.i686 \
libaio \
libaio.i686 \
libaio-devel \
libaio-devel.i686 \
lrzsz \
libXp \
libaio-devel \
make \
numactl \
numactl-devel \
python-devel \
sysstat \
unixODBC  \
unixODBC-devel
#修改文件最大句柄、最大线程、最大内存等 memlock接近物理内存
cat >>/etc/security/limits.conf<<'EOF'
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 6000000
oracle soft memlock 6000000
EOF
#内核参数,后面安装过程中会检测这些参数
cat >> /etc/sysctl.conf<<'EOF'  
# 设置最大内存共享段大小,物理内存的一半
kernel.shmmax = 4000000000
# 控制共享内存的分段大小,kernel.shmmax / 页大小
kernel.shmall = 31250000
# 设置单个共享内存段的最大权限,确定的物理内存的一半
kernel.shmmax = 4000000000
# 设置系统允许的共享内存段的最大数目
kernel.shmmni = 4096
# 设置系统范围内内存分配策略
vm.overcommit_memory = 0
# 设置文件描述符的数量
fs.file-max = 65536
# 设置TCP连接的最大缓冲区数量
net.ipv4.ip_local_port_range = 1024 65000
# 设置TCP接收/发送缓冲区的默认大小
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
EOF
sysctl -p
#重启操作系统
reboot

2.安装

#切换到oracle用户
su - oracle
cd /oracle
#上传安装包到此目录
rz linuxx64_12201_database.zip
#解压
unzip linuxx64_12201_database.zip
#图形化安装
cd /oracle/database/
./runInstaller

不提供邮箱地址---取消安全更新---yes

oracle 12c  云数据库安装 单机 图形化_oracle12c

oracle 12c  云数据库安装 单机 图形化_云数据库_02

创建并配置数据库

oracle 12c  云数据库安装 单机 图形化_云数据库_03

服务器类型

oracle 12c  云数据库安装 单机 图形化_云数据库_04

单实例安装

oracle 12c  云数据库安装 单机 图形化_oracle12c_05

高级安装

oracle 12c  云数据库安装 单机 图形化_云数据库_06

选企业版

oracle 12c  云数据库安装 单机 图形化_oracle12c_07

直接下一步

oracle 12c  云数据库安装 单机 图形化_云数据库_08

直接下一步

oracle 12c  云数据库安装 单机 图形化_云数据库_09

选OLTP 事务型

oracle 12c  云数据库安装 单机 图形化_oracle12c_10

默认orcl,自定义全局数据名字和实例名为ALIDB,创建容器数据库ALIPDB

oracle 12c  云数据库安装 单机 图形化_oracle12c_11

取消勾选内存自动管理,物理内存大于4GB,不允许内存自动管理

oracle 12c  云数据库安装 单机 图形化_云数据库_12

字符集,根据需求,这里选简体中文ZHS16GBK,然后下一步

oracle 12c  云数据库安装 单机 图形化_云数据库_13

直接下一步

oracle 12c  云数据库安装 单机 图形化_云数据库_14

直接下一步

oracle 12c  云数据库安装 单机 图形化_oracle12c_15

直接下一步 

oracle 12c  云数据库安装 单机 图形化_云数据库_16

统一自定义设置管理员密码---yes  密码不要包含某些特殊字符,我设置了Alibaby007,密码要求如下

oracle 12c  云数据库安装 单机 图形化_oracle12c_17

oracle 12c  云数据库安装 单机 图形化_oracle12c_18

直接下一步

oracle 12c  云数据库安装 单机 图形化_oracle12c_19

预安装检测失败---点击修复---手动root用户执行脚本---Check Again

oracle 12c  云数据库安装 单机 图形化_oracle12c_20

root用户执行脚本,点OK

/tmp/CVU_12.2.0.1.0_oracle/runfixup.sh

oracle 12c  云数据库安装 单机 图形化_云数据库_21

oracle soft stack 10240 确认已设置,勾选Ignore ALL 忽略后下一步---yes

oracle 12c  云数据库安装 单机 图形化_云数据库_22

oracle 12c  云数据库安装 单机 图形化_oracle12c_23

点安装,等待安装完成

oracle 12c  云数据库安装 单机 图形化_云数据库_24

root用户运行2个脚本,后点OK

#root用户登录
/oracle/app/oraInventory/orainstRoot.sh 
#默认回车 提示:Enter the full pathname of the local bin directory: [/usr/local/bin]:
#输入yes  提示:Do you want to setup Oracle Trace File Analyzer (TFA) now ? yes|[no] : 
/oracle/app/oracle/product/12c/db_1/root.sh

oracle 12c  云数据库安装 单机 图形化_云数据库_25

完成安装---关闭

oracle 12c  云数据库安装 单机 图形化_oracle12c_26

em登录但是 打不开,  https://ip:5500/em

3.基本操作

pdbs数据库启停

#oracle用户登录
su - oracle
#查看监听
lsnrctl status
#####关闭数据库######
#关闭监听
lsnrctl stop
#登录后关闭
sqlplus / as sysdba
show pdbs;
alter pluggable database all close;
shutdown immediate;
exit
#####开启数据库######
#登录后开启
sqlplus / as sysdba
startup
alter pluggable database all open;
exit
#开启监听
lsnrctl start

基本操作

#版本diag日志和datafile路径查看
su - oracle
sqlplus / as sysdba
select * from v$version;
select * from v$diag_info;
select name from v$datafile;
#连接PDB数据库
show pdbs;
show con_name;
alter session set container=ALIPDB;
show con_name;
#创建表空间
create tablespace ALI datafile '/oracle/app/oracle/oradata/ALIDB/ALIPDB/ALI01.dbf' size 128M autoextend on next 100M maxsize unlimited;
#创建用户
create user "ALI" identified by "Alibaby007" default tablespace ALI;
grant dba to ALI;
#PDB用户登录前,需要配置监听tnsnames.ora,以ALIPDB对外服务
cd $ORACLE_HOME/network/admin
cat >>tnsnames.ora<<'EOF'
ALIPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracledb)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ALIPDB)
    )
  )
EOF
#连接数据库
sqlplus / as sysdba
conn ALI/Alibaby007@ALIPDB
show con_name;
#创建数据库对象
CREATE TABLE city(city_id CHAR(3) NOT NULL,city_name VARCHAR(40) NULL,region_id INT NULL);
INSERT INTO city(city_id,city_name,region_id) VALUES('BJ','北京',1);
INSERT INTO city(city_id,city_name,region_id) VALUES('SH','上海',2);
INSERT INTO city(city_id,city_name,region_id) VALUES('NJ','南京',2);
commit;
select * from city;
exit

报错ERROR:  ORA-12154: TNS:could not resolve the connect identifier specified

#PDB用户登录前,需要配置监听tnsnames.ora
cd $ORACLE_HOME/network/admin
cat >>tnsnames.ora<<'EOF'
ALIPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracledb)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ALIPDB)
    )
  )
EOF

数据库连接工具连接PDB数据库

oracle 12c  云数据库安装 单机 图形化_云数据库_27

取消口令180天过期限制

#连接数据库
sqlplus / as sysdba
#查看口令有效期
select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
#更改口令有效期不限制
alter profile default limit password_life_time unlimited;