大纲
1. 安装环境及Oracle11g安装包。
2. 创建用户组及用户。
3. 安装Oracle必需的包,并检查是否仍有缺少。
4. 修改操作系统核心参数。
5. 配置oracle用户的环境变量,为第6步做准备。
6. 解压Oracle安装包,进行安装。
7. 启动Oracle服务与监听。
8. 创建表空间、用户、表。
1. 环境及Oracle11g安装包
1.1 Linux系统:rhel-server-6.8-x86_64(桌面版)
1.2 Oracle11g安装包:linux.x64_11gR2_database_1of2.zip、linux.x64_11gR2_database_2of2.zip
2. 创建用户组及用户。(root权限下)
2.1 创建用户组,输入命令:
groupadd oinstall
groupadd dba
2.2 创建Oracle用户和密码,输入命令:
useradd -g oinstall -g dba -m oracle
passwd oracle
3. 安装Oracle必需的包,并安装缺少的包。(root权限下)
3.1 以下命令执行顺序不可颠倒!安装包可从Linux镜像文件中的Packages目录下获取,版本号可能不一致。
rpm -ivh glibc-common-2.12-1.25.el6.x86_64.rpm
rpm -ivh kernel-headers-2.6.32-131.0.15.el6.x86_64.rpm
rpm -ivh libgcc-4.4.5-6.el6.x86_64.rpm
rpm -ivh glibc-2.12-1.25.el6.x86_64.rpm
rpm -ivh libgomp-4.4.5-6.el6.x86_64.rpm
rpm -ivh nscd-2.12-1.25.el6.x86_64.rpm
rpm -ivh glibc-headers-2.12-1.25.el6.x86_64.rpm
rpm -ivh glibc-devel-2.12-1.25.el6.x86_64.rpm
rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm
rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm
rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
rpm -ivh cpp-4.4.5-6.el6.x86_64.rpm
rpm -ivh gcc-4.4.5-6.el6.x86_64.rpm
3.2 安装完成之后,执行命令检查是否所需包已全部安装
rpm -q binutils compat-libstdc++ elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
3.3 检查之后发现还有4个包没有安装,所以从Linux镜像文件中的Packages目录下获取进行安装,并再次进行检查。
3.4 发现还有一个“compat-libstdc”包没有(其实还有一个elfutils-libelf-devel-static包显示没有,但是我没有在iso文件中找到,最后Oracle也安装成功了,特此说明),但是我确认已经安装了,最后发现原因是检查命令不对,命令应该为:
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
3.5 另附查询指定包是否存在的命令:
rpm -qa | grep "compat-libstdc"
4. 修改操作系统核心参数。(root权限下)
4.1 vi /etc/security/limits.conf (资源限制配置文件),新增如下代码:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
4.2 vi /etc/pam.d/login (登陆配置文件),新增如下代码:
session required pam_limits.so
4.3 vi /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
5. 配置oracle用户的环境变量,为第6步做准备。(oracle用户下)
5.1 创建oracle相关目录
mkdir /home/oracle/app
mkdir /home/oracle/app/oracle
mkdir /home/oracle/app/oradata
mkdir /home/oracle/app/oracle/product
5.2 vi .bash_profile(用户环境变量文件),新增如下内容
export ORACLE_BASE=/home/oracle/app
export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
6. 解压Oracle安装包,进行安装。(oracle用户下)
6.0 运行Oracle安装执行程序:
./runInstaller
6.1 第1步,用来配置更新以及技术支持的,把勾去掉直接下一步就行。
有警告,点击“yes”即可。
6.2 第2步,这三个选项分别表示:①创建并配置一个新数据库,适用于新安装数据库的用户;②只安装数据库软件,适用于已有Oracle数据库数据用于数据迁移的;③升级已有数据库,适用于将老数据库升级成新数据库的用户。这里我们选择第1个选项:
6.3 第3步,配置桌面版还是服务器版,桌面版是最小化配置。这里我们选择服务器版的配置。
6.4 第4步,分布式网格配置,这里我们选择单实例服务器配置。
6.5 第5步,分为典型安装和高级安装,这里我们选择高级安装。
6.6 第6步,选择语言,这里我们选择英文和简体中文。
6.7 第7步,选择数据库版本,这里我们选择企业版。
6.8 第8步,选择安装路径,这个已经在上面的5.2配置oracle用户环境变量中配置过了,直接下一步。
6.9 第9步,这个Inventory Directory目录用于记录Oracle的清单信息的,清单信息中包括Oracle的安装路径等信息。这里我们选择默认的路径,即oracle用户家目录下的一个oraInventory目录。
6.10 第10步,用于创建数据库的类型:通用/事务处理(专为一般用途或交互较多的应用程序而设计);数据仓库(对数据存储应用程序进行优化)。这里我们选择通用。
6.11 第11步,配置数据库名和Oracle服务ID号,这里我们使用默认的orcl。(注意数据库名一定要记住,以后进行程序开发会用到这个数据库名)
6.12 第12步,配置字符集,将字符集设置成UTF-8,其他的不用修改。
6.13 第13步,配置系统信息邮件通知的,可以跳过,直接下一步。
6.14 第14步,配置数据存储的(数据文件存储位置),由于在上面“5. 配置oracle用户的环境变量”中已经配置好了,直接下一步即可。
6.15 第15步,配置数据备份,这里我们只是用来学习不需要自动备份,实际生产肯定是要做备份的。
6.16 第16步,配置账号密码,这里我将所有的默认用户统一使用相同的密码。
6.17 第17步,配置数据库用户组的,由于在上面“2. 创建用户组及用户”中已经配置好了,直接下一步即可。
6.18 第18步,会检测交换分区大小、内核参数以及依赖包是否安装。只要前面准备工作都完成了,下面的错误可以直接忽略(比如它要求的软件包,我们的版本实际上比它要求的还高,所以这里的报错没必要理会它)。
6.19 第19步,对前面所有配置的一个总结,我们可以直接点击完成。
6.20 第20步,最终的配置信息确认。
6.21 第21步,这里提示需要使用root用户手动运行两个脚本,参考第22步,执行脚本成功之后返回页面点击OK。
6.22 第22步,root权限下执行两个脚本,执行脚本成功之后返回安装页面点击OK。
6.23 第23步,提示oracle安装成功。
6.24 第24步,简单的验证:在oracle用户下,进入sqlplus,使用sys as sysdba 登录,解锁scott用户,查询表数据。
7. 启动Oracle服务与监听。(oracle用户下)
7.1 启Oracle服务:
sqlplus /nolog
conn sys/123456 as sysdba
shutdown immediate
startup
7.2 启动监听(才能使用数据库管理工具连接):
lsnrctl status (查看监听状态)
lsnrctl stop (关闭监听)
lsnrctl start (启动监听)
7.3 遇到的问题:本地连接虚拟机中Oracle数据库失败。
原因之一:本地telnet虚拟机Oracle地址不通,是防火墙没有关闭1521端口,可使用如下命令将1521端口设置为白名单(),编辑防火墙配置文件:
sudo vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
一定要将上述代码写在reject之前,不然会不起作用的
文件修改完成之后,执行如下命令,生效防火墙:
sudo service iptables restart
sudo service iptables save
sudo iptables -L -n
8. 创建表空间、用户、表
8.1 创建表空间data_space_hhh,指定存储文件及路径/home/oracle/app/oradata/orcl/usersHhh01.dbf,表空间大小360M(sys用户下)
create tablespace data_space_hhh datafile '/home/oracle/app/oradata/orcl/usersHhh01.dbf' size 360M;
8.2 创建用户hhh并指定默认表空间data_space_hhh(sys用户下)
create user hhh identified by tiger default tablespace data_space_hhh;
8.3 赋予普通用户权限给用户hhh(sys用户下)
grant connect,resource to hhh;
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
8.4 创建student表(hhh用户下)
conn hhh/tiger
create table student(
name varchar2(16) primary key,
sex number(1),
age number(3),
class number(2),
address varchar2(64)
)tablespace data_space_hhh;
8.5 创建表成功之后,别忘了执行提交命令
commit;
8.6 相关查询、删除语句
--查看-表空间文件路径
select name from v$datafile;
--查看-表空间大小
select tablespace_name, file_id, sum(bytes)/1024/1024"(M)" from dba_data_files group by tablespace_name, file_id
ORDER BY file_id;
--查看-你能管理的所有用户
select * from all_users order by CREATED;
--查看-数据库里面所有用户(dba权限)
select USERNAME from dba_users;
--查看-当前登录用户的所有表
select table_name from user_tables;
--删除-非空表空间data_space_hhh,包含物理文件
drop tablespace data_space_hhh including contents and datafiles;
--删除-这个用户hhh以及这个用户下的所有对象
drop user hhh cascade;
--修改-hhh用户密码为123456
alter user hhh identified by 123456
参考资料
4. Linux老是提示compat-libstdc++ is not installed的原因
5. Oracle权限管理详解
7. drop user和drop user cascade的区别
最后,谢谢各位读者的耐心阅读,如有语句不通顺或者不准确的地方,大家也可以提提改善的意见!(^__^)