环境: CentOS7.3
Oracle 12cR2 linuxx64_12201_database.zip
JDK 8 (Java SE Development Kit) with the JNDI extension
启用功能:
Automatic Memory Management
字符集:AL32UTF8
ORACLE_HOME: /u01/oracle/orahomes/product/11.2.0/db_1
ORADATA: /u01/oracle/orahomes/oradata
参考:https://oracle-base.com/articles/12c/oracle-db-12cr2-installation-on-oracle-linux-6-and-7
最小安装(Minimal option)
X Window System
OpenSSH
Red Hat Enterprise Linux 7: 3.10.0-123.el7.x86_64 or later
yum groupinstall "X Window System"
hostnamectl
# cat /etc/redhat-release
# lsb_release -id
# uname -r
grep MemTotal /proc/meminfo
# grep SwapTotal /proc/meminfo
swap space:
Between 1 GB and 2 GB 1.5RAM
Between 2 GB and 16 GB 等于RAM
More than 16 GB 16 GB
建swap
dd if=/dev/zero of=/disk1/swap bs=8M count=1024
#mkswap /disk1/swap
mkswap: /disk1/swap: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 17825788 KiB
no label, UUID=023fe065-88e5-47c8-b4e3-0bb083214295
#swapon /disk1/swap
#vi /etc/fstab
/disk1/swap swap swap defaults 0 0
执行一下命令验证挂载是否有问题,如果不报错即为成功
#mount –a
# df -h /tmp
空间需求:
/tmp directory: >=1 GB
Software Files directory: >=4.7G
Data Files directory: >=1.7G
# uname -m
df -h /dev/shm
从RedHat6开始,系统缺省启用透明大页,可以实时配置,不需要重启才能生效配置
ORACLE官方不建议使用,因为存在一些问题:
1. 在RAC环境下 透明大页(Transparent HugePages )会导致异常节点重启,和性能问题;
2. 在单机环境中,透明大页(Transparent HugePages ) 也会导致一些异常的性能问题;
查看:
# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
如果输出结果为[always]表示透明大页启用了,[never]表示透明大页禁用、[madvise]表示
如果HugePages_Total返回0,也意味着透明大页禁用了
grep -i HugePages_Total /proc/meminfo
返回0也意味着透明大页禁用了
cat /proc/sys/vm/nr_hugepages
禁用透明大页方法:
1)添加“transparent_hugepage=never”到内核启动行 /etc/grub.conf
title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ transparent_hugepage=never
initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img
2)重启系统
DNS OR /etc/hosts
如果原文件已有定义,则保留原文件的配置如kernel.shmmax
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
/sbin/sysctl -p
/sbin/sysctl -a
SELINUX=permissive
SELINUX=disabled
vi /etc/security/limits.conf
oracle soft memlock 1048576 # -1 for lock_sga *.lock_sga=TRUE
oracle hard memlock 1048576
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft core unlimited
oracle hard core unlimited
oracle soft stack 10240
官网给的建议如下表:
|
Resource Shell Limit |
Resource |
Soft Limit |
Hard Limit |
|
Open file descriptors |
nofile |
at least 1024 |
at least 65536 |
|
Number of processes available to a single user |
nproc |
at least 2047 |
at least 16384 |
|
Size of the stack segment of the process |
stack |
at least 10240 KB |
at least 10240 KB, and at most 32768 KB |
|
Maximum locked memory limit |
memlock |
at least 90 percent of the current RAM when HugePages memory is enabled and at least 3145728 KB (3 GB) when HugePages memory is disabled |
at least 90 percent of the current RAM when HugePages memory is enabled and at least 3145728 KB (3 GB) when HugePages memory is disabled |
锁住sga:
Linux 默认最大的可锁定的内存是 32k ,若要在内存中锁定 sga防止使用swap, lock_sga=true ,则要 去掉这个限制( ulimit -l unlimited)
第一步:
/etc/security/limits.conf <<eof <="" eof
oracle soft memlock -1# -1 unlimited for lock_sga *.lock_sga=TRUE
oracle hard memlock -1
第二步:
lock_sga=true
pre_page_sga=ture
ulimit –a
ulimit -l unlimited
ulimit -a
cat >> /etc/profile <<eof <="" eof
if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
①关闭firewall
#停止firewall
systemctl stop firewall.service
#禁止firewall开机启动
systemctl disable firewall.service
②安装iptables防火墙
#安装iptables
yum install iptables-services
#编辑防火墙文件
vi /etc/sysconfig/iptables
添加80和3306端口
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT
#重启防火墙使配置文件生效
systemctl restart iptables.service
#设置iptables防火墙为开机启动项
systemctl enable iptables.service
③关闭SELINUX
vi /etc/selinux/config
#注释以下配置
SELINUX=enforcing
SELINUXTYPE=targeted
#增加以下配置
SELINUX=disabled
#使配置立即生效
setenforce 0
binutils-2.23.52.0.1-12.el7
(x86_64)
compat-libcap1-1.10-3.el7 (x86_64)
compat-libstdc++-33-3.2.3-71.el7 (i686)
compat-libstdc++-33-3.2.3-71.el7 (x86_64)
glibc-2.17-36.el7 (i686)
glibc-2.17-36.el7 (x86_64)
glibc-devel-2.17-36.el7 (i686)
glibc-devel-2.17-36.el7 (x86_64)
ksh
libaio-0.3.109-9.el7 (i686)
libaio-0.3.109-9.el7 (x86_64)
libaio-devel-0.3.109-9.el7 (i686)
libaio-devel-0.3.109-9.el7 (x86_64)
libgcc-4.8.2-3.el7 (i686)
libgcc-4.8.2-3.el7 (x86_64)
libstdc++-4.8.2-3.el7 (i686)
libstdc++-4.8.2-3.el7 (x86_64)
libstdc++-devel-4.8.2-3.el7 (i686)
libstdc++-devel-4.8.2-3.el7 (x86_64)
libxcb-1.9-5.el7 (i686)
libxcb-1.9-5.el7 (x86_64)
libX11-1.6.0-2.1.el7 (i686)
libX11-1.6.0-2.1.el7 (x86_64)
libXau-1.0.8-2.1.el7 (i686)
libXau-1.0.8-2.1.el7 (x86_64)
libXi-1.7.2-1.el7 (i686)
libXi-1.7.2-1.el7 (x86_64)
libXtst-1.2.2-1.el7 (i686)
libXtst-1.2.2-1.el7 (x86_64)
make-3.82-19.el7 (x86_64)
net-tools-2.0-0.17.20131004git.el7 (x86_64) (for
Oracle RAC and Oracle Clusterware)
nfs-utils-1.3.0-0.21.el7.x86_64 (for Oracle
ACFS)
smartmontools-6.2-4.el7 (x86_64)
sysstat-10.1.5-1.el7 (x86_64)
unixODBC-2.3.1 or later
LDAP
cvuqdisk-1.0.10-1.rpm for cluster
JDK 8 (Java SE Development Kit) with the JNDI extension with Oracle Java Database Connectivity.
yum install binutils -y yum install compat-libcap1 -y yum install compat-libstdc++-33 -y yum install compat-libstdc++-33.i686 -y yum install glibc -y yum install glibc.i686 –y yum install glibc-devel -y yum install glibc-devel.i686 -y yum install ksh -y yum install libaio -y yum install libaio.i686 -y yum install libaio-devel -y yum install libaio-devel.i686 -y yum install libX11 -y yum install libX11.i686 -y yum install libXau -y yum install libXau.i686 -y yum install libXi -y yum install libXi.i686 -y yum install libXtst -y yum install libXtst.i686 -y yum install libgcc -y yum install libgcc.i686 -y yum install libstdc++ -y yum install libstdc++.i686 -y yum install libstdc++-devel -y yum install libstdc++-devel.i686 -y yum install libxcb -y yum install libxcb.i686 -y yum install make -y yum install nfs-utils -y yum install net-tools -y yum install smartmontools -y yum install sysstat –y yum install unixODBC -y yum install unixODBC-devel -y
groupadd -g 501 oinstall
groupadd -g 502 dba
groupadd -g 503 oper
groupadd -g 504 asmadmin
groupadd -g 506 asmdba
groupadd -g 505 asmoper
useradd -u 502 -g oinstall -G dba,asmdba,oper oracle
passwd oracle
# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
# vi /home/oracle/.bash_profile
# Oracle 12g Database Environment Variables
# User specific environment and startup programs
export NLS_LANG=american_america. AL32UTF8
export ORACLE_BASE=/u01/oracle/orahomes
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1
export ORACLE_PATH=.:$ORACLE_HOME/rdbms/admin
export ORACLE_SID=orcl
export ORACLE_HOSTNAME=db15.xx.com
#export ORACLE_UNQNAME=DB11G;
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS11=$ORACLE_HOME/nls/data
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
#export ORACLE_PATH=.:$ORACLE_HOME/rdbms/admin:/oracle/maintain/sql
# UNIX Environment Variables
export LANG=en_US
export PATH=.:$ORACLE_HOME/bin:${PATH}:$HOME/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
# Use old Linuxthreads with floating stacks instead of
# the new Native POSIX Thread Library (NPTL)
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
export TZ='Asia/Shanghai'
unset CLASSPATH
#alias
#alias ls='ls -FA'
alias rm='rm -i'
alias oh='cd $ORACLE_HOME'
alias os='echo $ORACLE_SID'
alias tns='cd $ORACLE_HOME/network/admin/'
alias log='cd $ORACLE_BASE/diag/rdbms/tdwlds/TDWLDS/trace'
alias alert='tail -100 $ORACLE_BASE/diag/rdbms/tdwlds/TDWLDS/trace/alert_$ORACLE_SID.log|more'
mkdir -p /u01/oracle/orahomes
chown -R oracle:oinstall /u01
chmod -R 775 /u01
# DISPLAY=:0.0
# xhost +
$ ./runInstaller
错误:
-use Automatic Shared Memory Management
[DBT-11217] Unable to check available shared memory on specified node(s) (db01).
-use Automatic Memory Management
[DBT-11211] The Automatic Memory Management option is not allowed when the total physical memory is greater than 4GB.
sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Mon Mar 20 21:26:14 2017
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 DAVE READ WRITE NO
SQL>
alter database archivelog
archive log list
一、安全
1.Remove the GRANT EXECUTE TO PUBLIC privilege from potentially harmful packages
revoke execute on utl_file from public;
revoke execute on dbms_random from public;
revoke execute on utl_http from public;
revoke execute on utl_smtp from public;
revoke execute on utl_tcp from public;
2.确保以下账号密码是被改变的
SYS
SYSTEM
DBSNMP
OUTLN
CTXSYS
PERFSTAT
3.确保只有sys、system使用SYSTEM 表空间
alter database default tablespace users;
alter user sys default tablespace system;
alter user system default tablespace system;
select username, default_tablespace from dba_users where default_tablespace = 'SYSTEM';
alter user default tablespace ;
4. Lock and expire potentially harmful built-in user-ids.
alter user outln password expire account lock;
alter user dbsnmp password expire account lock;
1.登录限制
alter profile DEFAULT limit
failed_login_attempts unlimited
password_life_time unlimited;
2.固定大小的还原表空间 (最好在系统运行一段时间后再做,这样才有依据)
可获得最佳保留期的自动优化,支持闪回操作,限制表空间增长
对于固定UNDO表空间,将会通过表空间的剩余空间来最大限度保留UNDO信息。如果FIXED UNDO表空间没有对保留时间作GUARANTEE(alter tablespace xxx retention guarantee;),则undo_retention参数将不会起作用。
create undo tablespace thinktbs datafile '/u01/app/oracle/oradata/ORCL/datafile/think_undo.dbf' size 2m autoextend off;
alter system set undo_tablespace=thinktbs;
undo表空间的大小有三个影响因素:
1)undo_retention
2)每秒需要的undo数据块:
v$undostat (select max(undoblks/((end_time-begin_time)*24*3600)) from v$undostat; )
3)缺省块大小 db_block_size
计算公式:undo size=db_block_size*undo_retention*max(undoblks/((end_time-begin_time)*24*3600))
计算方法2(直方图):DBA_HIST_UNDOSTAT.tuned_undoretention
select to_char(begin_time,'DD-MON-RR HH24:MI') begin_time,to_char(end_time,'DD-MON-RR HH24:MI') end_time,tuned_undoretention from v$undostat order by end_time;
ALTER DATABASE DATAFILE '/home/oracle/oradata/EMDB/undotbs01.dbf' RESIZE 1024M
ALTER DATABASE DATAFILE '/home/oracle/oradata/EMDB/undotbs01.dbf' AUTOEXTEND OFF
3.redo日志组评估
3.指定磁盘扇区大小
新的磁盘物理扇区一般是4kb, 可用 fdisk -lu /dev/sda 查看
[root@wldb15.tudou.com]$ fdisk -lu /dev/sda2
Disk /dev/sda2: 262.7 GB, 262721765376 bytes
255 heads, 63 sectors/track, 31940 cylinders, total 513128448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
这是512bytes扇区的磁盘
4k 扇区有两种工作模式:native mode 和 emulation mode。
1)Native mode,即4k模式,物理和逻辑的block大小一样,都是4096 bytes。 但native mode 的缺点是需要操作系统和软件(如DB)的支持。
Oracle 从11gR2 之后,就支持4k IO操作,操作系统方面, Linux 内核在2.6.32 之后都支持4k IO操作。
2)emulation mode:也称512e。 在该模式下,物理块还是4k,但逻辑块是512 bytes。 这种模式主要是为了向后兼容。
但在该模式下,底层物理还是4k进行操作,所以就会导致Partial I/O 和4k 对齐的问题。
在Oracle 数据库的文件中,默认情况下,datafile的block 是8KB,控制文件是16KB,所以都没有partial IO的问题,唯有online redo log,默认是512 bytes,存在partial IO的问题。
使用以下命令的SECTOR_SIZE和BLOCKSIZE子句:
? CREATE DISKGROUP
? ALTER DATABASE
? CREATE DATABASE
? CREATE CONTROL FILE
CREATE DATABASE sample NORESETLOGS FORCE LOGGING
ARCHIVELOG
LOGFILE
GROUP 1 '$ORACLE_BASE/oradata/sample/redo01.log'
SIZE 100M BLOCKSIZE 4096,
GROUP 2 '$ORACLE_BASE/oradata/sample/redo02.log'
SIZE 100M BLOCKSIZE 4096
DATAFILE
。。。
alter database add logfile group 5 size 100m blocksize 4096; (前提条件是底层的存储支持4k 扇区)
在emulation mode模式下,修改blocksize 4096,可能会得到:
ORA-01378: The logical block size (4096) of file +DATA is not compatible with the disk sector size (media sector size is 512 and host sector size is 512)
只要确认底层存储物理是4k的扇区,那么可以设置_disk_sector_size_override参数为true,来覆盖扇区的设置。该参数支持动态修改:
ALTER SYSTEM SET “_DISK_SECTOR_SIZE_OVERRIDE”=”TRUE”;
在自动存储管理(ASM) 环境下,你可以为磁盘组设置SECTOR_SIZE属性
该属性只能在创建磁盘组时设置,通过使用CREATE DISKGROUP命令
Unix核心参数设置
4.内存大页开启
5.PFILE参数设置
Processes
需要注意的是:
SEMMSL必须设定为至少要10 + '进程数的最大值'
SEMMNS 也依赖于每个数据库上的进程参数值。
6.主要的数据库表空间存放位置(存储介质直接影响数据库性能),将REDO和DATA分开放置。
DATA数据放在随机读性能好的介质上,如SSD磁阵,SSD卡,FusionIO等,延时越小越好。
REDO数据放在顺序写的介质上,保证带宽大小。如果REDO有瓶颈,DATA存储介质再牛逼也不顶用了。
7、如果有网络,就要设置网络中断绑定
瓶颈分析:
1、对系统层面进行分析,CPU,MEM,IO一个一个遍历检查,确保硬件没有出现瓶颈。如果这个提前出现问题,就赶紧换硬件再说。
2、如果硬件OK ,而CPU的利用率等没有上去,那么输出AWR报告进行分析,这个分析需要相对专业的知识,慢慢积累吧。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/807718/viewspace-2140745/ ,如需转载,请注明出处,否则将追究法律责任。