暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19c容器安装及日常运维管理


一、知识普及

CDB到底是什么?

  1. CDB全称为Container Database,即数据库容

  2. 器,PDB全称为Pluggable Database,即可插拔数据库。

CDB数据库容器由三部分组成:

  1. **ROOT**: 又叫CDB$ROOT,存储数据库系统的元数据和公共用户,一般不建议在CDB$ROO下创建业务数据

  2. **SEED**: 又叫PDB$SEED,这是创建pdb数据库的模板,一个CDB中只能有一个SEEDSEED中的对象无法添加和修改

  3. **PDBS**: CDB中可以有一个或多个PDB

二、安装19C

使用一键安装脚本进行安装。

  1. #!/bin/bash

  2. #一键安装oracle数据库

  3. #修改主机名

  4. hostnamectl set-hostname myoracle

  5. #添加主机名与IP对应记录

  6. public_ip=$(hostname -I| grep -o -e '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' |head -n 1)

  7. node_name=$(hostname)

  8. echo -e "${public_ip} ${node_name}">> /etc/hosts

  9. cat /etc/hosts

  10. #关闭Selinux

  11. sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

  12. setenforce 0

  13. #关闭防火墙

  14. systemctl stop firewalld

  15. systemctl disable firewalld

  16. systemctl status firewalld

  17. # 获取当前所在目录位置

  18. current_dir=$(pwd)

  19. echo "当前所在目录位置: $current_dir"

  20. # 目标路径

  21. target_dir="/soft"

  22. # 检查目标路径是否存在,如果不存在则创建

  23. if [ ! -d "$target_dir" ]; then

  24. mkdir -p "$target_dir"

  25. echo "已创建目录: $target_dir"

  26. fi

  27. # 移动当前目录下的所有文件到目标路径

  28. mv $current_dir/* $target_dir

  29. echo "已将当前目录下所有文件移动至 $target_dir"

  30. #添加离线yum源

  31. cd soft

  32. tar -xvf oracle_repo.tar.gz

  33. cd soft/my_oracle_repo

  34. rpm -ivh *.rpm --nodeps --force

  35. #在线yum源

  36. cd etc/yum.repos.d/

  37. rm -rf ./*

  38. sleep 20

  39. wget -O etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

  40. #添加用户组及用户

  41. groupadd -g 54321 oinstall

  42. groupadd -g 54322 dba

  43. groupadd -g 54323 oper

  44. groupadd -g 54324 backupdba

  45. groupadd -g 54325 dgdba

  46. groupadd -g 54326 kmdba

  47. useradd -u 54321 -g oinstall -G dba,backupdba,dgdba,kmdba,oper oracle

  48. echo "oracle" | passwd --stdin oracle

  49. id oracle

  50. chmod 644 etc/sysctl.conf

  51. #修改环境变量

  52. cat <<EOF >>/etc/sysctl.conf

  53. #ORACLE SETTING

  54. fs.aio-max-nr = 1048576

  55. fs.file-max = 6815744

  56. kernel.sem = 250 32000 100 128

  57. net.ipv4.ip_local_port_range = 9000 65500

  58. net.core.rmem_default = 262144

  59. net.core.rmem_max = 4194304

  60. net.core.wmem_default = 262144

  61. net.core.wmem_max = 1048586

  62. kernel.panic_on_oops = 1

  63. #(kernel.shmmax = 物理内存*1024*1024*1024-1)

  64. kernel.shmmax = 2684354560

  65. #控制共享内存页数(kernel.shmall = shmmax/4096)

  66. kernel.shmall = 655360

  67. #共享内存的最大数量

  68. kernel.shmmni = 4096

  69. #当系统内存使用90%的时候开始使用交换页面

  70. vm.swappiness=10

  71. #默认是100,增大这个参数设置了虚拟内存回收directory和i-node缓冲的倾向,这个值越大。越容易回收。

  72. vm.vfs_cache_pressure=200

  73. EOF

  74. sysctl -p

  75. chmod 644 etc/security/limits.conf

  76. cat <<EOF >>/etc/security/limits.conf

  77. #ORACLE SETTING

  78. #打开文件描述符大小

  79. oracle soft nproc 16384

  80. oracle hard nproc 16384

  81. #单个用户可用的进程数

  82. oracle soft nofile 16384

  83. oracle hard nofile 65536

  84. #进程堆栈段的大小

  85. oracle soft stack 10240

  86. oracle hard stack 32768

  87. EOF

  88. echo "none dev/shm tmpfs defaults,size=3096m 0 0" >> etc/fstab

  89. mount -o remount dev/shm

  90. chmod 644 etc/profile

  91. cat <<EOF >>/etc/profile

  92. if [ $USER = "oracle" ]; then

  93. if [ $SHELL = "/bin/ksh" ]; then

  94. ulimit -p 16384

  95. ulimit -n 65536

  96. else

  97. ulimit -u 16384 -n 65536

  98. fi

  99. fi

  100. EOF

  101. source /etc/profile

  102. mkdir -p /u01/app/oracle

  103. mkdir -p /u01/app/oraInventory

  104. mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1

  105. mkdir -p /soft

  106. mkdir -p /u01/app/oracle/fast_recovery_area

  107. chown -R oracle:oinstall /u01

  108. chown -R oracle:oinstall /soft

  109. chmod -R 775 /u01

  110. chmod -R 775 /soft

  111. cat <<EOF >>/home/oracle/.bash_profile

  112. #for oracle

  113. umask=022

  114. export PS1

  115. export TMP=/tmp

  116. export LANG=en_US.UTF8

  117. export TMPDIR=$TMP

  118. export ORACLE_UNQNAME=cdb19c

  119. export ORACLE_SID=cdb19c

  120. export ORACLE_BASE=/u01/app/oracle

  121. export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1

  122. export ORACLE_TERM=xterm

  123. export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"

  124. export NLS_LANG=AMERICAN_AMERICA.UTF8

  125. #export PATH=.:$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin

  126. export THREADS_FLAG=native

  127. export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib

  128. export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib

  129. export ORACLE_OWNR=oracle

  130. export PATH=\$PATH:\$ORACLE_HOME/bin

  131. EOF

  132. source /home/oracle/.bash_profile

  133. mv /soft/*.zip /u01/app/oracle/product/19.0.0/dbhome_1

  134. cd /u01/app/oracle/product/19.0.0/dbhome_1

  135. #解压oracle安装包

  136. unzip LINUX.X64_193000_db_home.zip

  137. mkdir -p /home/oracle/etc

  138. chown -R oracle.oinstall /home/oracle/etc

  139. cp /u01/app/oracle/product/19.0.0/dbhome_1/install/response/* /soft/

  140. chmod 777 /soft/*.rsp

  141. chown -R oracle:oinstall /soft

  142. cat <<EOF >/soft/db_install.rsp

  143. #软件版本信息

  144. oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0

  145. #安装选项-仅安装数据库软件

  146. oracle.install.option=INSTALL_DB_SWONLY

  147. #oracle用户用于安装软件的组名

  148. UNIX_GROUP_NAME=oinstall

  149. #oracle产品清单目录

  150. INVENTORY_LOCATION=/u01/app/oraInventory

  151. #oracle安装目录

  152. ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1

  153. #oracle基础目录

  154. ORACLE_BASE=/u01/app/oracle

  155. #安装版本类型:企业版

  156. oracle.install.db.InstallEdition=EE

  157. #指定组信息

  158. oracle.install.db.OSDBA_GROUP=dba

  159. oracle.install.db.OSOPER_GROUP=oper

  160. oracle.install.db.OSBACKUPDBA_GROUP=backupdba

  161. oracle.install.db.OSKMDBA_GROUP=kmdba

  162. oracle.install.db.OSRACDBA_GROUP=dba

  163. oracle.install.db.OSDGDBA_GROUP=dgdba

  164. EOF

  165. chown -R oracle:oinstall /soft/db_install.rsp

  166. chmod 660 /soft/db_install.rsp

  167. chown -R oracle:oinstall /u01/app/oracle/product/19.0.0/dbhome_1

  168. #开始安装oracle软件

  169. su - oracle -c "/u01/app/oracle/product/19.0.0/dbhome_1/runInstaller -silent -responseFile /soft/db_install.rsp"

  170. sleep 200

  171. /u01/app/oraInventory/orainstRoot.sh

  172. /u01/app/oracle/product/19.0.0/dbhome_1/root.sh

  173. echo -e "\n\n****** start listener config ******\n\n"

  174. cp /u01/app/oracle/product/19.0.0/dbhome_1/assistants/netca/netca.rsp /soft/

  175. chmod 644 /soft/netca.rsp

  176. cat <<EOF >>/soft/netca.rsp

  177. [GENERAL]

  178. RESPONSEFILE_VERSION="19.0"

  179. CREATE_TYPE="CUSTOM"

  180. [oracle.net.ca]

  181. INSTALLED_COMPONENTS={"server","net8","javavm"}

  182. INSTALL_TYPE=""typical""

  183. LISTENER_NUMBER=1

  184. LISTENER_NAMES={"LISTENER"}

  185. LISTENER_PROTOCOLS={"TCP;1521"}

  186. LISTENER_START=""LISTENER""

  187. NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}

  188. NSN_NUMBER=1

  189. NSN_NAMES={"EXTPROC_CONNECTION_DATA"}

  190. NSN_SERVICE={"PLSExtProc"}

  191. NSN_PROTOCOLS={"TCP;HOSTNAME;1521"}

  192. EOF

  193. sleep 60

  194. #开始安装监听

  195. su - oracle -c "/u01/app/oracle/product/19.0.0/dbhome_1/bin/netca -silent -responsefile /soft/netca.rsp"

  196. echo -e "\n\n****** listener config completed ******\n\n"

  197. cp /u01/app/oracle/product/19.0.0/dbhome_1/assistants/dbca/dbca.rsp /soft

  198. chmod 644 /soft/dbca.rsp

  199. cat <<EOF >>/soft/dbca.rsp

  200. #响应文件版本号

  201. responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0

  202. templateName=General_Purpose.dbc

  203. gdbName=cdb19c

  204. sid=cdb19c

  205. createAsContainerDatabase=TRUE

  206. numberOfPDBs=1

  207. pdbName=pdb19c

  208. pdbAdminPassword=Systiger123

  209. sysPassword=Systiger123

  210. systemPassword=Systiger123

  211. datafileDestination=/u01/app/oracle/oradata

  212. recoveryAreaDestination=/u01/app/oracle/fast_recovery_area

  213. storageType=FS

  214. characterSet=AL32UTF8

  215. nationalCharacterSet=AL16UTF16

  216. sampleSchema=true

  217. totalMemory=2048

  218. databaseType=OLTP

  219. emConfiguration=NONE

  220. EOF

  221. sleep 60

  222. echo -e "\n\n****** start db instance create ******\n\n"

  223. ##开始建库

  224. su - oracle -c "/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbca -silent -createDatabase -templateName /u01/app/oracle/product/19.0.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc -responseFile NO_VALUE \

  225. -gdbname cdb19c -sid cdb19c \

  226. -createAsContainerDatabase TRUE \

  227. -numberOfPDBs 1 \

  228. -pdbName pdb19c \

  229. -pdbAdminPassword Systiger123 \

  230. -sysPassword Systiger123 -systemPassword Systiger123 \

  231. -datafileDestination '/u01/app/oracle/oradata' \

  232. -redoLogFileSize 50 \

  233. #-storageType FS \

  234. -characterset AL32UTF8 -nationalCharacterSet AL16UTF16 \

  235. -sampleSchema true \

  236. -totalMemory 512 \

  237. -databaseType OLTP \

  238. -emConfiguration NONE"

  239. echo -e "\n\n****** db instance create complete ******\n\n"

三、管理CDB和PDB

1、查看数据库是否为CDB架构(两种方法)

  1. SQL> select name,cdb from v$database;

说明:CDB为YES表示是CDB架构,NO则表示不是CDB架构

  1. SQL> show pdbs;

说明:显示PDB相关信息则表示是CDB架构,没有显示信息则表示不是CDB架构

2、保存当前所有pdb状态,并查看

  1. SQL> alter pluggable database all save state;

  2. SQL> select con_id,con_name from dba_pdb_saved_states;

3、关闭所有pdb

  1. SQL> alter pluggable database all close;

4、关闭cdb(即整个数据库实例)

  1. SQL> shutdown immediate;

5、打开cdb(即整个数据库实例)

  1. SQL>startup

6、查看pdbs状态

  1. SQL> show pdbs;

7、关闭save 状态(关闭后,重启pdb后-所有的pdb启动都是mounted状态)

  1. SQL> alter pluggable database all discard state;

8、打开所有PDB

  1. SQL> alter pluggable database all open;

9、从CDB切换到pdb中

  1. SQL> alter session set container=PDB19C;

10、CDB启动自动打开pdb

  1. SQL> acreate or replace trigger open_all_pdbs

  2. after startup on database

  3. begin

  4. execute immediate 'alter pluggable database all open instances=all';

  5. end;

  6. /

11、查看PDB的启动状态保存情况

  1. SQL> alter pluggable database all save state; #启动

  2. SQL> alter pluggable database all discard state; #关闭

  3. SQL> select con_name,instance_name,state from cdb_pdb_saved_states;

12、从PDB切换到CDB

  1. SQL> alter session set container=cdb$root; #名称是固定的

  2. SQL> show con_name;

13、创建PDB

  1. SQL> create pluggable database pdb01 admin user pdb01adm identified by oracle create_file_dest='/u01/pdbs_data';

  2. SQL> alter session set container=pdb01;

  3. SQL> show con_name;

14、查看新建pdb01的数据文件

  1. SQL> select name from v$datafile;


也可以使用FILE_NAME_CONVERT参数转换文件路径

  1. SQL> create pluggable database pdb02 admin user pdb02adm identified by oracle

  2. file_name_convert=

  3. ('/u01/app/oracle/oradata/CDB19C/pdbseed/','/u01/app/oracle/oradata/CDB19C/pdb01'

15、删除PDB

  1. SQL> alter pluggable database pdb01 close immediate;

  2. SQL> drop pluggable database pdb01 including datafiles;

16、查看表空间

在CDB下可以查看所有的表空间及对应的容器

  1. SQL> set lines 999

  2. SQL> select ts#,name,con_id from v$tablespace;


切到PDB后只可以看到自己的

  1. SQL> alter session set container=PDB19C;

  2. SQL> select ts#,name,con_id from v$tablespace;


注意:在CDB下创建的表空间可以给公共用户使用,在PDB中创建的表空间只能给本地用户使用

四、基础运维

1、查看数据库名

  1. SQL> SELECT NAME FROM V$DATABASE;

2、查看实例名

  1. SQL> SELECT instance_name FROM V$INSTANCE;

3、查看服务名

  1. SQL> SELECT global_name FROM global_name;

4、查看SID

  1. SQL> set lines 888

  2. SQL> select instance from v$thread;

5、查询表空间位置

  1. SQL> select tablespace_name,file_name from dba_data_files;

6、查看 Oracle 是用spfile 启动还是 pfile 启动

  1. SQL> show parameter spfile;

7、查找alert日志位置

  1. SQL> show parameter dump;

8、查看是否有阻塞会话

  1. SQL> SELECT sid, serial#, username FROM gv$session WHERE sid IN (SELECT blocking_session FROM gv$session);

9、查看关键进程是否存在

  1. [oracle@myoracle ~]$ ps -ef|grep smon

10、开启归档日志

注意:开启归档日志必须在CDB模式下去开启

  1. SQL> archive log list;

  2. SQL> shutdown immediate;

  3. SQL> startup mount;

  4. SQL> alter database archivelog;

  5. SQL> archive log list;

11、查看闪回状态

  1. SQL>select flashback_on from v$database;


开启闪回
开启闪回的前提是开启归档日志

  1. SQL> alter database force logging;

  2. SQL> alter system set db_recovery_file_dest_size=4385144832;

  3. SQL> alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';

  4. SQL> alter database flashback on;

12、查看归档日志存放位置

  1. SQL> select * from v$recovery_file_dest;

13、物理备份

  1. [oracle@myoracle CDB19C]$ rman target /

  2. RMAN> CONFIGURE BACKUP OPTIMIZATION ON;

  3. RMAN> backup database;

  4. RMAN> list backup of database; #备份所有文件

  5. RMAN> BACKUP ARCHIVELOG ALL; #备份归档日志

五、日常巡检

1、检查数据库的健康状况

  1. SQL> SELECT name, log_mode, open_mode FROM v$database;

2、检查数据文件的健康状况

  1. SQL> SELECT file_name, bytes/1024/1024 AS size_mb, maxbytes/1024/1024 AS max_size_mb, autoextensible FROM dba_data_files;

3、检查表空间的使用情况

  1. SQL> SELECT tablespace_name, file_id, round(bytes / (1024 * 1024), 2) AS size_mb, maxbytes / (1024 * 1024) AS max_size_mb, autoextensible FROM dba_data_files;

4、检查日志文件的健康状况

  1. SQL> SELECT group#, bytes/1024/1024 AS size_mb, status FROM v$log;

5、检查归档日志的存储空间

  1. SQL> show parameter db; #也可以用下面的

  2. SQL> select * from v$recovery_file_dest;


6、检查数据库的活动会话

  1. SQL> SELECT s.sid, s.serial#, s.username, s.program, s.type, s.terminal, s.machine, s.osuser, s.status FROM v$session s WHERE s.type != 'BACKGROUND';

7、检查正在执行的SQL语句

  1. SQL> SELECT s.sid, s.serial#, s.username, t.sql_text FROM v$session s, v$sqltext t WHERE s.sql_id = t.sql_id;

8、查看数据库的启动和关闭记录

  1. SQL> SELECT * FROM v$diag_info WHERE name = 'Default Trace File';

9、查看数据库的告警日志

  1. SQL> SELECT value FROM v$diag_info WHERE name = 'Diag Trace';

10、查看数据库的指标姓名

  1. SQL> SELECT name, value FROM v$sysstat;

11、查看数据库等待事件

  1. SQL> SELECT sid, event, p1text, p1, p2text, p2, wait_time FROM v$session_wait;

12、查看数据库的锁定情况

  1. SQL> SELECT s.sid, s.serial#, l.type, l.lmode, s.username, s.osuser, s.machine FROM v$session s, v$lock l WHERE s.sid = l.sid;

13、查看数据库的无效对象

  1. SQL> SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE STATUS='INVALID';

14、查看字符集

  1. SQL>select userenv('language') from dual;

15、查看所有的文件路径

  1. SQL>sselect * from dba_directories;

16、查看备份信息

  1. RMAN> list backup of database;


文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。


文章转载自小周的数据库进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论