由甲骨文公司出品,目前最新版本为Oracle12c
本课程以64位企业版Oracle11gR2为例
官方网站:http://www.oracle.com/
采用C/S模式、支持SQL查询语言
在稳定性、高性能、安全性等方面优于其他数据库,因此常用于政府及企业
.
安装Red Hat Enterprise Linux 5.8操作系统的要求:
防火墙的配置选项:禁用
SELinux设置:禁用
默认安装:软件开发
.
系统配置的一般要求
物理内存,不少于1GB
交换分区,为物理内存的1.5~2倍
磁盘空间,不少于8GB
拥有固定的FQDN名称,安装后不建议再更改

.

oracle的优点
1、处理速度快,非常快
2、安全级别高。支持快闪以及完美的恢复,即使硬件坏了 也可以恢复到故障发前的1s
3、几台数据库做负载数据库,可以做到30s以内故障转移,
4、网格控制,以及 数据仓库方面 也非常强大

安装oracle的准备工作
系统及配置要求
确认linux系统的版本

[root@oracle Desktop]# cat /etc/redhat-release
.
物理内存:必须高于1G。
物理内存应不少于1GB,对于VMWARE虚拟机建议不少于1200MB.对于系统中的交换分区设置,应参以下约定:物理内存为1GB~2GB时,交换分区为物理内存的1.5~2倍;物理内存为2GB~16GB时,交换分区与物理内存大小相同;物理内存超过16GB时,交换分区使用16GB就可以了。
[root@oracle Desktop]# grep MemTotal /proc/meminfo

[root@oracle Desktop]# grep SwapTotal /proc/meminfo
.
硬盘空间:企业版需要5.65G,还要确保/tmp目录所在的分区空间不少于1G,建议总的空间给10G以上
[root@oracle Desktop]# df -hT /tmp/

.

确定主机名之后修改hosts文件(安装好oracle之后再修改主机名会导致数据库启动失败)

[root@oracle Desktop]# vim /etc/sysconfig/network
HOSTNAME=oracleserver
[root@oracle Desktop]# hostname oracleserver

[root@oracle Desktop]# bash

[root@oracle Desktop]# vim /etc/hosts
10.0.0.1 oracleserver
[root@oracle Desktop]# mount /dev/cdrom /media/

[root@oracle Desktop]# cd /media/

[root@oracle Desktop]# ls

[root@oracle Desktop]# cd /

.

配置yum,安装支持包

Vim oracle.repo
[root@oracle Desktop]# yum -y install compat-libstdc elfutils-libelf-devel libaio-devel numactl-devel unixODBC*

.

还需要安装pdksh包,但是Redhat6.5光盘中的ksh存在兼容性冲突,所以需要单独安装pdksh-5.2.14-37.el5_8.1.x86_64.rpm,使用rpm安装即可。

[root@oracle Desktop]# umount /dev/cdrom /media/

[root@oracle Desktop]# mount /dev/cdrom /media/

[root@oracle Desktop]# cd /media/

[root@oracle Desktop]# ls

[root@oracle Desktop]# rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm

.

调整内核参数
内核参数调整体现在/etc/sysctl.conf文件中。主要包括对内存调度、端口范围、打开文件数、I/O请求等相关的一些设置,相关数值不可低于安装要求。修改完毕后通过执行sysctl –p命令使新配置立即生效。
vim /etc/sysctl.conf 在文件尾部添加如下内容:

[root@oracle Desktop]# vim /etc/sysctl.conf

#net.bridge.bridge-nf-call-ip6tables = 0 //三行添加注释
#net.bridge.bridge-nf-call-iptables = 0
#net.bridge.bridge-nf-call-arptables = 0

fs.aio-max-nr = 1048576 //全部手动添加
fs.file-max = 6815744
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 = 5194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.shmmax = 536870912 //修改
kernel.shmall = 2097152 //修改

[root@oracle Desktop]# sysctl -p

.

各参数详解:

fs.aio-max-nr:
此参数限制并发未完成的请求,应该设置避免I/O子系统故障。
fs.file-max:
该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。
kernel.shmall:
该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求.
kernel.shmmax:
是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。
.
官方建议值:
32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。
64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,例如,如果为12GB物理内存,可取1210241024*1024-1=12884901887。 
kernel.shmmni:
该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。
kernel.sem:
以kernel.sem = 250 32000 100 128为例:
       250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。
       32000是参数semmns的值,表示系统内可允许的信号量最大数目。
       100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。
       128是参数semmni的值,表示系统信号量集合总数。
.
net.ipv4.ip_local_port_range:
表示应用程序可使用的IPv4端口范围。
net.core.rmem_default:
表示套接字接收缓冲区大小的缺省值。
net.core.rmem_max:
表示套接字接收缓冲区大小的最大值。
net.core.wmem_default:
表示套接字发送缓冲区大小的缺省值。
net.core.wmem_max:
表示套接字发送缓冲区大小的最大值。
.
oracle用户要求
Oracle需要固定的运行用户oracle,安装组oinstall,管理组dba,这些账号需要提前建立好。此外用来存放oracle程序及数据库文件的基本目录/opt/oracle也应该提前创建好。
.
建立用户和组

[root@oracle Desktop]# groupadd oinstall

[root@oracle Desktop]# groupadd dba

[root@oracle Desktop]# useradd -g oinstall -G dba oracle

[root@oracle Desktop]# passwd oracle
.

建立相关目录

[root@oracle Desktop]# mkdir /opt/oracle

[root@oracle Desktop]# chown -R oracle:oinstall /opt/oracle/

[root@oracle Desktop]# chmod -R 755 /opt/oracle/

[root@oracle Desktop]# sudo mkdir /opt/tmp

[root@oracle Desktop]# sudo chmod a+wr /opt/tmp/

.

Oracle11g的安装任务应以运行用户oracle的身份执行,需适当调整oracle用户的环境配置以便满足要求。Oracle11g安装界的语言类型取决于环境变量LANG,若希望用中文安装界面,则应确保LANG变量的值为”zhCN.UTF-8”。中文安装界面有时会因缺少字体、字体配置不当等原因导致界面乱码。这时可以改用”enUS.UTF-8”英文环境以回避类似问题。
.

[root@oracle Desktop]# vim ~oracle/.bash_profile

umask 022
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1
export ORACLE_SID=orcl
export LANG=zh_CN.UTF-8
export NLS_LANG="AMERICAN_AMERICA".ZHS16GBK
export PATH=$ORACLE_HOME/bin:$PATH
export DISPLAY=:0.0

.

为oracle用户设置Shell限制:为了优化性能,需要添加oracle用户的限制参数。进程会话限制可以采用pamlimits认证模块来实现,通过修改登录程序login的PAM设置以启用该认证。
修改/etc/security/limits.conf,将用户oracle能够打开的进程数、进程使用的文件数加在。加入如下内容:*
.

[root@oracle Desktop]# vim /etc/security/limits.conf

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240

第1行是设置进程数软限制;第2行是设置进程数硬限制;第3行是设置文件数软限制;第4行是设置文件数硬限制

.

修改/etc/pam.d/login,加入如下内容:

[root@oracle Desktop]# vim /etc/pam.d/login
session required /lib/security/pam_limits.so
session required pam_limits.so

.

配置oracle用户资源限制,不配置也不会影响oracle数据库的成功安装,但是考虑到若有糟糕的sql语句对服务器资源的无限占用,导致长时间对用户请求无响应,建议提前限制oracle用户资源。
配置方法如下:
vim /etc/profile,输入以下内容:
.

[root@oracle Desktop]# vim /etc/profile

if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

.

解决中文乱码问题
在RHEL6.5中安装oracle11g时,中文安装界面乱码,解决方法:
在Linux命令提示符下执行以下命令,把字体库安装到相应位置即可

[root@oracle Desktop]# mkdir -p /usr/share/fonts/zh_CN/TrueType

[root@oracle Desktop]# umount /dev/cdrom /media/

[root@oracle Desktop]# mount /dev/cdrom /media/

[root@oracle Desktop]# cd /media/

[root@oracle Desktop]# cp zysong.ttf /usr/share/fonts/zh_CN/TrueType/

[root@oracle Desktop]# chmod o+r /usr/share/fonts/zh_CN/TrueType/zysong.ttf

.

关闭防火墙和selinux,并设置永久ip地址和主机名

[root@oracle Desktop]# chkconfig --level 35 iptables off

[root@oracle Desktop]# vim /etc/sysconfig/selinux
SELINUX=disabled

.
配置永久ip然后重启
[root@oracle Desktop]# reboot

.
.

正式安装oracle

[root@oracle Desktop]# umount /dev/cdrom /media/

[root@oracle Desktop]# mount /dev/cdrom /media/

[root@oracle Desktop]# cd /media/
.
oracle11g软件包copy到系统/home/oracle中

[root@oracle Desktop]# cp linux.x64_11gR2_database_1of2.zip /home/oracle/

[root@oracle Desktop]# cp linux.x64_11gR2_database_2of2.zip /home/oracle/
.

[root@oracle Desktop]# su - oracle

解压缩软件包

[root@oracle Desktop]# unzip linux.x64_11gR2_database_1of2.zip

[root@oracle Desktop]# unzip linux.x64_11gR2_database_2of2.zip

[root@oracle Desktop]# su - root

.

授权允许用户oracle使用图形终端,例如执行:xhost + oracle@localhost,表示允许用户oracle从本机访问,或者执行xhost + 表示取消所有限制,这里执行xhost +即可。

[root@oracle Desktop]# xhost +
[root@oracle Desktop]# su - oracle

.

执行安装程序

[root@oracle Desktop]# cd database/
[root@oracle Desktop]# ./runInstaller

.
配置安全更新

Oracle数据库部署_第1张图片

.
Oracle数据库部署_第2张图片

.
Oracle数据库部署_第3张图片

.
Oracle数据库部署_第4张图片
安装类型选择“典型安装”。如果为各种管理账号分别设置口令,或者选择语言版本,设置自动备份,存储管理等,则应选择“高级安装”。
.
Oracle数据库部署_第5张图片
典型安装的配置,必须设置管理员口令,其它参数采用默认值,系统将自动创建3个用户,分别是:超级管理员sys,system和数据库所有者sysman,当选择高级安装时,可以为3个用户分别设置口令,否则将使用同一个管理口令。
.
Oracle数据库部署_第6张图片
创建产品清单,将清单目录修改为/opt/oracle/oralnventory,以便oracle用户有权限写入oracle数据库的清单信息。
.
Oracle数据库部署_第7张图片
先决条件检查及概要,出现下面的程序包状态失败,因为这些包是32位的包,而我们的系统是64位的,所以不用理会,点击“全部忽略”。然后点击“下一步”
.
Oracle数据库部署_第8张图片
.
Oracle数据库部署_第9张图片
.
Oracle数据库部署_第10张图片
.
Oracle数据库部署_第11张图片
.
Oracle数据库部署_第12张图片
.
Oracle数据库部署_第13张图片
.
Oracle数据库部署_第14张图片
完成安装
文件复制及相关部署结束之后,会弹出“执行配置脚本”对话框,根据提示切换为root用户并以此执行脚本,如下所示。
.
Oracle数据库部署_第15张图片
.
Oracle数据库部署_第16张图片
最后单击“确定”按钮,会提示访问https://oracleserver:1158/em/,使用此地址访问OEM(企业管理器)平台,以便对oracle数据库实例进行管理。
.
.

[root@oracle Desktop]# /opt/oracle/oraInventory/oinstRoot.shbr/>[root@oracleDesktop]#
/opt/oracle/product/11.2/db_1/root.sh
.

验证安装结果
访问OEM平台(OEM平台可以进行图像化管理oracle,比较方便)。
在浏览器中输入:https://oracleserver:1158/em/,输入用户名:sys,密码pwd123,连接身份选择SYSDBA
Oracle数据库部署_第17张图片
.Oracle数据库部署_第18张图片

.

使用sqlplus命令行访问oracle数据库

在命令行界面中输入:sqlplus sys/pwd123 AS SYSDBA
sqlplus sys/123456 as sysdba
sqlplus /nolog
SQL> conn sys/123456 as sysdba
SQL> show user;
执行HELP INDEX命令查看所有可以使用的命令
SQL> help index
执行SHOW USER可以查看当前登录的用户
SQL> show user;

.
.

配置oracle和OEM随机启动

完成oracle11g数据库的安装后,相关服务器会自动启用,但并不表示下次开机后oracle服务器仍然可用。下面将介绍oracle的基本服务组件,以及如何编写服务脚本来控制oracle数据库系统的自动运行。

根据上面的安装过程,oracle11g的数据库软件将安装在变量ORACLE_HOME所北定的位置。例如/opt/oracle/product/11.2.0/dbhome_1/,而各种服务器组件程序(也包括sqlplus命令)正是位于其中的bin子目录下。
Oracle11g数据库的基本服务组件如下所述:(注:oracle服务组件最好以oracle用户身份运行如:su - oracle)

lsnrctl:监听器程序,用来提供数据库访问,默认监听TCP 1521端口。
dbstart、dbshut:数据库控制程序,用来启动、停止数据库实例。

emctl:管理器控制工具,用来控制OEM平台的开启与关闭,OEM平台通过1158端口提供HTTPS访问,5520端口提供TCP访问。
为了方便执行oracle11g的服务组件程序,建议对所有用户的环境配置作进一步的优化调整、补充PATH路径、oracle终端类型等变量设置。除此以外,还应该修改/etc/oratab配置文件,以便运行dbstart时自动启用数据库实例。
.
修改/etc/oratab,修改内容如下:

[root@oracle Desktop]# vim /etc/oratab
orcl:/opt/oracle/product/11.2.0/dbhome_1:Y(N改为Y)

修改/etc/rc.local文件,在文件末尾增加如下:

[root@oracle Desktop]# /etc/rc.local

su - oracle -c 'dbstart'
su - oracle -c 'lsnrctl start'

.
.
常见系统控制命令
1、执行”lsnrctl start”命令可以启动oracle监听器。
2、执行”lsnrctl status”命令可以查看oracle监听器的状态。
3、执行”emctl stop dbconsole”命令可以关闭OEM管理控制台。
4、执行”dbshut $ORACLE_HOME”命令可以停止数据库实例。
5、执行”dbstart $ORACLE_HOME”命令可以启动数据库实例。
6、使用sqlplus命令工具时,若以超级管理员sys登录,则在”SQL>”环境中执行”STARTUP;”、”SHUTDOWN IMMEDIATE;”指令也可以启用、关闭默认的数据库实例。

.

配置oracle命令行可以翻页和清屏
1、下载3个包:
1)IO-Tty-1.07.tar.gz
2)Term-ReadLine-Gnu-1.16.tar.gz
3)uniread-1.01.tar.gz
.

[root@oracle Desktop]# umount /dev/cdrom /media/

[root@oracle Desktop]# mount /dev/cdrom /media/

[root@oracle Desktop]# cd /media/

[root@oracle Desktop]# ls

[root@oracle Desktop]# tar zxf IO-Tty-1.12.tar.gz -C /usr/src/

[root@oracle Desktop]# tar zxf Term-ReadLine-Gnu-1.26.tar.gz -C /usr/src/

[root@oracle Desktop]# tar zxf uniread-1.01.tar.gz -C /usr/src/

.

安装第一个包

[root@oracle Desktop]# cd /usr/src/IO-Tty-1.12/

[root@oracle Desktop]# perl Makefile.PL

[root@oracle Desktop]# make

[root@oracle Desktop]# make install

.

注意:因为部分系统安装没安装readline-devel安装包需要挂载光盘安装一下
.

[root@oracle Desktop]# cd /

[root@oracle Desktop]# umount /dev/cdrom /media/

[root@oracle Desktop]# mount /dev/cdrom /media/

[root@oracle Desktop]# yum -y install readline-devel

.
安装第二个包

[root@oracle Desktop]# umount /dev/cdrom /media/

[root@oracle Desktop]# mount /dev/cdrom /media/

[root@oracle Desktop]# cd /usr/src/Term-ReadLine-Gnu-1.26/

[root@oracle Desktop]# perl Makefile.PL

[root@oracle Desktop]# make

[root@oracle Desktop]# make install

.

安装第三个包

[root@oracle Desktop]# cd ../uniread-1.01/

[root@oracle Desktop]# perl Makefile.PL

[root@oracle Desktop]# make

[root@oracle Desktop]# make install
.
登录oracle:在命令前加 uniread

原来登录是: sqlplus sys/123456 AS SYSDBA
现在是: uniread sqlplus sys/123456 AS SYSDBA
[root@oracle Desktop]# uniread sqlplus sys/123456 as sysdba

.

创建数据库
如果在安装oracle产品时选择不建立数据库,那么要使用oracle系统就必须先创建数据库,如果在安装oracle产品时选择建立数据库,也可以再创建第二个数据库。
创建数据库有两种方法:一种通过图形界面;另一种采用create database命令,下面介绍图形界面的方法。
在linux中,运行数据库配置助手(DBCA),执行$ORACLE_HOME/bin目录下执行DBCA
.
执行netca启用监听的方法(如果没有启用需要做这一步)(为了使客户端能连接到oracle实例,以及有些命令也需要启用监听)

Oracle数据库部署_第19张图片
.
Oracle数据库部署_第20张图片
.
Oracle数据库部署_第21张图片
.
Oracle数据库部署_第22张图片
.
Oracle数据库部署_第23张图片
.
Oracle数据库部署_第24张图片
.
Oracle数据库部署_第25张图片
.
Oracle数据库部署_第26张图片
.
Oracle数据库部署_第27张图片
.
Oracle数据库部署_第28张图片
.
Oracle数据库部署_第29张图片
.
Oracle数据库部署_第30张图片
.
Oracle数据库部署_第31张图片
.
Oracle数据库部署_第32张图片
.
Oracle数据库部署_第33张图片
.
Oracle数据库部署_第34张图片
.

.
.

启动关闭数据库
1、数据库的启动
启动(startup)一个数据库需要3个步骤
1)启动oracle实例
2)由实例安装数据库
3)打开数据库
在startup命令中,可以通过不同的选项来控制数据库的不同的启动步骤。

.
NOMOUNT选项:
nomount:已经通过参数文件知道控制文件在哪个位置,但是还没有读取控制文件。主要的作用就是启动一个实例,读取init.ora初始化参数文件,启动后台进程,初始化全局SGA
MOUNT选项:
读取了控制文件,通过控制文件知道了其他文件(数据文件和日志文件),此时并没有读取数据文件和日志文件,这个状态叫mount状态。启动实例并且安装了数据库,但没有打开数据库。这种打开方式常在数据库维护操作中使用,例如对数据文件更名,改变重做日志及打开归档方式等,在这种打开方式下,除了可以看到SGA 系统列表以外,系统还会给出“数据库装载完毕”提示。
.
Open选项:
读取完控制文件之后,找到了数据文件和日志文件,数据库就处于OPEN状态了。
startupnomount|mount|open
shudownnormal|immedieate|transactional|abort
.
注意:如果仅仅执行startup命令,将会完成启动实例,安装实例和打开数据库的所有3个步骤,这是系统出了可以看到前面startup mount方式下所有提示外,还会给出一个“数据库已经打开”的提示,此时,数据库系统处于正常的工作状态,可以接收用户请求。
.
如果使用startup nomount 命令或者startup mount命令,必须采用alter database命令执行打开数据库操作,例如:如果以startup nomount方式打开数据库,也就是说实例已经启动,但是数据库没有安装和打开,这是必须运行下面的两条命令,数据库才能正确启动。
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
.
如果以startup mount方式启动数据库,只需要运行下面一条命令即可打开数据库
ALTER DATABASE OPEN
.
执行startup命令
.

SQL> startup
SQL> select status from v$INSTANCE;

.
Oracle数据库部署_第35张图片
.
关闭数据库
Oracle数据库部署_第36张图片

开启startup nomount 状态
Oracle数据库部署_第37张图片

可以看出现在处于STATTED状态

Oracle数据库部署_第38张图片

修改数据库到open状态
SQL> ALTER DATABASE MOUNYT;
SQL> ALTER DATABASE OPEN;
SQL> select status from v$instance;

.

数据库的关闭
normal:这是默认选项,使用该选项时,不允许任何新的用户连接,但是允许继续当前的所有连接,只有所有用户(自愿的)退出登录时,数据库才能真正的关闭
通常,正常的数据库关闭是没有意义的,即使只剩下database control在运行,也总是存在未退出登录的用户。也许关闭一个数据库需要几天或更长的事件(如果用户一直没有自己关闭)
immediate:使用这个选项时,不允许任何新的用户连接,当前的所有连接的会话都被终止。任何活动的事务都会都将回滚,随后数据库会被关闭。是一种常用的关闭数据库方式,快速关闭数据库。
transactional:使用这个选项时,不允许任何新的用户连接,没有存在于某个事务中的现有会话被终止,允许当前位于某个事务中的会话在完成该事务之后终止。一但所有会话终止,数据就会被关闭(使用shutdown immediate)
abort:就oracle而言,使用这个选项相当于断电。实例被立即终止。此时,任何数据都不会被写入磁盘。但是在下一次启动数据库的时候,速度比较慢(需要实例恢复)。建议在以下情况使用这种方式。
1)数据库一直处于非正常的工作状态,不能用shutdown normal或者shutdown immediate命令关闭。
2)需要立即关闭数据库
3)在启动数据库实例时遇到问题
.
SQL> SHUTDOWN NORMAL
SQL> STARTUP

.
.

使用Navicat for Oracle工具远程图形化管理oracle
在win7宿主机上安装软件Navicat for Oracle。

Oracle数据库部署_第39张图片

新建连接
注意:配置完需关闭下重新开启才可以测试成功

.

.

.

.

Sql语句以及基本操作

使用scott用户连接数据库服务器
如果锁定了scott,则需要解锁

SQL> slter user hr account unlock;

SQL> select username,account_status from dba_users where username='HR';

修改密码并且登陆

SQL> alter user scott identified byy pwd12345;

SQL> conn scott/pwd12345;

SQL> select table_name from tabs;

查看表结构

Desc profucts

设置自动提交事务

set autocommit on