Oracle


ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。

特点:

1)数据的大量性
2)数据的保存的持久性
3)数据的共享性
4)数据的可靠性
2、完备关系的产品:
1)信息准则---关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示;
2)保证访问的准则
3)视图更新准则---只要形成视图的表中的数据变化了,相应的视图中的数据同时变化
4)数据物理性和逻辑性独立准则
3、分布式处理功能:
ORACLE数据库自第5版起就提供了分布式处理能力,到第7版就有比较完善的分布式数据库功能了,一个ORACLE分布式数据库由oraclerdbms、sql*Net、SQL*CONNECT和其他非ORACLE的关系型产品构成。
4、用ORACLE能轻松的实现数据仓库的操作。
这是一个技术发展的趋势,不在这里讨论。
■ 可用性强
■ 可扩展性强
■ 数据安全性强
■ 稳定性强

Oracle的安装要求及部署

本文是在RHEL6.0x64系统上安装oracle11g


部署Oracle数据库_数据库系统

物理内存应不少于1GB,对于VMWARE虚拟机建议不少于1200MB.对于系统中的交换分区设置,应参以下约定:物理内存为1GB~2GB时,交换分区为物理内存的1.5~2倍;物理内存为2GB~16GB时,交换分区与物理内存大小相同;物理内存超过16GB时,交换分区使用16GB就可以了。


部署Oracle数据库_数据库系统_02

对于32位的oracle11g数据库,若程序文件和数据文件安装在同一个分区,则该分区的硬盘空间要求分别为:企业版5.65GB、标准版5.38GB;除此以外,还应确保/tmp目录所在分区的空间不少于1GB,总的来说,建议为oracle11g准备至少8GB的硬盘空间。


安装oracle11g推荐步骤:


一、使用rhel6系统盘yum


1)确认光盘挂载点目录,如/mnt


2)挂载rhel6光盘到指定目录,如/mnt


#mount /dev/cdrom /mnt


3)进入yum.repos.d文件夹,


#cd /etc/yum.repos.d/


4)新建使用rhel6光盘为源的repo文件


# vim yum.repo //内容如下:


部署Oracle数据库_数据库管理_03

5)清空原有yum信息


#yum clean all


6)更新yum


#yum update


二、安装依赖软件包:配置好yum源后使用root用户安装oracle所依赖的软件包,这些依赖包必须要安装,因为版本不同,在oracle安装时会提示缺少依赖包,忽略后可以正常安装使用Oracle


部署Oracle数据库_关系数据库_04

经实际安装测试,当在RHEL6X32系统中安装oracle11g时,对ksh软件包的识别会存在兼容性冲突,只要卸载RHEL6X32中的ksh软件包,改用RHEL5.5光盘中的pdksh软件包,就可以避免这个问题。


#rpm -e ksh


#rpm –ivh pdksh-5……


三、修改内核参数并使修改生效


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


#vim /etc/sysctl.conf //在文件尾部添加如下内容:


部署Oracle数据库_Oracle_05

执行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创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。


官方建议值:


32linux系统:可取最大值为4GB4294967296bytes-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295


64linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,例如,如果为12GB物理内存,可取12*1024*1024*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数据库_关系数据库_06

检查结果

部署Oracle数据库_关系数据库_07

五、oracle用户设置Shell限制为了优化性能,需要添加oracle用户限制参数。进程会话限制可以采用pam_limits认证模块来实现,通过修改登录程序loginPAM设置以启用该认证。


修改/etc/security/limits.conf将用户oracle能够打开的进程数、进程使用的文件数加在。加入如下内容:


部署Oracle数据库_Oracle_08

注:


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


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


部署Oracle数据库_数据库系统_09

六、新建安装目录:


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

部署Oracle数据库_Oracle_10


oracle用户的宿主目录的.bash_profile文件中添加下图所示显示的内容:


部署Oracle数据库_关系数据库_11

注:


1行:文件权限掩码


2行:定义基本目录


3行:定义数据库实例名称


4行:告知默认的显示终端号


5行:确定使用何种语言环境


建立基本目录:


部署Oracle数据库_关系数据库_12

RHEL6中安装oracle11g时,中文安装界面乱码,解决方法:


在Linux命令提示符下执行以下命令,把字体库安装到相应位置即可


#mkdir -p /usr/share/fonts/zh_CN/TrueType


#cp zysong.ttf /usr/share/fonts/zh_CN/TrueType/


chmod o+r /usr/share/fonts/zh_CN/TrueType/ zysong.ttf


注:zysong.ttf 可在百度下载。RHEL 6.1也有效。


这样在安装的时候。Oracle就会提示中文了,而不再是中文乱码了


七、解压oracle11g压缩包:分别下载oracle11g1of22of2这两个zip压缩包,解压后可获得database文件夹、oracle的安装脚本、产品手册等文档都位于此文件夹中。


注:以事先将下载的oracle11g两个压缩包拷贝到/usr/src目录中。


部署Oracle数据库_数据库系统_13

部署Oracle数据库_数据库系统_14

部署Oracle数据库_Oracle_15

八、安装oracle11g


所有配置条件都准备好以后,就可以正式开始安装了。以用户oracle用户登录RHEL6的图形桌面环境,启动database/目录下的runInstaller脚本文件。


修改/etc/hosts文件


#vim/etc/hosts //添加如下内容:


192.168.5.2 server2.benet.com //server2.benet.com是oracle数据库服务器的主机名。


注意将主机名对应到真实ip地址,否则oracle有可能将监听程序仅仅建立在127.0.0.1

上。

部署Oracle数据库_数据库管理_16

运行runInstaller脚本启动安装程序:


部署Oracle数据库_Oracle_17

针对/tmp目录、交换分区、显示器的基本检测通过以后,将会打开图形化的oracle安装序,如下图所示,下面将依次讲解oracle11g的主要安装步骤。


1)配置安全更新:如果已购买oracle11g数据库的授权,且服务器能连接INTERNET,建议正确填写电子邮件地址和oracle support口令,以便及时接收官方的安全更新通知。实验过程中建议将电子邮件地址留空,并消取对“我希望通过my oracle……”复选框的选择。


部署Oracle数据库_数据库管理_18

2)安装选项:全新安装建议选择“创建和配置数据库”或者“仅安装数据库软件”,后者将不会创建并配置数据库实例,只有对旧版本的oracle数据库进行升级时,才选择“升级现有数据库”。


部署Oracle数据库_数据库系统_19

3)系统类:选择“服务器类”进行安装,以便适用于企业环境的数据库系统。“桌面类”一般只建议个人用户使用,包含的配置和功能比较少。


部署Oracle数据库_数据库管理_20

4)网格选项:选择“单实例数据库安装”,大多数应用场合中oracle数据库的用途比较单一,每台oracle服务器只需要一个实例就可以了。

部署Oracle数据库_数据库管理_21

5)安装类型:选择“典型安装”,采用oracle11g的基本配置进行完全安装。若要为各种管理账户分别设置口令,或者选择语言版本、设置自动备份、存储管理等,则应该选择“高级安装”。


部署Oracle数据库_Oracle_22

6)典型安装配置:在“典型安装”步骤中,可以指定oracle11g的基本目录、软件安装目录、数据库存放目录,并选择要安装的数据库版本、指定全局数据库名称、设置管理口令,如下图所示:


部署Oracle数据库_数据库系统_23

必须设置管理口令,其他参数可采用默认值。Oracle11g数据库自动建有三个用户:超级管理员sys、system和数据库所有者sysman,当选择“高级安装”时可以为三个用户分别设置口令,否则将使用同一个管理口令。


7)创建产品清单:将清单目录修改为:/opt/oracle/oraInventory,以便oracle用户有权限写入oracle数据库的清单信息。


部署Oracle数据库_数据库系统_24

8)先决条件检查及概要:针对各种前置条件进行检查,发现有未满足的条件后会给出提示,应根据检查结果进行修复或者安装必需的软件包。预安装检查,错误可忽略(软件版本问题,但必须确认软件包已安装)


部署Oracle数据库_数据库系统_25

如果所有条件都已满足,则会看到本次安装的概要信息,确定无误后单击“完成”按钮却完成设置,然后开始复制文件及部署数据库的安装过程。


部署Oracle数据库_关系数据库_26

9)完成安装:文件复制及相关部署结束后,会弹出“执行配置脚本”对话框,如图所示,根据提示切换为root用户并依次执行/opt/oracle/oraInventory/orainstRoot.sh、/opt/oracle/product/11.2.0/dbhome_1/root.sh脚本。


部署Oracle数据库_Oracle_27

按照上图中的要求执行脚本,执行过程如下图所示:注:要先切换成root用户。


部署Oracle数据库_Oracle_28

最后单击“确定”按钮,会提示方问https://dbserver:1158/em/,表示使用此URL地址可以访问OEM(oracle enterprise manager,oracle企业管理器)平台,以便对oracle11g的数据库实例进行管理。


10)验证安装结果:使用浏览器访问OEM管理平台,以用户名sys、连接身份“SYSDBA”进行登录,密码为安装时指定的管理口令。登录成功后可以看到OEM管理控制台,如图所示,若显示数据库状态正常、无明显错误,则表示oracle11g安装成功。


部署Oracle数据库_数据库管理_29

部署Oracle数据库_数据库管理_30

11)oracleoem随机启动


完成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时自动启用数据库实例。


1、修改/etc/oratab,修改内容如下:


#vim /etc/oratab


orcl:/opt/oracle/product/11.2.0/dbhome_1:Y(N改为Y)


2、修改/etc/profile,添加如下内容:


部署Oracle数据库_关系数据库_31

这样一来,用户oracle就可以直接使用上述组件了。例如:执行lsnrctl start命令可以启动oracle监听器,执行lsnrctl status命令可以查看oracle监听器的状态,执行emctl stop dbconsole命令可以关闭OEM管理控制台,执行dbshut $ORACLE_HOME命令可以停止数据库实例, 执行dbstart $ORACLE_HOME命令可以启动数据库实例

附:使用sqlplus命令工具时,若以超级管理员sys登录,则在SQL>环境中执行STARTUP;SHUTDOWN IMMEDIATE;指令也可以启用、关闭默认的数据库实例。


3、建立oracle服务的启动脚本:


虽然通过各种服务组件程序能够启动、停止整个oracle11g数据库系统,但显然还不够方便,在RHEL6服务器中,更好的做法是将相关操作编写为服务脚本,交给chkconfig工具来管理,从而实现随系统开、关机自动启动、停止oracle数据库。


#vi /etc/init.d/oracle //内容如下:


部署Oracle数据库_关系数据库_32

在oracle脚本文件中,数据库的启动、停止操作均通过“su oracle c 命令行”形式来执行,这是为了获得oracle用户的登录环境,且因为由root切换为普通用户无需验证密码,从而省去了交互式登录的过程,便于脚本的后台执行。


4、给脚本设置权限并添加为系统服务


部署Oracle数据库_数据库管理_33

部署Oracle数据库_关系数据库_34

添加好oracle服务后,就可以通过脚本的start、stop、status、restart参数来控制oracle数据库的启动、停止、查看状态、重启了。


至此在rhel6系统中有关oracle 11g的安装和安装后的启动设置就完毕了。


2、下面介绍有关oracle数据库的基本应用


使用sqlplus命令可以在命令行界面中访问oracle数据库,其用途类似于mysql的客户端程序mysql。例如,以下操作将以超级管理员sys,SYSDBA的身份连接到本机的oracle11g数据库,根据提示需验证管理口令(也可以改用“用户名/密码”的形式直接写在命令行中)。


部署Oracle数据库_数据库系统_35

进入到SQL>环境以后,可以执行各种SQL操作语句来对oracle数据库时行管理,例如:执行help index语句可以查看SQL Plus所支持的指令列表,执行show user“可以查看当前登录的用户名称。


Oracle 服务器:是一个数据库管理系统,它提供开放、全面、集成的方法进行信息管理Oracle 实例和Oracle 数据库文件组成oracle实例是由内存和多个后台进程组成一个实例只能对应一个数据库


oracle存储结构


物理存储结构:


1、 数据文件:包含数据库中的实际数据,是数据库操作中数据的最终存储位置,扩展名为dbf


Oracle数据库的数据文件包含该数据库的全部数据,每个Oracle数据库拥有一个或多个数据文件,但一个数据文件只能属于一个数据库,也只能属于一个表空间。


2、 控制文件:包含维护数据库和验证数据库完整性的信息


控制文件用于记录Oracle数据库的物理结构和数据库中所有文件的控制文件,包括Oracle数据库的名称与建立时间、数据文件与重做日志文件的名称及所在位置、日志记录序列码等。


3、 重做日志文件:包含数据库发生变化的记录,用于恢复数据


Oracle数据库记录了所有的数据库事务,包括用户对数据库所做的任何改变,这些事务保存在联机重做日志文件中。当数据库中的数据遭到破坏时,可以使用这些重做日志来恢复数据库。一个Oracle数据库拥有至少两个重做日志文件


逻辑存储结构:


Oracle逻辑上由表空间、段、区、块组成


表空间的概念:


n ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构。一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件但一个数据文件只能属于一个表空间。数据库表等对象是存放在表空间中的。


n 表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引等。


n 表是存放数据的数据库对象,它是一种二维表格结构。Oracle数据库中的表分为系统表和用户表,系统表存储数据字典,用户表存储用户的数据


表空间的作用能帮助DBA用户完成以下工作:


1.决定数据库实体的空间分配;


2.设置数据库用户的空间份额;


3.控制数据库部分数据的可用性;


4.分布数据于不同的设备之间以改善性能;


5.备份和恢复数据。


表空间的类型:


1)系统表空间:


n System表空间:用于存储sys用户的表、视图以及存储过程的数据库对象


n Temp表空间


n Users表空间:存储数据库用户创建的数据库对象


2)用户自己创建表空间


段(Segment)概念


表空间划分为不同区域,以存放不同的数据,这些区域称为“段”。


数据段:每个表拥有一个数据段,用来存放所有数据。


索引段:每个索引拥有一个索引段,用来存储索引数据。


回滚段:用于临时存储可能会被撤销的信息,在数据库恢复时回滚未提交的事务。


临时段:临时段是当PL/SQL语句需要临时工作区时由Oracle数据库创建的,PL/SQL语句执行完毕后,临时段的区间由Oracle系统收回。


分区(Extent)概念


分区是在数据库存储空间中分配的一个逻辑单元,由多个分区组成一个段。当段中已有空间用完时,该段就获取另外的分区。


数据块(Data Block)概念


数据块是Oracle数据库中数据文件的最小存储空间单位,Oracle 11g数据库常用的数据块大小可以是2KB4KB


案例1:使用OEM创建表空间,名为sales


使用浏览器访问OEM管理平台


部署Oracle数据库_Oracle_36

单击“服务器”标签中的“表空间”

部署Oracle数据库_数据库系统_37

在“对象类型”中选择表空间,单击“创建”按钮,本例是sales部门创建一个表空间,包含数据文件sales.Dbf


部署Oracle数据库_Oracle_38

在“名称”处填写表空间名称,如sales


部署Oracle数据库_数据库系统_39

单击“添加”按钮并在打开的界面中输入文件名、文件目录、文件大小等相关信息后单“继续”按钮,如下图所示:


部署Oracle数据库_数据库管理_40

下图就是创建的sales表空间,单击“确定”按钮使新建的表空间生效。


部署Oracle数据库_数据库管理_41

确定后的表空间信息如下图所示

部署Oracle数据库_关系数据库_42

附注:也可以使用sql语句创建表空间


先使用sqlplus命令连接到oracle服务器


部署Oracle数据库_Oracle_43

注:


Create tablespace 表空间名


Datafile 数据文件的位置/名称.dbf size 大小(K/M/G)


[autoextend [on/off]] NEXT size -----自动增长,next size每次增长多少


[maxsize size] -----最大增长到


案例2:使用OEM创建表,名为orderdetail


创建表前最好创建一个表空间,否则,创建的表将放在默认表空间system中,这样会增加系统的负担


单击“方案”标签中的“表”链接。


部署Oracle数据库_数据库管理_44

在“对象类型”中选择表,单击“创建”按钮,


部署Oracle数据库_Oracle_45

进入“创建表:表组织”页面中单击“继续”按钮,如下图:


部署Oracle数据库_关系数据库_46

在“创建表”页面中输入要新建的表名及所在表空间和字段名等信息,下图所示:

部署Oracle数据库_关系数据库_47

最后单击“确定”完成表的创建。


使用命令创建表


部署Oracle数据库_Oracle_48

注:


Create table tablename


(列名类型


列名类型


………….


Tablespace 表空间名;


向表中插入数据


部署Oracle数据库_Oracle_49

案例3oracle数据库的备份与恢复


关于oracle 11g数据库的SQL优化、数据库等技术将不再做讨论,但从数据库安全及运维的角度业看,对oracle数据库服务的控制、数据库的基本备份操作却是linux管理员必须掌握的。


Oracle 11g提供了两个命令工具expdpimpdp,前者用来对数据库进行逻辑备份,后者用来执行恢复操作。导出、导入操作可以在不同的oracle 11g服务器中执行,从而便于实现数据的迁移。


1) 配置备份目录


在使用expdp备份工具之前,需要预先创建备份目录,并为指定的用户赋予读写权限,例如:以下操作可以将/opt/mydbbackup作为expdp的备份目录,允许数据库用户oracle写入备份文件。


部署Oracle数据库_数据库系统_50

指定备份目录位置:


创建逻辑目录,该命令不会在操作系统创建真正的目录,所以要事先执行mkdir创建存放备份的物理目录(如/opt/mydbbackup目录)。


查看创建的逻辑目录。如下图所示:


部署Oracle数据库_关系数据库_51

注意事项:


我这里是使用sys用户来进行操作的。如果是其他用户,那么就需要对这个用户进行赋权


部署Oracle数据库_数据库管理_52

system用户赋予在指定目录的操作权限


创建测试数据:我们练习expdp/impdp的一些功能,所以需要创建表空间,并且创建一些测试的数据。 SQL 代码如下:


部署Oracle数据库_数据库管理_53

开始测试:


1) 备份(导出)数据


执行备份操作时,需指定备份操作用户(如system),然后结合directory参数指定oracle管理的备份位置,结合dumpfile参数指定备份文件名称。参数FULL:表示导入或者导出整个数据库默认为NFULL={Y | N},为Y,标识执行整个数据库导出;LOGFILE参数指定导出日志文件的名称,默认名称为export.log


system表示执行备份操作的用户,oracle11g表示system用户的口令。

例如:以下操作使用用户system将整个数据库导出为full.dmp文件,保存到/opt/mydbbackup目录。

部署Oracle数据库_数据库系统_54

查看备份后的文件,如下图所示:

部署Oracle数据库_关系数据库_55

1) 恢复(导入)数据

为了测试impdp恢复数据,在执行impdp命令前先删除表中数据,sql语句如下图所示:

部署Oracle数据库_关系数据库_56

执行恢复操作时,同样需要指定操作用户(如system),然后结合directory参数指定oracle管理的备份位置,结合dumpfile参数指定备份文件。


1:以下操作将从备份文件full.dmp中读取数据,恢复指定的表。


部署Oracle数据库_Oracle_57

验证:


部署Oracle数据库_关系数据库_58

2:以下操作将从备份文件full.dmp中读取数据,恢复指定的表空间(如benet表空间)。


部署Oracle数据库_关系数据库_59

验证(略)参考例1验证方法。


3:以下操作将从备份文件full.dmp中读取数据,执行全库导入。


部署Oracle数据库_数据库管理_60