Oracle11gR2安装
1.1安装前准备:
本文是在RHEL6.0x64系统上安装oracle11g
物理内存应不少于1GB,对于VMWARE虚拟机建议不少于1200MB.对于系统中的交换分区设置,应参以下约定:物理内存为1GB~2GB时,交换分区为物理内存的1.5~2倍;物理内存为2GB~16GB时,交换分区与物理内存大小相同;物理内存超过16GB时,交换分区使用16GB就可以了。
对于32位的oracle11g数据库,若程序文件和数据文件安装在同一个分区,则该分区的硬盘空间要求分别为:企业版5.65GB、标准版5.38GB;除此以外,还应确保/tmp目录所在分区的空间不少于1GB,总的来说,建议为oracle11g准备至少8GB的硬盘空间
为oracle用户设置Shell限制:为了优化性能,需要添加oracle用户的限制参数。进程会话限制可以采用pam_limits认证模块来实现,通过修改登录程序login的PAM设置以启用该认证。
修改/etc/security/limits.conf,将用户oracle能够打开的进程数、进程使用的文件数加在。加入如下内容:
注:
第1行是设置进程数软限制;第2行是设置进程数硬限制;第3行是设置文件数软限制;第4行是设置文件数硬限制
/etc/pam.d/login,加入如下内容:
1.在安装oracle时,假设使用名为oracle用户安装oracle数据库,必须以oracle用户登录一次Linux系统。
将pdksh-5.2.14-37.el5_8.1.x86_64.rpm,rlwrap-0.37.tar,install.sh,zysong以及oracle的安装文件拷贝到oracle用户的家目录下。
2.安装oracle时,一定要保证主机名出现在/etc/hosts中。
[root@orclsrv~]#vi/etc/sysconfig/network
[root@orclsrv~]#vi/etc/hosts
重新启动系统
4.配置YUM
[root@orclsrv~]#vim/etc/yum.repos.d/rhel.repo
[oracle]
name=oracle
baseurl=file:///mnt/Server
enabled=1
gpgcheck=0
挂在光盘到/mnt
[root@orclsrv~]#mount/dev/cdrom/mnt
mount:blockdevice/dev/sr0iswrite-protected,mountingread-only
关闭防火墙
[root@orclsrv~]#serviceiptablessave
iptables:Savingfirewallrulesto/etc/sysconfig/iptables:[OK]
4.创建/u01目录
[root@orclsrv~]#mkdir/u01
5.将oracle11g的安装文件拷贝到/u01中
[root@orclsrvoracle]#mvlinux.x64_11gR2_database_*/u01/
6.解压安装包
[root@orclsrvu01]#unziplinux.x64_11gR2_database_1of2.zip&&unziplinux.x64_11gR2_database_2of2.zip
[root@orclsrvu01]#rm-rflinux.x64_11gR2_database_*
8.使用oracle用户安装oracle11gR2
9.以oracle用户安装oracle,修改/u01目录的属主和属组为oracle用户
[root@orclsrvu01]#ls-ld/u01/
drwxr-xr-x3rootroot4096Aug1209:56/u01/
[root@orclsrvoracle]#chown-Roracle:oracle/u01/
[root@orclsrvu01]#ls-ld/u01/
drwxr-xr-x3oracleoracle4096Aug1209:56/u01/
1.2开始安装oracle11gR2
使用oracle用户身份运行/u01/database/runinstaller
[oracle@orclsrvu01]$ls
database
[oracle@orclsrvu01]$cddatabase/
[oracle@orclsrvdatabase]$ls
docinstallresponserpmrunInstalleRSShsetupstagewelcome.html
[oracle@orclsrvdatabase]$./runInstaller
发现oracle安装界面上的文字都是方块字。
出现这种情况的原因是:oracle所使用的字体在我们当前的操作系统里不存在的原因。
解决办法:
首先创建一个目录
mkdir�Cp/usr/share/fonts/zh_CN/TrueType
将字体文件拷贝到上面创建的目录中
[root@orclsrvoracle]#cpzysong.ttf/usr/share/fonts/zh_CN/TrueType/
[root@orclsrvoracle]#chmodo+r/usr/share/fonts/zh_CN/TrueType/zysong.ttf
[oracle@orclsrvdatabase]$./runInstaller
安装oracle软件的同时创建数据库
exportORACLE_BASE="/u01/app/oracle"
exportORACLE_HOME="/u01/app/oracle/product/11.2.0/dbhome_1"
exportPATH=$PATH:$ORACLE_HOME/bin
exportORACLE_SID=orcl
exportNLS_LANG="SIMPLIFIEDCHINESE_CHINA.UTF8"
exporPATH
ORACLE基目录:符合OFA的oracle目录结构的根,适用于计算机上的所有oracle软件产品。这个环境变量制定计算机上所有的oracle产品的目录,例如/u01/app/oracle….
软件位置:<ORACLE_HOME>:当前oracle安装软件的主目录,通常这个环境变量的指定有ORACLE_BASE指示的路径下的一个目录,如/u01/app/oracle/product/
10.设置环境变量:为了使oracle在安装完成后能够正常工作,还需要为oracle用户配置一些列的环境变量。在Windows环境下,安装oracle软件时创建的注册表条目会自动完成环境变量的设置,但是在unix和Linux环境中,我们需要人工配置这些环境变量。
以下是oracle清单目录的位置以及用户名,我们使用oracle用户即可。
oracle安装之前需要修改很多内核参数,oracle越来越人性化,只需在界面上点击“修补并在次检查”
以root用户身份运行脚本
[root@orclsrvu01]#/tmp/CVU_11.2.0.1.0_oracle/runfixup.sh
Responsefilebeingusedis:/tmp/CVU_11.2.0.1.0_oracle/fixup.response
Enablefilebeingusedis:/tmp/CVU_11.2.0.1.0_oracle/fixup.enable
Logfilelocation:/tmp/CVU_11.2.0.1.0_oracle/orarun.log
SettingKernelParameters...
kernel.sem=25032000100128
fs.file-max=6815744
net.ipv4.ip_local_port_range=900065500
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_max=1048576
fs.aio-max-nr=1048576
uid=500(oracle)gid=500(oracle)groups=500(oracle)
[root@orclsrvu01]#
yum安装依赖的软件包
[root@orclsrvu01]#yum-yinstalllibaioglibccompat-libstdc*elfutils-libelf-devel\*gcc-c++libaio-develunixODBC\*readline\*
[root@orclsrvu01]#cd~oracle/
[root@orclsrvoracle]#rpm-ivhpdksh-5.2.14-37.el5_8.1.x86_64.rpm
warning:pdksh-5.2.14-37.el5_8.1.x86_64.rpm:HeaderV3DSA/SHA1Signature,keyIDe8562897:NOKEY
Preparing...###########################################[100%]
1:pdksh###########################################[100%]
点击重新检查,如下图所示,点击“全部忽略”,在点击“下一步”,这些包是32位的包所以可以忽略。
在创建数据库时,会弹出两次小窗口,点击忽略即可。
口令管理为sys,system用户设置管理口令,启用scott用户,设置管理口令
启用scott用户,该用户默认是锁定状态,不锁定scott用户
提示以root用户运行前面指定的oracle详细目录中的一个脚本orainstRoot.sh。在服务器上首次安装任何oracle产品时,都需要运行该脚本,运行这个脚本会创建名为oraINST.loc的详细目录清单文件,从而能够创建其他目录,为文件设置正确的所属关系和权限。
[root@orclsrv~]#/u01/app/oraInventory/orainstRoot.sh
更改权限/u01/app/oraInventory.
添加组的读取和写入权限。
删除全局的读取,写入和执行权限。
更改组名/u01/app/oraInventory到oracle.
脚本的执行已完成。
[root@orclsrv~]#/u01/app/oracle/product/11.2.0/dbhome_1/root.sh
RunningOracle11groot.shscript...
Thefollowingenvironmentvariablesaresetas:
ORACLE_OWNER=oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
Enterthefullpathnameofthelocalbindirectory:[/usr/local/bin]:
Copyingdbhometo/usr/local/bin...
Copyingoraenvto/usr/local/bin...
Copyingcoraenvto/usr/local/bin...
Creating/etc/oratabfile...
Entrieswillbeaddedtothe/etc/oratabfileasneededby
DatabaseConfigurationAssistantwhenadatabaseiscreated
Finishedrunninggenericpartofroot.shscript.
Nowproduct-specificrootactionswillbeperformed.
Finishedproduct-specificrootactions.
1.3使用脚本检查oracle安装先决条件
install.sh脚本为配置oracle用户的环境变量,安装oracle需要安装的依赖包,改变oracle语言环境,运行脚本之前需要配置IP地址,主机名,yum仓库,
[oracle@orclsrv~]$catinstall.sh
使用root用户运行install.sh脚本
运行完脚本查看oracle用户的.bash_profile
执行source.bash_profile
将oracle的安装包拷贝到/u01目录下
解压oracle软件包
使用oracle用户安装oracle
后面的部分和上节内容一致,请参考。
测试安装完的oracle
oracle安装知识点:
设置环境变量:为了使oracle在安装完成后能够正常工作,还需要为oracle用户配置一些列的环境变量。在Windows环境下,安装oracle软件时创建的注册表条目会自动完成环境变量的设置,但是在unix和Linux环境中,我们需要人工配置这些环境变量。
ORACLE_BASE:符合OFA的oracle目录结构的根,适用于计算机上的所有oracle软件产品。这个环境变量制定计算机上所有的oracle产品的目录,例如/u01/app/oracle….
ORACLE_HOME:当前oracle安装软件的主目录,通常这个环境变量的指定有ORACLE_BASE指示的路径下的一个目录,如/u01/app/oracle/product/
ORACLE_SID:将要连接或创建的oracle实例的标识符。该环境变量在大多数环境下必须为8个或8个以下的字符,这些字符以字母开头,并且可以包含字母和数字。在实际应用群集环境下这个环境变量必须为5个或少于5个字符。虽然ORACLE_SID总是被设置为本地连接到的一个实例,默认的实例名为ORCL
NLS_LANG:这个环境变量指定用于oracle安装的全局设置,采用的格式为language_territory.character_set。在除了Windows之外的环境中,NLS_LANG的默认值都为“American_AmericaUS7ASCII”。在Windows环境中,NLS_lang的值被设置成为操作系统与键盘设置所指定的区域。
DISPLAY:在Unix下需要为OUI指明图形屏幕显示的发送位置。默认的方法是继承操作系统中DISPLAY环境变量的值,并且按照这个值发送所有输出。
1.4安装oracle时不创建数据库
安装oracle时不安装数据库,操作系统准备和环境准备就不做重复截图了。
用root用户脚本之后开始安装oracle11gR2
使用DBCA数据库助手创建数据
退出DBCA
1.5了解oracle数据库管理工具
1.OEM:oracle企业管理器
oracle企业管理器有两个工具可以使用。分别是databasecontrol和gridcontrol前者用来管理单实例的环境。gridcontrol是用来管理RAC环境的。gridcontrol必须安装oracle网格计算。我们现在使用的是databasecontrol。
通过databasecontrol访问OEM的方式:
https://orclsrv:1158/em
我们还可以使用sqldevelper管理数据库,需要安装sqldevelper
[oracle@orclsrv~]$sqlplus/nolog
sql*Plus:Release11.2.0.1.0Productionon星期四8月1309:52:582015
Copyright(c)1982,2009,Oracle.Allrightsreserved.
sql>connsys/123.abc
ERROR:
ORA-28009:应当以SYSDBA身份或SYSOPER身份建立SYS连接
sql>connsys/123assysdba
已连接。
sql>
使用本地用户连接,密码错误也可以连接,远程连接方式就不可以了
sql>connsys/12333assysdba
已连接。
sql>connsys/123.abcassysdba
已连接。
ctrl+l可以清屏
1.1.1.使用SCOTT用户连接
sql>connscott/123.abc
已连接。
sql>showuser;
USER为"SCOTT"
sql>
查看当前数据库的名字
sql>selectnamefromv$database;
NAME
---------------------------
ORCL
sql>selecttable_namefromtabs;
TABLE_NAME
--------------------------------------------------------------------------------
DEPT
EMP
BONUS
SALGRADE
1.1.2.创建表
Sql语句都要以分号“;”结束。
使用scott用户连接
[oracle@orclsrv~]$sqlplus/nolog
sql>connscott/123.abc
已连接。
sql>selecttable_namefromtabs;
TABLE_NAME
--------------------------------------------------------------------------------
SALGRADE
BONUS
EMP
DEPT
创建一个名为“test”的表,表的结构为“id,name,sex”三个列
sql>createtabletest(
2idnumber,
3namevarchar2(10),
4sexvarchar2(5)
5);
查看表的结构
sql>desctest;
名称是否为空?类型
--------------------------------------------------------------------------------------------------------
IDNUMBER
NAMEVARCHAR2(10)
SEXVARCHAR2(5)
查看test表中所有的列
sql>select*fromtest;
未选定行------//表中目前没有和任何记录
为test表中插入记录,使用insert命令
sql>insertintotest(id,name,sex)values(1,'huarong','女');
sql>insertintotest(id,sex)values(2,'zhangjing',sex)values(3,'liming','男');
sql>insertintotest(id,sex)values(4,'chenhao','男');
sql>insertintotest(id,sex)values(5,'ligang','男');
查看test表中的内容
sql>select*fromtest;
IDNAMESEX
---------------------------------------------
1huarong女
2zhangjing女
3liming男
4chenhao男
5ligang男
如果向所有的列插入记录,可以省略列
sql>insertintotestvalues(6,'baijing','女');
sql>insertintotestvalues(7,'baobao','女');
sql>select*fromtest;
IDNAMESEX
---------------------------------------------
1huarong女
2zhangjing女
3liming男
4chenhao男
5ligang男
6baijing女
7baobao女
但是这样的插入方式却会失败。
sql>insertintotestvalues(8,'sunhongzhi');
insertintotestvalues(8,'sunhongzhi')
*
第1行出现错误:
ORA-00947:没有足够的值
如果插入的列是有限制的,可以这样插入记录
sql>insertintotest(id,name)values(9,'luwenjuan');
提交事务
sql>commit;
提交完成。
通过oraclesqldeveloper查看我刚刚创建的表
查看test表中ID,name列
查看特定的某一行
sql>select*fromtestwherename='liming';
IDNAMESEX
------------------------------------
3liming男
sql>select*fromtestwhereid=6;
IDNAMESEX
---------------------------------------
6baijing女
每个表中都有隐含的列rowid
1.1.3.设置每列在屏幕上显示占用的的字符
在sqldeveloper中查看dept表
在sqlplus中查看dept表
可以修改每一列显示时所占用的字符长度a是固定的格式,不能修改。
如果是字符类型的使用“a”设置,如果是数值型的字段,如deptno就不可以了
sql>coldeptnoformata3
sql>select*fromdept;
DEPTNODNAMELOC
-----------------------------------
##########ACCOUNTINGNEWYORK
##########RESEARCHDALLAS
##########SALESCHICAGO
##########OPERATIONSBOSTON
如果是数值类型的字段,我们可以使用“9”来表示
sql>coldeptnofor99;
sql>select*fromdept;
DEPTNODNAMELOC
-------------------------------
10ACCOUNTINGNEWYORK
20RESEARCHDALLAS
30SALESCHICAGO
40OPERATIONSBOSTON
举例说明:
sql>connsys/123.abcassysdba;
已连接。
sql>selectfile_name,tablespace_namefromdba_data_files;
sql>colfile_namefora55;
sql>coltablespace_namefora10
sql>
FILE_NAMETABLESPACE
-----------------------------------------------------------------
/u01/app/oracle/oradata/orcl/users01.dbfUSERS
/u01/app/oracle/oradata/orcl/undotbs01.dbfUNDOTBS1
/u01/app/oracle/oradata/orcl/sysaux01.dbfSYSAUX
/u01/app/oracle/oradata/orcl/system01.dbfSYSTEM
/u01/app/oracle/oradata/orcl/example01.dbfEXAMPLE
目前默认一行可以显示80字符,超过80字符就会换行。
sql>showlinesize;
linesize80
sql>setlinesize60;
sql>
一次默认显示14行
sql>colusernamefora30
sql>selectusernamefromdba_users;
一次默认显示14行
sql>showpagesize;
pagesize14
sql>setpagesize100
sql>selectusernamefromdba_users;
以上的colfile_namefora10、linesize、pagesize的设置只在当前会话中有效,断开连接之后就不会再有效果了。可以通过修改$ORACLE_HOME/sqlplus/admin/下的glogin.sql实现
[oracle@orclsrv~]$cd/u01/app/oracle/product/11.2.0/dbhome_1/sqlplus/admin/
[oracle@orclsrvadmin]$ls
glogin.sqlhelplibsqlplus.defplustrce.sqlpupbld.sql
[oracle@orclsrvadmin]$
[oracle@orclsrvadmin]$vimglogin.sql
添加常用的一些参数
setpagesize100
setlinesize120
coldnamefora20
collocfora15
colfile_namefora55
coltablespace_namefora10
colnamefora20
1.1.1.进入数据库的不同状态
NOMOUNT阶段
nomount:已经通过参数文件知道控制文件在哪个位置,但是还没有读取控制文件。此时的状态时started,此时如果控制文件丢失了,实例是无法启动的。此时实例停留在stared状态。
MOUNT阶段
读取了控制文件,是指通过控制文件知道了其他文件(数据文件和日志文件),此时并没有读取数据文件和日志文件,这个状态叫mount状态
Open状态
读取完控制文件之后,找到了数据文件和日志文件,数据库就处于OPEN状态了。
startupnomount|mount|open
shudownnormal|immedieate|transactional|abort
测试过程:
sql>selectstatusfromv$instance;
STATUS
------------------------------------
OPEN
sql>shutdownimmediate;
已经卸载数据库。
ORACLE例程已经关闭。
sql>startupnomount;
ORACLE例程已经启动。
TotalSystemGlobalArea1202556928bytes
FixedSize2212816bytes
VariableSize754977840bytes
DatabaseBuffers436207616bytes
RedoBuffers9158656bytes
sql>selectstatusfromv$instance;
STATUS
------------------------------------
STARTED
进入mount阶段,是失败�N
sql>startupmount;
ORA-01081:?????????ORACLE-??????
此时可以使用shutdownimmediate,在startupmount
sql>shutdownimmediate;
ORA-01507:??????
ORACLE例程已经关闭。
sql>startupmount;
ORACLE例程已经启动。
TotalSystemGlobalArea1202556928bytes
FixedSize2212816bytes
VariableSize754977840bytes
DatabaseBuffers436207616bytes
RedoBuffers9158656bytes
数据库装载完毕。
sql>selectstatusfromv$instance;
STATUS
------------------------------------
MOUNTED
如果现在想切换到open状态,可以使用alter
数据库已更改。
sql>selectstatusfromv$instance;
STATUS
------------------------------------
OPEN
sql>shutdownimmediate;
已经卸载数据库。
ORACLE例程已经关闭。
sql>startupnomount;
ORACLE例程已经启动。
TotalSystemGlobalArea1202556928bytes
FixedSize2212816bytes
VariableSize754977840bytes
DatabaseBuffers436207616bytes
RedoBuffers9158656bytes
alterdatabaSEOpen
*
第1行出现错误:
ORA-01507:??????
sql>alterdatabasemount;
数据库已更改。
sql>selectstatusfromv$instance;
STATUS
------------------------------------
MOUNTED
如果采用startupnomount或者startupmount命令,必须采用alterdatabase命令来执行打开数据库的操作
1.1.2.关于shutdown的选项的区别
直接写shutdown默认状态是normal.
sql>shutdown
ORA-01109:??????
已经卸载数据库。
ORACLE例程已经关闭。
normal:这是默认选项,使用该选项时,不允许任何新的用户连接,但是允许继续当前的所有连接,只有所有用户(自愿的)退出登录时,数据库才能真正的关闭
通常,正常的数据库关闭是没有意义的,即使只剩下databasecontrol在运行,也总是存在未退出登录的用户。
immediate:使用这个选项时,不允许任何新的用户连接,当前的所有连接的会话都被终止。任何活动的事务都会都将回滚,随后数据库会被关闭。
transactional:使用这个选项时,不允许任何新的用户连接,没有存在于某个事务中的现有会话被终止,允许当前位于某个事务中的会话在完成该事务之后终止。一但所有会话终止,数据就会被关闭。
abort:就oracle而言,使用这个选项相当于断电。实例被立即终止。此时,任何数据都不会被写入磁盘,任何文件句柄都不会被关闭,同时也不会采用任何有序的方式终止正在
进行的事务。