系统环境设置
以下皆为root用户操作
检查操作系统版本、内核版本、系统CPU、RAM
#查询操作系统版本cat /etc/redhat-release#查询系统内核uname -r#查询CPU核心数cat /proc/cpuinfo| grep "processor"| wc -l#查询内存cat /proc/meminfo| grep MemTotal#查询swap分区(安装oracle需要操作系统分配swap分区,云主机默认swap分区为0)cat /proc/meminfo| grep SwapTotal#查询硬盘配置fdisk -l|grep Disk

如下表所示
| 项目 | 值 |
|---|---|
| 操作系统 | 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分区情况
free -m

设置交换分区文件大小为1024m(举例)
dd if=/dev/zero of=/home/swap bs=1M count=1024
格式化交换文件,将swap文件格式化成s文件系统,系统才能使用
mkswap /home/swap
启动交换分区文件(要停止使用新创建的swap文件,只要执行 swapoff/home/swap 命令即可)
swapon /home/swap#再次查看swap分区,验证free -lh

若希望系统再次启动时,自动启用刚增加的swap,可编辑 /etc/fstab
vim /etc/fstab#增加如下行/home/swap swap swap defaults 0 0

修改linux swap空间的swappiness,降低对硬盘的缓存(现在一般1个G的内存可修改为10, 2个G的可改为5, 甚至是0。具体这样做)
临时修改:
#查询swappinesscat /proc/sys/vm/swappiness#修改swappiness值为10sudo sysctl vm.swappiness=10
永久修改:
sudo vi /etc/sysctl.conf#行末追加vm.swappiness=10#保存,重启reboot
修改主机名、关闭selinux
#修改主机名sudo hostnamectl set-hostname yansudo hostnamectl set-hostname "yan" --prettysudo hostnamectl set-hostname yan --staticsudo hostnamectl set-hostname yan --transient
#关闭selinuxsestatus
安装依赖包
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
配置资源限制和内核参数
添加如下参数,如果系统中某个参数高于下面的参数的值,保留较大的值,下面的数值只是官方要求的最小值,可以根据系统调整数值,以优化系统性能
vim /etc/sysctl.conf#行末追加fs.aio-max-nr = 1048576 # 同时可以拥有的的异步IO请求数目fs.file-max = 6815744 # 指定可以分配的文件句柄的最大数目kernel.shmall = 2097152 # 共享内存总量kernel.shmmax = 536870912 # 共享内存段的最大尺寸kernel.shmmni = 4096 # 系统范围内共享内存段的最大数量kernel.sem = 250 32000 100 128net.ipv4.ip_local_port_range = 9000 65500net.core.rmem_default = 262144 # 接收缓冲区大小net.core.rmem_max = 4194304 # 接收缓冲区最大值net.core.wmem_default = 262144 # 默认的发送缓冲区大小net.core.wmem_max = 1048576 # 发送缓冲区最大值
#使内核参数生效sysctl -p
创建oracle用户
创建以下本地操作系统组和用户
Oracle inventory组(通常为 oinstall) OSDBA组 (通常为 dba) OSOPER组 (通常为 oper) Oracle软件所有者(通常为 oracle)
groupadd oinstallgroupadd dbagroupadd operuseradd -g oinstall -G dba oracle
修改oracle用户的密码
echo "oracle" | passwd --stdin oraclepasswd oracle#换行再输入密码
编辑/etc/security/limits.conf(用户限制配置文件),添加如下参数
vim /etc/security/limits.conf#行末追加oracle soft nproc 2047oracle hard nproc 16384oracle soft nofile 1024oracle hard nofile 65536

编辑/etc/pam.d/login文件,将配置文件加入到登录验证模块
vim /etc/pam.d/login#行末追加#Add for Install Oracle Database 11gsession required /lib64/security/pam_limits.sosession required pam_limits.so
配置全局环境变量,编辑/etc/profile文件
vim /etc/profile#行末追加if [ $USER = "oracle" ]; thenif [ $SHELL = "/bin/ksh" ]; thenulimit -p 16384ulimit -n 65536elseulimit -u 16384 -n 65536fifi
禁用使用Transparent HugePages(启用Transparent HugePages,可能会导致造成内存在运行时的延迟分配)
cat /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/enabled#重启使生效reboot#再次查看是否启用 如果显示 [always]说明启用了cat /sys/kernel/mm/transparent_hugepage/enabled
准备Oracle安装环境
以下皆为root用户操作
创建Oracle安装目录
mkdir -p /data/app/chown -R oracle:oinstall /data/app/chmod -R 775 /data/app/
解压安装包
#进入软件包目录
cd /opt/software/oraclels -lrth

执行解压命令,解压到 /data 安装目录下
unzip -q linux.x64_11gR2_database_1of2.zip -d /dataunzip -q linux.x64_11gR2_database_2of2.zip -d /data
创建安装配置目录,将安装信息(元数据)与安装目录分离
mkdir -p /data/etc#拷贝新建安装文件cp /data/database/response/* /data/etc/
编辑安装文件
vim /data/etc/db_install.rsp
完整文件内容拷贝如下
关键是第5行,不能与oracle安装目录一致
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0oracle.install.option=INSTALL_DB_SWONLYORACLE_HOSTNAME=yanUNIX_GROUP_NAME=oinstallINVENTORY_LOCATION=/data/app/inventorySELECTED_LANGUAGES=en,zh_CNORACLE_HOME=/data/app/oracle/product/11.2.0ORACLE_BASE=/data/app/oracleoracle.install.db.InstallEdition=EEoracle.install.db.isCustomInstall=trueoracle.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.0oracle.install.db.DBA_GROUP=dbaoracle.install.db.OPER_GROUP=dbaoracle.install.db.CLUSTER_NODES=oracle.install.db.config.starterdb.type=oracle.install.db.config.starterdb.globalDBName=oracle.install.db.config.starterdb.SID=oracle.install.db.config.starterdb.characterSet=AL32UTF8oracle.install.db.config.starterdb.memoryOption=trueoracle.install.db.config.starterdb.memoryLimit=oracle.install.db.config.starterdb.installExampleSchemas=falseoracle.install.db.config.starterdb.enableSecuritySettings=trueoracle.install.db.config.starterdb.password.ALL=oracle.install.db.config.starterdb.password.SYS=oracle.install.db.config.starterdb.password.SYSTEM=oracle.install.db.config.starterdb.password.SYSMAN=oracle.install.db.config.starterdb.password.DBSNMP=oracle.install.db.config.starterdb.control=DB_CONTROLoracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=falseoracle.install.db.config.starterdb.dbcontrol.emailAddress=oracle.install.db.config.starterdb.dbcontrol.SMTPServer=oracle.install.db.config.starterdb.automatedBackup.enable=falseoracle.install.db.config.starterdb.automatedBackup.osuid=oracle.install.db.config.starterdb.automatedBackup.ospwd=oracle.install.db.config.starterdb.storageType=oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=oracle.install.db.config.asm.diskGroup=oracle.install.db.config.asm.ASMSNMPPassword=MYORACLESUPPORT_USERNAME=MYORACLESUPPORT_PASSWORD=SECURITY_UPDATES_VIA_MYORACLESUPPORT=DECLINE_SECURITY_UPDATES=truePROXY_HOST=PROXY_PORT=PROXY_USER=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)
#新建文件vim /etc/oraInst.loc#行末追加inventory_loc=/data/app/inventoryinst_group=oinstall
设置shm和tempfs,防止后续安装、启动时出现 ORA-00845: MEMORY_TARGET not supported on this system 错误
df -h

临时修改
mount -o remount,size=10G /dev/shm
永久修改
vim /etc/fstab#行末追加tempfs /dev/shm tmpfs defaults,size=10G 0 0

更新使生效
mount -a#重启reboot
root用户授权整个data目录为oracle专属目录,便于下面的安装
chown -R oracle:oinstall /datachown -R oracle:oinstall /etc/oraInst.loc
正式安装!!!
以下皆为oracle用户操作
su - oraclecd /data/database/./runInstaller -silent -responseFile /data/etc/db_install.rsp -ignorePrereq
等待。。。
安装成功后,按照上述提示进行操作,使用root用户运行脚本
以下皆为root用户操作
sh /data/app/oracle/product/11.2.0/root.sh

以下皆为oracle用户操作
切换回来
su - oracle
配置oracle用户环境变量
vim /home/oracle/.bash_profile#行尾追加umask 022export ORACLE_HOSTNAME=yanexport ORACLE_BASE=/data/app/oracleexport ORACLE_HOME=$ORACLE_BASE/product/11.2.0/export ORACLE_SID=ORCLexport ORACLE_UNQNAME=orclexport PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATHexport LC_ALL="en_US"export LANG="en_US"export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
使生效
source /home/oracle/.bash_profile
配置监听
netca /silent /responsefile /data/etc/netca.rsp

查看监听端口
netstat -tnpl | grep 1521
静默创建数据库
编辑应答文件
vim /data/etc/dbca.rsp#行末追加[GENERAL]RESPONSEFILE_VERSION = "11.2.0"OPERATION_TYPE = "createDatabase"[CREATEDATABASE]GDBNAME = "orcl"SID = "orcl"SYSPASSWORD = "oracle"SYSTEMPASSWORD = "oracle"SYSMANPASSWORD = "oracle"DBSNMPPASSWORD = "oracle"DATAFILEDESTINATION = /data/app/oracle/oradataRECOVERYAREADESTINATION=/data/app/oracle/fast_recovery_areaCHARACTERSET = "AL32UTF8"TOTALMEMORY = "4096"
执行静默建库
dbca -silent -responseFile /data/etc/dbca.rsp
密码皆输入 oracle
等待。。。
若有报错,则按提示查看日志文件,逐条分析错误
检查
检查进程
ps -ef | grep ora_ | grep -v grep

检查监听状态
lsnrctl status

登录数据库启动监听
sqlplus / as sysdba
SQL> startup

会报错,根据报错提示配置监听
配置数据库监听(init.ora.622202216751 文件,根据实际场景查看)
cp /data/app/oracle/admin/orcl11g/pfile/init.ora.622202216751 /data/app/oracle/product/11.2.0/dbs/initORCL.ora
再次启动监听
SQL> shutdown immediateSQL> startup
会报错:lk文件MOUNT异常
ORA-01034: ORACLE not availableORA-27101: shared memory realm does not existORA-01102: cannot mount database in EXCLUSIVE mode

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

确定,该文件没释放,用fuser命令kill掉:
fuser -k lkORCL11G

再次重启,成功
SQL> shutdown immediateSQL> startup
配置远程连接,是数据库可被远程访问
获取oracle安装路径
echo $ORACLE_HOME
进入监听文件目录
cd /data/app/oracle/product/11.2.0/network/adminvim listener.ora
上方插入!!!
SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = ORCL)(SID_NAME = ORCL))(SID_DESC =(PROGRAM = extproc)(SID_NAME = PLSExtProc)))

分别检查 /data/app/oracle/product/11.2.0/network/admin/ 目录下
listener.ora tnsnames.ora sqlnet.ora
确认主机名
重启监听和数据库
重启数据库
sqlplus / as sysdba;SQL> shutdown immediateSQL> startup
重启监听
lsnrctl stoplsnrctl startlsnrctl status
sqlplus连接数据库,创建用户,便于测试
sqlplus / as sysdba;SQL> create user sync_user identified by qwe123789;SQL> grant connect to sync_user;SQL> grant resource to sync_user;
设置归档,便于开启数据同步
sqlplus连接服务器,检查日志归档是否开启
archive log list;
创建归档数据目录
mkdir -p /data/app/oracle/oracle-data-test
检查数据库是否是spfile启动
show parameter spfile
值为空,说明不是,开启,并重启
create spfile from pfile;shutdown immediatestartup
再次验证
show parameter spfile
启用日志归档
alter system set db_recovery_file_dest_size = 10G;alter system set db_recovery_file_dest = '/data/app/oracle/oracle-data-test' scope=spfile;
再次重启
shutdown immediate;startup mount;
启用归档
alter database archivelog;alter database open;
再次验证检查日志归档是否开启
archive log list;
为捕获的数据库启用补充日志记录,以便数据更改捕获更改的数据库行之前的状态
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
进入表空间存储路径,确认dbf文件的集中存放地址
cd /data/app/oracle/oradata/orcl11gls -lrth
创建表空间
CREATE TABLESPACE SYNC_TBS DATAFILE '/data/app/oracle/oradata/orcl11g/SYNC_TBS.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
创建用户 SYNC_USER 绑定表空间 SYNC_TBS 或 更改用户默认表空间
CREATE USER SYNC_USER IDENTIFIED BY zyhcdc DEFAULT TABLESPACE SYNC_TBS QUOTA UNLIMITED ON SYNC_TBS;

ALTER USER SYNC_USER DEFAULT TABLESPACE SYNC_TBS;
授予 SYNC_USER 用户dba的权限
grant connect,resource,dba to SYNC_USER;
批量其他授权
GRANT CREATE SESSION TO SYNC_USER;GRANT SELECT ON V_$DATABASE to SYNC_USER;GRANT FLASHBACK ANY TABLE TO SYNC_USER;GRANT SELECT ANY TABLE TO SYNC_USER;GRANT SELECT_CATALOG_ROLE TO SYNC_USER;GRANT EXECUTE_CATALOG_ROLE TO SYNC_USER;GRANT SELECT ANY TRANSACTION TO SYNC_USER;GRANT EXECUTE ON SYS.DBMS_LOGMNR TO SYNC_USER;GRANT SELECT ON V_$LOGMNR_CONTENTS TO SYNC_USER;GRANT CREATE TABLE TO SYNC_USER;GRANT LOCK ANY TABLE TO SYNC_USER;GRANT ALTER ANY TABLE TO SYNC_USER;GRANT CREATE SEQUENCE TO SYNC_USER;GRANT EXECUTE ON DBMS_LOGMNR TO SYNC_USER;GRANT EXECUTE ON DBMS_LOGMNR_D TO SYNC_USER;GRANT SELECT ON V_$LOG TO SYNC_USER;GRANT SELECT ON V_$LOG_HISTORY TO SYNC_USER;GRANT SELECT ON V_$LOGMNR_LOGS TO SYNC_USER;GRANT SELECT ON V_$LOGMNR_CONTENTS TO SYNC_USER;GRANT SELECT ON V_$LOGMNR_PARAMETERS TO SYNC_USER;GRANT SELECT ON V_$LOGFILE TO SYNC_USER;GRANT SELECT ON V_$ARCHIVED_LOG TO SYNC_USER;GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO SYNC_USER;
连接验证
本地使用 DBeaver 客户端工具连接该云主机数据库,验证是否可以远程连接
测试,建表,增删改查
CREATE TABLE t_realtime_sync (number_int NUMBER,number_tinyint NUMBER,number_float NUMBER,number_double NUMBER,number_decimal NUMBER,date_date date,date_datetime date,string_char char(2),string_varchar varchar2(600),string_text clob,string_mediumtext clob);alter table t_realtime_sync add constraint pk_id_01 primary key (number_int);
修改 T_REALTIME_SYNC 表让其支持增量日志
ALTER TABLE T_REALTIME_SYNC ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
