系统环境设置

以下皆为root用户操作

检查操作系统版本、内核版本、系统CPU、RAM

  1. #查询操作系统版本
  2. cat /etc/redhat-release
  3. #查询系统内核
  4. uname -r
  5. #查询CPU核心数
  6. cat /proc/cpuinfo| grep "processor"| wc -l
  7. #查询内存
  8. cat /proc/meminfo| grep MemTotal
  9. #查询swap分区(安装oracle需要操作系统分配swap分区,云主机默认swap分区为0)
  10. cat /proc/meminfo| grep SwapTotal
  11. #查询硬盘配置
  12. fdisk -l|grep Disk

image.png
如下表所示

项目
操作系统 CentOS Linux release 7.6.1810 (Core)
内核版本 3.10.0-1160.62.1.el7.x86_64
CPU 4C
RAM 8G
SWAP 1G

若SWAP分区为0,则需要分配SWAP分区

查看当前swap分区情况

  1. free -m

image.png
设置交换分区文件大小为1024m(举例)

  1. dd if=/dev/zero of=/home/swap bs=1M count=1024

格式化交换文件,将swap文件格式化成s文件系统,系统才能使用

  1. mkswap /home/swap

启动交换分区文件(要停止使用新创建的swap文件,只要执行 swapoff/home/swap 命令即可)

  1. swapon /home/swap
  2. #再次查看swap分区,验证
  3. free -lh

image.png
若希望系统再次启动时,自动启用刚增加的swap,可编辑 /etc/fstab

  1. vim /etc/fstab
  2. #增加如下行
  3. /home/swap swap swap defaults 0 0

image.png
修改linux swap空间的swappiness,降低对硬盘的缓存(现在一般1个G的内存可修改为10, 2个G的可改为5, 甚至是0。具体这样做)
临时修改:

  1. #查询swappiness
  2. cat /proc/sys/vm/swappiness
  3. #修改swappiness值为10
  4. sudo sysctl vm.swappiness=10

永久修改:

  1. sudo vi /etc/sysctl.conf
  2. #行末追加
  3. vm.swappiness=10
  4. #保存,重启
  5. reboot

image.png

修改主机名、关闭selinux

  1. #修改主机名
  2. sudo hostnamectl set-hostname yan
  3. sudo hostnamectl set-hostname "yan" --pretty
  4. sudo hostnamectl set-hostname yan --static
  5. sudo hostnamectl set-hostname yan --transient
  1. #关闭selinux
  2. sestatus

image.png

安装依赖包

  1. yum -y install binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-dev libXi libXtst make sysstat unixODBC unixODBC-devel

配置资源限制和内核参数

添加如下参数,如果系统中某个参数高于下面的参数的值,保留较大的值,下面的数值只是官方要求的最小值,可以根据系统调整数值,以优化系统性能

  1. vim /etc/sysctl.conf
  2. #行末追加
  3. fs.aio-max-nr = 1048576 # 同时可以拥有的的异步IO请求数目
  4. fs.file-max = 6815744 # 指定可以分配的文件句柄的最大数目
  5. kernel.shmall = 2097152 # 共享内存总量
  6. kernel.shmmax = 536870912 # 共享内存段的最大尺寸
  7. kernel.shmmni = 4096 # 系统范围内共享内存段的最大数量
  8. kernel.sem = 250 32000 100 128
  9. net.ipv4.ip_local_port_range = 9000 65500
  10. net.core.rmem_default = 262144 # 接收缓冲区大小
  11. net.core.rmem_max = 4194304 # 接收缓冲区最大值
  12. net.core.wmem_default = 262144 # 默认的发送缓冲区大小
  13. net.core.wmem_max = 1048576 # 发送缓冲区最大值
  1. #使内核参数生效
  2. sysctl -p

image.png

创建oracle用户

创建以下本地操作系统组和用户

Oracle inventory组(通常为 oinstall) OSDBA组 (通常为 dba) OSOPER组 (通常为 oper) Oracle软件所有者(通常为 oracle)

  1. groupadd oinstall
  2. groupadd dba
  3. groupadd oper
  4. useradd -g oinstall -G dba oracle

修改oracle用户的密码

  1. echo "oracle" | passwd --stdin oracle
  2. passwd oracle
  3. #换行再输入密码

编辑/etc/security/limits.conf(用户限制配置文件),添加如下参数

  1. vim /etc/security/limits.conf
  2. #行末追加
  3. oracle soft nproc 2047
  4. oracle hard nproc 16384
  5. oracle soft nofile 1024
  6. oracle hard nofile 65536

image.png
编辑/etc/pam.d/login文件,将配置文件加入到登录验证模块

  1. vim /etc/pam.d/login
  2. #行末追加
  3. #Add for Install Oracle Database 11g
  4. session required /lib64/security/pam_limits.so
  5. session required pam_limits.so

配置全局环境变量,编辑/etc/profile文件

  1. vim /etc/profile
  2. #行末追加
  3. if [ $USER = "oracle" ]; then
  4. if [ $SHELL = "/bin/ksh" ]; then
  5. ulimit -p 16384
  6. ulimit -n 65536
  7. else
  8. ulimit -u 16384 -n 65536
  9. fi
  10. fi

禁用使用Transparent HugePages(启用Transparent HugePages,可能会导致造成内存在运行时的延迟分配)

  1. cat /sys/kernel/mm/transparent_hugepage/enabled
  2. echo never > /sys/kernel/mm/transparent_hugepage/enabled
  3. echo never > /sys/kernel/mm/transparent_hugepage/enabled
  4. #重启使生效
  5. reboot
  6. #再次查看是否启用 如果显示 [always]说明启用了
  7. cat /sys/kernel/mm/transparent_hugepage/enabled

准备Oracle安装环境

以下皆为root用户操作

创建Oracle安装目录

  1. mkdir -p /data/app/
  2. chown -R oracle:oinstall /data/app/
  3. chmod -R 775 /data/app/

解压安装包
#进入软件包目录

  1. cd /opt/software/oracle
  2. ls -lrth

image.png
执行解压命令,解压到 /data 安装目录下

  1. unzip -q linux.x64_11gR2_database_1of2.zip -d /data
  2. unzip -q linux.x64_11gR2_database_2of2.zip -d /data

创建安装配置目录,将安装信息(元数据)与安装目录分离

  1. mkdir -p /data/etc
  2. #拷贝新建安装文件
  3. cp /data/database/response/* /data/etc/

编辑安装文件

  1. vim /data/etc/db_install.rsp

完整文件内容拷贝如下
关键是第5行,不能与oracle安装目录一致

  1. oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
  2. oracle.install.option=INSTALL_DB_SWONLY
  3. ORACLE_HOSTNAME=yan
  4. UNIX_GROUP_NAME=oinstall
  5. INVENTORY_LOCATION=/data/app/inventory
  6. SELECTED_LANGUAGES=en,zh_CN
  7. ORACLE_HOME=/data/app/oracle/product/11.2.0
  8. ORACLE_BASE=/data/app/oracle
  9. oracle.install.db.InstallEdition=EE
  10. oracle.install.db.isCustomInstall=true
  11. oracle.install.db.customComponents=oracle.server:11.2.0.1.0,oracle.sysman.ccr:10.2.7.0.0,oracle.xdk:11.2.0.1.0,oracle.rdbms.oci:11.2.0.1.0,oracle.network:11.2.0.1.0,oracle.network.listener:11.2.0.1.0,oracle.rdbms:11.2.0.1.0,oracle.options:11.2.0.1.0,oracle.rdbms.partitioning:11.2.0.1.0,oracle.oraolap:11.2.0.1.0,oracle.rdbms.dm:11.2.0.1.0,oracle.rdbms.dv:11.2.0.1.0,orcle.rdbms.lbac:11.2.0.1.0,oracle.rdbms.rat:11.2.0.1.0
  12. oracle.install.db.DBA_GROUP=dba
  13. oracle.install.db.OPER_GROUP=dba
  14. oracle.install.db.CLUSTER_NODES=
  15. oracle.install.db.config.starterdb.type=
  16. oracle.install.db.config.starterdb.globalDBName=
  17. oracle.install.db.config.starterdb.SID=
  18. oracle.install.db.config.starterdb.characterSet=AL32UTF8
  19. oracle.install.db.config.starterdb.memoryOption=true
  20. oracle.install.db.config.starterdb.memoryLimit=
  21. oracle.install.db.config.starterdb.installExampleSchemas=false
  22. oracle.install.db.config.starterdb.enableSecuritySettings=true
  23. oracle.install.db.config.starterdb.password.ALL=
  24. oracle.install.db.config.starterdb.password.SYS=
  25. oracle.install.db.config.starterdb.password.SYSTEM=
  26. oracle.install.db.config.starterdb.password.SYSMAN=
  27. oracle.install.db.config.starterdb.password.DBSNMP=
  28. oracle.install.db.config.starterdb.control=DB_CONTROL
  29. oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
  30. oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=false
  31. oracle.install.db.config.starterdb.dbcontrol.emailAddress=
  32. oracle.install.db.config.starterdb.dbcontrol.SMTPServer=
  33. oracle.install.db.config.starterdb.automatedBackup.enable=false
  34. oracle.install.db.config.starterdb.automatedBackup.osuid=
  35. oracle.install.db.config.starterdb.automatedBackup.ospwd=
  36. oracle.install.db.config.starterdb.storageType=
  37. oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
  38. oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
  39. oracle.install.db.config.asm.diskGroup=
  40. oracle.install.db.config.asm.ASMSNMPPassword=
  41. MYORACLESUPPORT_USERNAME=
  42. MYORACLESUPPORT_PASSWORD=
  43. SECURITY_UPDATES_VIA_MYORACLESUPPORT=
  44. DECLINE_SECURITY_UPDATES=true
  45. PROXY_HOST=
  46. PROXY_PORT=
  47. PROXY_USER=
  48. PROXY_PWD=

编辑/etc/oraInst.loc文件

目的:调整Inventory 目录不在$ORACLE_BASE 目录下

oraInventory 存放Oracle软件安装的目录信息,Oralce的安装和升级都需要用到这个目录,删除或丢失oraInventory目录的内容就会导致安装/升级失败。 oraInventory 目录的位置是由oraInst.loc 文件决定的: /etc/oraInst.loc (AIX and Linux Platform) /var/opt/oracle/OraInst.loc (Solaris and HP-UX platform)

  1. #新建文件
  2. vim /etc/oraInst.loc
  3. #行末追加
  4. inventory_loc=/data/app/inventory
  5. inst_group=oinstall

设置shm和tempfs,防止后续安装、启动时出现 ORA-00845: MEMORY_TARGET not supported on this system 错误

  1. df -h

image.png
临时修改

  1. mount -o remount,size=10G /dev/shm

永久修改

  1. vim /etc/fstab
  2. #行末追加
  3. tempfs /dev/shm tmpfs defaults,size=10G 0 0

image.png
更新使生效

  1. mount -a
  2. #重启
  3. reboot

root用户授权整个data目录为oracle专属目录,便于下面的安装

  1. chown -R oracle:oinstall /data
  2. chown -R oracle:oinstall /etc/oraInst.loc

正式安装!!!

以下皆为oracle用户操作

  1. su - oracle
  2. cd /data/database/
  3. ./runInstaller -silent -responseFile /data/etc/db_install.rsp -ignorePrereq

等待。。。
安装成功后,按照上述提示进行操作,使用root用户运行脚本

以下皆为root用户操作

  1. sh /data/app/oracle/product/11.2.0/root.sh

image.png

以下皆为oracle用户操作

切换回来

  1. su - oracle

配置oracle用户环境变量

  1. vim /home/oracle/.bash_profile
  2. #行尾追加
  3. umask 022
  4. export ORACLE_HOSTNAME=yan
  5. export ORACLE_BASE=/data/app/oracle
  6. export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/
  7. export ORACLE_SID=ORCL
  8. export ORACLE_UNQNAME=orcl
  9. export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH
  10. export LC_ALL="en_US"
  11. export LANG="en_US"
  12. export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
  13. export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"

使生效

  1. source /home/oracle/.bash_profile

配置监听

  1. netca /silent /responsefile /data/etc/netca.rsp

image.png
查看监听端口

  1. netstat -tnpl | grep 1521

image.png

静默创建数据库

编辑应答文件

  1. vim /data/etc/dbca.rsp
  2. #行末追加
  3. [GENERAL]
  4. RESPONSEFILE_VERSION = "11.2.0"
  5. OPERATION_TYPE = "createDatabase"
  6. [CREATEDATABASE]
  7. GDBNAME = "orcl"
  8. SID = "orcl"
  9. SYSPASSWORD = "oracle"
  10. SYSTEMPASSWORD = "oracle"
  11. SYSMANPASSWORD = "oracle"
  12. DBSNMPPASSWORD = "oracle"
  13. DATAFILEDESTINATION = /data/app/oracle/oradata
  14. RECOVERYAREADESTINATION=/data/app/oracle/fast_recovery_area
  15. CHARACTERSET = "AL32UTF8"
  16. TOTALMEMORY = "4096"

执行静默建库

  1. dbca -silent -responseFile /data/etc/dbca.rsp

密码皆输入 oracle
等待。。。
image.png
若有报错,则按提示查看日志文件,逐条分析错误
image.png

检查

检查进程

  1. ps -ef | grep ora_ | grep -v grep

image.png
检查监听状态

  1. lsnrctl status

image.png
登录数据库启动监听

  1. sqlplus / as sysdba
  1. SQL> startup

image.png
会报错,根据报错提示配置监听
配置数据库监听(init.ora.622202216751 文件,根据实际场景查看)

  1. cp /data/app/oracle/admin/orcl11g/pfile/init.ora.622202216751 /data/app/oracle/product/11.2.0/dbs/initORCL.ora

再次启动监听

  1. SQL> shutdown immediate
  2. SQL> startup

会报错:lk文件MOUNT异常

  1. ORA-01034: ORACLE not available
  2. ORA-27101: shared memory realm does not exist
  3. ORA-01102: cannot mount database in EXCLUSIVE mode

image.png

理由: 这个错误主要是lk文件造成的,该文件位于ORALCE_HOME下的dbs目录下。 这个lk的主要作用是说明DATABASE MOUNT上了,不用在MOUNT了. DATABASE UNMOUNT 后会删除掉,如果DATABASE确实没有MOUNT,这个文件在你也MOUNT上,只有手工删除,所以一定要小心.

  1. cd /data/app/oracle/product/11.2.0/dbs

发现文件确实存在
image.png

  1. fuser -u /data/app/oracle/product/11.2.0/dbs/lkORCL11G

image.png
确定,该文件没释放,用fuser命令kill掉:

  1. fuser -k lkORCL11G

image.png
再次重启,成功

  1. SQL> shutdown immediate
  2. SQL> startup

image.png

配置远程连接,是数据库可被远程访问

获取oracle安装路径

  1. echo $ORACLE_HOME

进入监听文件目录

  1. cd /data/app/oracle/product/11.2.0/network/admin
  2. vim listener.ora

上方插入!!!

  1. SID_LIST_LISTENER =
  2. (SID_LIST =
  3. (SID_DESC =
  4. (GLOBAL_DBNAME = ORCL)
  5. (SID_NAME = ORCL)
  6. )
  7. (SID_DESC =
  8. (PROGRAM = extproc)
  9. (SID_NAME = PLSExtProc)
  10. )
  11. )

image.png
分别检查 /data/app/oracle/product/11.2.0/network/admin/ 目录下

listener.ora tnsnames.ora sqlnet.ora

确认主机名

重启监听和数据库

重启数据库

  1. sqlplus / as sysdba;
  2. SQL> shutdown immediate
  3. SQL> startup

重启监听

  1. lsnrctl stop
  2. lsnrctl start
  3. lsnrctl status

sqlplus连接数据库,创建用户,便于测试

  1. sqlplus / as sysdba;
  2. SQL> create user sync_user identified by qwe123789;
  3. SQL> grant connect to sync_user;
  4. SQL> grant resource to sync_user;

设置归档,便于开启数据同步

sqlplus连接服务器,检查日志归档是否开启

  1. archive log list;

image.png

创建归档数据目录

  1. mkdir -p /data/app/oracle/oracle-data-test

检查数据库是否是spfile启动

  1. show parameter spfile

image.png

值为空,说明不是,开启,并重启

  1. create spfile from pfile;
  2. shutdown immediate
  3. startup

image.png

再次验证

  1. show parameter spfile

image.png

启用日志归档

  1. alter system set db_recovery_file_dest_size = 10G;
  2. alter system set db_recovery_file_dest = '/data/app/oracle/oracle-data-test' scope=spfile;

image.png

再次重启

  1. shutdown immediate;
  2. startup mount;

启用归档

  1. alter database archivelog;
  2. alter database open;

再次验证检查日志归档是否开启

  1. archive log list;

image.png

为捕获的数据库启用补充日志记录,以便数据更改捕获更改的数据库行之前的状态

  1. ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

进入表空间存储路径,确认dbf文件的集中存放地址

  1. cd /data/app/oracle/oradata/orcl11g
  2. ls -lrth

创建表空间

  1. CREATE TABLESPACE SYNC_TBS DATAFILE '/data/app/oracle/oradata/orcl11g/SYNC_TBS.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

image.png

创建用户 SYNC_USER 绑定表空间 SYNC_TBS 或 更改用户默认表空间

  1. CREATE USER SYNC_USER IDENTIFIED BY zyhcdc DEFAULT TABLESPACE SYNC_TBS QUOTA UNLIMITED ON SYNC_TBS;

image.png

  1. ALTER USER SYNC_USER DEFAULT TABLESPACE SYNC_TBS;

image.png

授予 SYNC_USER 用户dba的权限

  1. grant connect,resource,dba to SYNC_USER;

image.png

批量其他授权

  1. GRANT CREATE SESSION TO SYNC_USER;
  2. GRANT SELECT ON V_$DATABASE to SYNC_USER;
  3. GRANT FLASHBACK ANY TABLE TO SYNC_USER;
  4. GRANT SELECT ANY TABLE TO SYNC_USER;
  5. GRANT SELECT_CATALOG_ROLE TO SYNC_USER;
  6. GRANT EXECUTE_CATALOG_ROLE TO SYNC_USER;
  7. GRANT SELECT ANY TRANSACTION TO SYNC_USER;
  8. GRANT EXECUTE ON SYS.DBMS_LOGMNR TO SYNC_USER;
  9. GRANT SELECT ON V_$LOGMNR_CONTENTS TO SYNC_USER;
  10. GRANT CREATE TABLE TO SYNC_USER;
  11. GRANT LOCK ANY TABLE TO SYNC_USER;
  12. GRANT ALTER ANY TABLE TO SYNC_USER;
  13. GRANT CREATE SEQUENCE TO SYNC_USER;
  14. GRANT EXECUTE ON DBMS_LOGMNR TO SYNC_USER;
  15. GRANT EXECUTE ON DBMS_LOGMNR_D TO SYNC_USER;
  16. GRANT SELECT ON V_$LOG TO SYNC_USER;
  17. GRANT SELECT ON V_$LOG_HISTORY TO SYNC_USER;
  18. GRANT SELECT ON V_$LOGMNR_LOGS TO SYNC_USER;
  19. GRANT SELECT ON V_$LOGMNR_CONTENTS TO SYNC_USER;
  20. GRANT SELECT ON V_$LOGMNR_PARAMETERS TO SYNC_USER;
  21. GRANT SELECT ON V_$LOGFILE TO SYNC_USER;
  22. GRANT SELECT ON V_$ARCHIVED_LOG TO SYNC_USER;
  23. GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO SYNC_USER;

连接验证

本地使用 DBeaver 客户端工具连接该云主机数据库,验证是否可以远程连接
image.png
测试,建表,增删改查

  1. CREATE TABLE t_realtime_sync (
  2. number_int NUMBER,
  3. number_tinyint NUMBER,
  4. number_float NUMBER,
  5. number_double NUMBER,
  6. number_decimal NUMBER,
  7. date_date date,
  8. date_datetime date,
  9. string_char char(2),
  10. string_varchar varchar2(600),
  11. string_text clob,
  12. string_mediumtext clob
  13. );
  14. alter table t_realtime_sync add constraint pk_id_01 primary key (number_int);

修改 T_REALTIME_SYNC 表让其支持增量日志

  1. ALTER TABLE T_REALTIME_SYNC ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

image.png

完成