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: block device /dev/sr0 is write-protected, mounting read-only
关闭防火墙
[root@orclsrv ~]# serviceiptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
4.创建/u01目录
[root@orclsrv ~]#mkdir /u01
5.将oracle11g的安装文件拷贝到/u01中
[root@orclsrv oracle]# mv linux.x64_11gR2_database_* /u01/
6.解压安装包
[root@orclsrv u01]# unzip linux.x64_11gR2_database_1of2.zip && unzip linux.x64_11gR2_database_2of2.zip
7.删除oracle安装文件,节省磁盘空间
[root@orclsrvu01]# rm -rf linux.x64_11gR2_database_*
8.使用oracle用户安装oracle11g R2
9.以oracle用户安装oracle,修改/u01目录的属主和属组为oracle用户
[root@orclsrv u01]# ls -ld /u01/
drwxr-xr-x 3 root root 4096 Aug 12 09:56 /u01/
[root@orclsrv oracle]# chown -R oracle:oracle /u01/
[root@orclsrv u01]# ls -ld /u01/
drwxr-xr-x 3 oracle oracle 4096 Aug 12 09:56 /u01/
1.2 开始安装oracle 11g R2
使用oracle用户身份运行/u01/database/runinstaller
[oracle@orclsrv u01]$ ls
database
[oracle@orclsrv u01]$ cd database/
[oracle@orclsrv database]$ ls
doc install response rpm runInstallersshsetup stage welcome.html
[oracle@orclsrv database]$ ./runInstaller
发现oracle安装界面上的文字都是方块字。
出现这种情况的原因是:oracle所使用的字体在我们当前的操作系统里不存在的原因。
解决办法:
首先创建一个目录
mkdir–p /usr/share/fonts/zh_CN/TrueType
将字体文件拷贝到上面创建的目录中
[root@orclsrv oracle]# cp zysong.ttf /usr/share/fonts/zh_CN/TrueType/
[root@orclsrv oracle]#chmodo+r/usr/share/fonts/zh_CN/TrueType/zysong.ttf
[oracle@orclsrv database]$ ./runInstaller
安装oracle软件的同时创建数据库
修改oracle用户的.bash_profile
export ORACLE_BASE="/u01/app/oracle"
export ORACLE_HOME="/u01/app/oracle/product/11.2.0/dbhome_1"
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=orcl
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"
expor PATH
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@orclsrv u01]# /tmp/CVU_11.2.0.1.0_oracle/runfixup.sh
Response file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.response
Enable file being used is :/tmp/CVU_11.2.0.1.0_oracle/fixup.enable
Log file location: /tmp/CVU_11.2.0.1.0_oracle/orarun.log
Setting Kernel Parameters...
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
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@orclsrv u01]#
yum安装依赖的软件包
[root@orclsrv u01]# yum -y install libaio glibc compat-libstdc* elfutils-libelf-devel\* gcc-c++ libaio-devel unixODBC\* readline\*
[root@orclsrv u01]# cd ~oracle/
[root@orclsrv oracle]# rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
warning: pdksh-5.2.14-37.el5_8.1.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID e8562897: 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
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0/dbhome_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
注销oracle用户后,就可以变成中文界面了
1.3 使用脚本检查oracle安装先决条件
install.sh脚本为配置oracle用户的环境变量,安装oracle需要安装的依赖包,改变oracle语言环境,运行脚本之前需要配置IP地址,主机名,yum仓库,
[oracle@orclsrv ~]$ cat install.sh
使用root用户运行install.sh脚本
运行完脚本查看oracle用户的.bash_profile
执行source .bash_profile
将oracle的安装包拷贝到/u01目录下
解压oracle软件包
删除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用户脚本之后开始安装oracle 11g R2
使用DBCA数据库助手创建数据
退出DBCA
1.5 了解oracle数据库管理工具
1.OEM: oracle企业管理器
oracle 企业管理器有两个工具可以使用。分别是database control和grid control前者用来管理单实例的环境。grid control是用来管理RAC环境的。grid control必须安装oracle网格计算。我们现在使用的是database control。
通过database control访问OEM的方式:
https://orclsrv:1158/em
我们还可以使用sqlplus连接数据库
我们还可以使用sqldevelper管理数据库,需要安装sqldevelper
sys用户必须以sysdba身份登录
[oracle@orclsrv ~]$sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期四 8月 13 09:52:58 2015
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL>conn sys/123.abc
ERROR:
ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接
SQL> conn sys/123 as sysdba
已连接。
SQL>
使用本地用户连接,密码错误也可以连接,远程连接方式就不可以了
SQL>conn sys/12333 as sysdba
已连接。
SQL>conn sys/123.abc as sysdba
已连接。
ctrl+l可以清屏
1.1.1. 使用SCOTT用户连接
SQL>conn scott/123.abc
已连接。
SQL>show user;
USER 为 "SCOTT"
SQL>
查看当前数据库的名字
使用sys用户连接,查看数据库的名字
SQL>select name from v$database;
NAME
---------------------------
ORCL
SQL>conn scott/123.abc
已连接。
SQL>select table_name from tabs;
TABLE_NAME
--------------------------------------------------------------------------------
DEPT
EMP
BONUS
SALGRADE
1.1.2. 创建表
Sql语句都要以分号“;”结束。
使用scott用户连接
[oracle@orclsrv ~]$ sqlplus /nolog
SQL> conn scott/123.abc
已连接。
SQL>select table_name from tabs;
TABLE_NAME
--------------------------------------------------------------------------------
SALGRADE
BONUS
EMP
DEPT
创建一个名为“test”的表,表的结构为“id,name,sex”三个列
SQL> create table test (
2 id number,
3 name varchar2(10),
4 sex varchar2(5)
5 );
查看表的结构
SQL>desc test;
名称是否为空? 类型
----------------------------------------- -------- -------------------------------- -----------------------
IDNUMBER
NAMEVARCHAR2(10)
SEXVARCHAR2(5)
查看test表中所有的列
SQL> select * from test;
未选定行------//表中目前没有和任何记录
为test表中插入记录,使用insert 命令
SQL> insert into test (id,name,sex) values (1,'huarong','女');
SQL> insert into test (id,name,sex) values (2,'zhangjing','女');
SQL> insert into test (id,name,sex) values (3,'liming','男');
SQL> insert into test (id,name,sex) values (4,'chenhao','男');
SQL> insert into test (id,name,sex) values (5,'ligang','男');
查看test表中的内容
SQL> select * from test;
ID NAME SEX
---------- -------------------- ---------------
1 huarong女
2 zhangjing女
3 liming 男
4 chenhao男
5 ligang男
如果向所有的列插入记录,可以省略列
SQL> insert into test values (6,'baijing','女');
SQL> insert into test values (7,'baobao','女');
SQL> select * from test;
ID NAME SEX
------------------------------ ---------------
1 huarong女
2 zhangjing女
3 liming 男
4 chenhao男
5 ligang男
6 baijing女
7 baobao女
但是这样的插入方式却会失败。
SQL> insert into test values (8,'sunhongzhi');
insert into test values (8,'sunhongzhi')
*
第 1 行出现错误:
ORA-00947: 没有足够的值
如果插入的列是有限制的,可以这样插入记录
SQL> insert into test (id,name) values (9,'luwenjuan');
提交事务
SQL> commit;
提交完成。
通过oracle sql developer查看我刚刚创建的表
查看test表中ID,name列
查看特定的某一行
SQL> select * from test where name='liming';
ID NAME SEX
---------- ----------------- ---------
3 liming 男
SQL> select * from test where id=6;
ID NAME SEX
---------- -------------------- ---------
6 baijing女
每个表中都有隐含的列rowid
1.1.3. 设置每列在屏幕上显示占用的的字符
在sql developer中查看dept表
在sqlplus中查看dept表
会发现在sqlplus中显示比较杂乱
可以修改每一列显示时所占用的字符长度 a是固定的格式,不能修改。
如果是字符类型的使用“a”设置,如果是数值型的字段,如deptno就不可以了
SQL>col deptnoformat a3
SQL>select * from dept;
DEPTNO DNAME LOC
---------- -------------------------
##########ACCOUNTING NEW YORK
##########RESEARCHDALLAS
########## SALESCHICAGO
########## OPERATIONS BOSTON
如果是数值类型的字段,我们可以使用“9”来表示
SQL>col deptno for 99;
SQL>select * from dept;
DEPTNO DNAME LOC
------ --------------- ----------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALESCHICAGO
40 OPERATIONS BOSTON
举例说明:
SQL> conn sys/123.abc as sysdba;
已连接。
SQL>select file_name,tablespace_name from dba_data_files;
SQL>col file_name for a55;
SQL>col tablespace_name for a10
SQL>select file_name,tablespace_name from dba_data_files;
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>show linesize;
linesize 80
SQL>set linesize 60;
可以查看以下显示效果:
SQL>select file_name,tablespace_name from dba_data_files;
一次默认显示14行
SQL>col username for a30
SQL>select username from dba_users;
一次默认显示14行
SQL>showpagesize;
pagesize 14
修改默认显示的行为100
SQL>set pagesize 100
SQL>select username from dba_users;
以上的col file_name for a10 、linesize、pagesize的设置只在当前会话中有效,断开连接之后就不会再有效果了。可以通过修改$ORACLE_HOME/sqlplus/admin/下的glogin.sql实现
[oracle@orclsrv ~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/sqlplus/admin/
[oracle@orclsrv admin]$ ls
glogin.sql help libsqlplus.def plustrce.sqlpupbld.sql
[oracle@orclsrv admin]$
[oracle@orclsrv admin]$vimglogin.sql
添加常用的一些参数
setpagesize 100
setlinesize 120
coldname for a20
colloc for a15
colfile_name for a55
coltablespace_name for a10
col name for a20
1.1.1. 进入数据库的不同状态
NOMOUNT阶段
nomount:已经通过参数文件知道控制文件在哪个位置,但是还没有读取控制文件。此时的状态时started,此时如果控制文件丢失了,实例是无法启动的。此时实例停留在stared状态。
MOUNT阶段
读取了控制文件,是指通过控制文件知道了其他文件(数据文件和日志文件),此时并没有读取数据文件和日志文件,这个状态叫mount状态
Open状态
读取完控制文件之后,找到了数据文件和日志文件,数据库就处于OPEN状态了。
startupnomount|mount|open
shudownnormal|immedieate|transactional|abort
测试过程:
SQL> select status from v$instance;
STATUS
------------------------------------
OPEN
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1202556928 bytes
Fixed Size 2212816 bytes
Variable Size 754977840 bytes
Database Buffers 436207616 bytes
Redo Buffers 9158656 bytes
SQL> select status from v$instance;
STATUS
------------------------------------
STARTED
进入mount阶段,是失败嘚
SQL> startup mount;
ORA-01081: ?????????ORACLE - ??????
此时可以使用shutdown immediate ,在startup mount
SQL> shutdown immediate;
ORA-01507: ??????
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1202556928 bytes
Fixed Size 2212816 bytes
Variable Size 754977840 bytes
Database Buffers 436207616 bytes
Redo Buffers 9158656 bytes
数据库装载完毕。
SQL> select status from v$instance;
STATUS
------------------------------------
MOUNTED
如果现在想切换到open状态,可以使用alter
SQL> alter database open;
数据库已更改。
SQL> select status from v$instance;
STATUS
------------------------------------
OPEN
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount;
ORACLE 例程已经启动。
Total System Global Area 1202556928 bytes
Fixed Size 2212816 bytes
Variable Size 754977840 bytes
Database Buffers 436207616 bytes
Redo Buffers 9158656 bytes
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01507: ??????
SQL> alter database mount;
数据库已更改。
SQL> select status from v$instance;
STATUS
------------------------------------
MOUNTED
如果采用startup nomount或者startup mount命令,必须采用alter database命令来执行打开数据库的操作
1.1.2. 关于shutdown的选项的区别
直接写shutdown 默认状态是normal.
SQL> shutdown
ORA-01109: ??????
已经卸载数据库。
ORACLE 例程已经关闭。
normal:这是默认选项,使用该选项时,不允许任何新的用户连接,但是允许继续当前的所有连接,只有所有用户(自愿的)退出登录时,数据库才能真正的关闭
通常,正常的数据库关闭是没有意义的,即使只剩下database control在运行,也总是存在未退出登录的用户。
immediate:使用这个选项时,不允许任何新的用户连接,当前的所有连接的会话都被终止。任何活动的事务都会都将回滚,随后数据库会被关闭。
transactional:使用这个选项时,不允许任何新的用户连接,没有存在于某个事务中的现有会话被终止,允许当前位于某个事务中的会话在完成该事务之后终止。一但所有会话终止,数据就会被关闭。
abort:就oracle而言,使用这个选项相当于断电。实例被立即终止。此时,任何数据都不会被写入磁盘,任何文件句柄都不会被关闭,同时也不会采用任何有序的方式终止正在
进行的事务。