这里我不介绍如何安装linux,直接进入正题
第一步:首先介绍下,因为oracle安装需要很大的空间,光两个包就要2G,解压后大概需要5~6G,还需要配置物理内存,所以我推荐当前linux硬盘具有15G的情况下进行安装Oracle
检查linux磁盘情况#df -h
在这里可以看到 /dev/mapper/centos-root既当前磁盘情况使用,因本人电脑内存比较小,不够用,所以给的不是很多,在安装oracle之前只有15G后来解压时发现磁盘不够,后来扩容到25G,这里可以看到,只是安装Oracle大概用了15G左右内存,还是没有建表使用等等,并且给予分配的oracle数据库的物理空间为2G,所以一定要保证大于15G的情况下进行安装Oracle
这里我给大家分享一下如何扩容磁盘,扩容磁盘有两种方式,一种时在原有的磁盘下扩容,另一种则时创建一个新的磁盘,废话不多说,上干货
扩容部分:
拿绿色标注2的是添加新的硬盘,拿红色标注1的则是对自身扩容的方式,我用的是第一种所以这里只介绍第一种,第二种可以自行百度
调整大小即可,这里讲解下,当扩容后并没有立刻生效,还需要在linux配置一些设置,才可将新扩容的磁盘下挂到对应用户使用的空间才算成功
查看磁盘使用情况以及磁盘物理卷# fdisk -l
32G是总内存,而我们需要创建新的设备,来代表刚刚扩容的10g,然后再创建物理卷既/dev/sda3来代表设备,
创建设备过程 : 1.进入磁盘分区指令 # fdish /dev/sda
2.依次键入 m(获取帮助),n(增加分区),p(增加主分区),一直回车即可,用默认,w(保存并退出) 这里便新增完新的分区,依次是sda1,sda2,sda3
创建物理卷 # pvcreate /dev/sda3 (如果找不到sda3那么键入partprobe或者重启虚拟机即可)
# vgscan(查看本机物理卷统称) 我的是 centos
# vgextend centos /dev/sda3(对物理卷分配设备)
这里就创建好物理卷了,接下来将物理卷分配到分区上。既上面的(centos-root)
# lvextend -L +9G /dev/mapper/centos-root
这里讲一下为什么是9G而不是10G,一般扩容10G都会少100M,所以分配后不够10G,-1G即可
接着
# db -f (再次查看磁盘空间发现没有生效,这是因为系统还没扫描到,需要手动让系统进行认同扩容)
# xfs_growfs 加上扩展的分区名称(/dev/mapper/centos-root)
这样就欧克了,以上扩容图片因我当时没有截图,所以网上扣的,但是跟手打一模一样,百分之九十九还原
扩容篇章结束,接下来回归Oracle安装过程
第二部:
安装Oracle前的配置
查看主机名 #hostname
在查看主机ip地址 # ifconfig -a 然后看ens33
在/etc/hosts文件内容下添加主机名(我理解为识别本机ip的访问,类似于一个局域网内一台映射为连接的ip,有助于更快互联)添加后两行就好记得前面换成自己的ip
#vi /etc/hosts
添加内容
主机ip 主机名称
主机ip localhost(也可以是127.0.0.1)
关闭SElinux
#vi /etc/selinux/config
设置SELINUXTYPE=disabled
说明:这里注意一下配置SELINUXTYPE=disabled 是设置永久关闭的,如果这个时候你将linux退出那么将无法进入操作系统,所以如果你要退出或者是重启,那么必须将SELINUXTYPE改回原来的SELINUXTYPE=targeted,也可以#setenforce 0 (表示临时关闭防火墙)如果是公司内网linux建议不要动配置,关于防火墙的配置,直接setenforce 0就好
#wq 保存并退出
#setenforce 0 (表示关闭防火墙)
也可以配置临时关闭SElinux setenforce 0 直接执行这句就好注意,这样每次进来都需要查看一遍是否关闭,并且关闭
#getenforce (查看SElinux状态)
#service iptables stop(临时关闭防火墙)找不到该命令可以用#systemctl stop firewalld
安装Oracle使用到的架包
创建用户,组
#groupadd oinstall(创建分组)
#groupadd dba(创建分组)
#useradd -g onstall -G dba oracle(创建用户oracle,并将onstall设置为主分组,dba设置为从分组)
#passwd oracle(设置密码)
#id oracle(查看分组情况)
创建静默安装目录
#mkdir -p /opt/oracle //$ORACLE_BASE(Oracle路径)
#mkdir -p /opt/oracle/product/112010/db_1//$ORACLE_HOME(Oracle日志监听文件)
#mkdir /opt/oracle/oradata //存放数据库目录
#mkdir /opt/oracle/inventory
#mkdir /opt/oracle/flash_recovery_area
#chown -R oracle:oinstall /opt/oracle(将文件权限给予Oracle用户)
Chmod -R 775 /opt/oracle
将Oracle使用者加入到sudo群组种
#vi /etc/sudoers
root ALL=(ALL) ALL 这行,并且在底下再加入以下命令
oracle ALL=(ALL) ALL
配置系统环境(添加如下内容)
#vi /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 1073741824
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 = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
#sysctl -p(启动配置)
修改用户限制文件(添加如下内容)
#vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
关联设置(添加如下内容,在末尾添加即可)
#vi /etc/pam.d/login
行末添加以下内容:
session required /lib64/security/pam_limits.so
session required pam_limits.so
修改 /etc/profile(添加如下内容,在末尾添加即可)
#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
在root用户下,使用命令source profile使环境变量生效
#source /etc/profile
修改用户环境变量(添加如下内容,在末尾添加即可)
#vi /home/oracle/.bash_profile
说明一下,这里的ORACLE_BSE跟前面生成的Oracle目录路径要一直哦,ORACLE_HOME也是哦
使环境变量生效
#source /home/oracle/.bash_profile(后面的命令只要失效就执行这个命令,比如sqlplus,)
查看效果
#env
配置结束;接下来将安装包上传,并挪到对应目录/opt/oracle
#unzip 安装包名称(解压,两个安装包都要解压)
如果解压报错先看下配置,然后可能是安装包太大或者是磁盘不足导致,查看清楚后确认没问题的话可以用。如果不行尝试命令 # tar -xzvf 安装包,如果还不行那就试试7zip,这个是当超过2G时的zip解压方式 如果需要安装# yum -y install epel-release,# yum -y install p7zip p7zip-plugins,进行安装然后用命令# 7z e 安装包(解压)
以上三种为我当时还遇到无法解压的问题以及解压方式,当然最后是包不全,缺少东西,一定要看好包是否完整,然后仔细看配置,unzip一般没问题。
当解压成功后编辑Oracle安装应答文件(这里我们不用界面安装)
/opt/oracle/database/response(解压后的文件中)下有有db_install.rsp、dbca.rsp和netca.rsp三个应答文件,分别数据库安装文件、建立数据库实例和监听配置安装文件
修改文件db_install.rsp
#vi db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY //29 行 安装类型
ORACLE_HOSTNAME=localhost.localdomain//37 行 主机名称
UNIX_GROUP_NAME=oinstall //42 行 安装组
INVENTORY_LOCATION=/opt/oracle/inventory //47 行 INVENTORY目录
SELECTED_LANGUAGES=zh_CN,en //78 行 选择语言
ORACLE_HOME=/opt/oracle/product/112010/db_1 //83 行 oracle_home
ORACLE_BASE=/opt/oracle //88 行 oracle_base
oracle.install.db.InstallEdition=EE //99 行 oracle版本
oracle.install.db.DBA_GROUP=dba //142行dba用户组
oracle.install.db.OPER_GROUP=oinstall //147行oper用户组
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //160行 数据库类型
oracle.install.db.config.starterdb.globalDBName=orcl //165行globalDBName
oracle.install.db.config.starterdb.SID=orcl //170行SID
oracle.install.db.config.starterdb.memoryLimit=800 //192行 自动管理内存的最小内存(M)
oracle.install.db.config.starterdb.password.ALL=oracle //233行 设定所有数据库用户使用同一个密码
DECLINE_SECURITY_UPDATES=true //385行 设置安全更新
注意,这里可能有问题,加个en
SELECTED_LANGUAGES=zh_CN,en //78 行 选择语言
保存后切换用户
#su oracle
进入刚才解压的database目录
$cd /opt/oracle/database/
$./runInstaller -silent -responseFile /opt/oracle/response/db_install.rsp -ignorePrereq(这句话就是执行安装命令了,如果当前显示找不到文件,或者是无法执行的问题,可能时因为当前用户没有找到这个文件,或者没有权限访问这个文件,那么我们可以这样解决)
#su root
#mkdir /home/oracle/etc
#cp /opt/oracle/databse/response/* /home/oracle/etc
#su oracle
#chown -R oracle:oinstall /home/oracle/etc
#Chmod -R 775 /home/oracle/etc
$./runInstaller -silent -responseFile /home/oracle/etc/db_install.rsp -ignorePrereq
将配置文件放置到用户下就能找到啦
然后等十分钟让其安装成功
这样就算安装成功了;
安装后操作,以root身份登录,执行脚本
#/opt/oracle/inventory/orainstRoot.sh
#/opt/oracle/product/112010/db_1/root.sh
至此安装完成!
接下来配置监听来启动关闭oracle,以及配置数据库实例 ,注意安装完只是安装完,没法使用,得配置后监听跟实例才可以正常使用哦,监听相当于启动进程,实例就是创建数据库
配置监听:
编辑oracle安装目录下的netca.rsp应答文件,地址为:
/opt/oracle/database/response/netca.rsp,主要查看以下参数配置:
INSTALL_TYPE=""custom""安装的类型
LISTENER_NUMBER=1监听器数量
LISTENER_NAMES={"LISTENER"}监听器的名称列表
LISTENER_PROTOCOLS={"TCP;1521"}监听器使用的通讯协议列表
LISTENER_START=""LISTENER""监听器启动的名称
修改完后切换用户oracle,执行如下命令
$netca /silent /responseFile /opt/oracle/database/response/netca.rsp
如果你前面配置了home/oracle/etc/那么为了以防万一两个netca.rsp文件都修改了
如果执行后说找不到netca命令
如果命令不管用的时候 如source,dbca,netca还记得我上面说的一句话吗
#source /home/oracle/.bash_profile(后面的命令只要失效就执行这个命令,比如sqlplus)
也可以添加如下内容让其永久生效,但是我添加后并没有感觉到永久生效,还是需要继续执行配置生效命令
添加如下内容:
$ vi /home/oracle/.bash.profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。
成功配置后再运行netca命令,运行后,在/opt/oracle/product/112010/network/admin/中生成listener.ora和sqlnet.ora
这样就监听完成了,这个时候可以查看端口是否存在
#netstat -tnulp|grep 1521
注意:监听配置完之后时开启的可以用命令
lsnrctl stop(关闭)
lsnrctl status(查看状态)
lsnrctl start (开启)
如果开启后继续lsnrctl start 会报一个错,证明已开启,我当时以为配置出问题了,开启不了,其实当执行netca监听成功后就开启了,这个时候可以先查看状态。
监听好之后,
$vi $ORACLE_HOME/network/admin/listener.ora
这里把localhost改成本机ip保存退出就好了,如果不修改用工具连接不上数据库,这是对外映射端口的。
执行命令$lsnrctl start 成功图片
配置数据库实例
$vi /opt/oracle/database/response/dbca.rsp
根据数据库建立方式的不同编辑不同的数据库库选项
比如在本次安装过程中设置了下列参数:(注意下面参数视情况而定,不要照抄,原文件都有说明的)
RESPONSEFILE_VERSION ="11.2.0"//不能更改
OPERATION_TYPE ="createDatabase"
GDBNAME ="orcl"//数据库的名字
SID ="ORCL"//对应的实例名字
TEMPLATENAME ="General_Purpose.dbc"//建库用的模板文件
SYSPASSWORD ="oracle"//SYS管理员密码
SYSTEMPASSWORD ="oracle"//SYSTEM管理员密码
SYSMANPASSWORD= "oracle"
DBSNMPPASSWORD= "oracle"
DATAFILEDESTINATION =/opt/oracle/oradata//数据文件存放目录
RECOVERYAREADESTINATION=/opt/oracle/flash_recovery_area//恢复数据存放目录
CHARACTERSET ="ZHS16GBK"//字符集,重要!!!建库后一般不能更改,所以建库前要确定清楚。
TOTALMEMORY ="1638"//1638MB,物理内存2G*80%。
进入oracle安装目录的bin下,执行dbca命令
$dbca -silent -responseFile /opt/oracle/database/response/dbca.rsp
命令不生效看前面文档
完成
建库后进行实例进程检查:
$ps -ef | grep ora_ | grep -v grep
查看监听状态:
$ lsnrctl status
修改/opt/oracle/product/112010/db_1/bin/dbstart
$ vi /opt/oracle/product/112010/db_1/bin/dbstart
将ORACLE_HOME_LISTNER=$1修改为ORACLE_HOME_LISTNER=$ORACLE_HOME
修改/opt/oracle/product/112010/db_1/bin/dbshut
$ vi /opt/oracle/product/112010/db_1/bin/dbshut
将ORACLE_HOME_LISTNER=$1修改为ORACLE_HOME_LISTNER=$ORACLE_HOME
修改/etc/oratab文件
$vi /etc/oratab
将orcl:/data/oracle/product/11.2.0:N中最后的N改为Y,成为
orcl:/data/oracle/product/11.2.0:Y
输入命令dbshut和dbstart测试
$dbshut(关闭数据库命令,监听会跟着停止)
$dbstart(启动数据库,监听跟着启动)
关闭下查看监听状态
$lsnrctl status
启动数据库
$ dbstart
$lsnrctl status
$ps -ef |grep ora_ |grep -v grep
登录查看实例状态:
$ sqlplus / as sysdba
进入到数据库界面,如果进不去或者说进去了执行任何命令都报错那么恭喜你,在配置的时候SID配置不一致了,往前翻吧,把所有配置找一遍,也可以呀查已经生成配置文件的SID
cd $ORACLE_HOME/dbs
看到这几个没有,这几个就是系统认同的SID
你再看用户配置下的SID
$echo $ORACLE_HOME
$echo $ORACLE_SID
或者
$env |grep ORACLE
两种方式查看用户SID
是不是发现不一致,把用户配置改成系统认同的SID
$export ORACLE_SID=orcl (sid看自己设的什么)
完美
继续:
SQL> select status from v$instance;
SQL>quit(退出命令)
SQL>shutdown(关闭命令)
SQL>startup (启动命令)
到此结束,如果你前面将selinux关闭了
那你在这里打开它不然重启会出现问题,无法开机!!!
#vi /etc/selinux/config
再检查一遍listener.ora文件
/opt/oracle/product/112010/db_1/network/admin/listener.ora
确保localhost换成的主机ip
到此数据安装结束,接下来分享创建用户跟用户默认使用的表空间,临时表空间
su oracle
登录sys用户
sqlplus / as sysdba
创建表空间
可以先查一下表空间是否已存在,以及表空间命名格式和路径
select name from v$datafile;
文件命名格式 数据库名称_date.dbf 例 crjsj_date
CREATE TABLESPACE 表空间名称 LOGGING DATAFILE '/oradata/province/表空间名称.dbf'
SIZE 100M AUTOEXTEND ON NEXT 32M MAXSIZE 500M EXTENT MANAGEMENT LOCAL;
创建临时表空间
可以先查一下表空间是否已存在,以及表空间命名格式和路径
select name from v$tempfile;
create temporary tablespace 临时表空间名称tempfile '/oradata/province/临时表空间名称.dbf'
size 100m autoextend on next 32m maxsize 500m extent management local;
创建用户密码与上面创建的表空间和临时表空间形成映射关系
sql格式:
create user 用户名 identified by 密码 default tablespace 表空间 temporary tablespace 临时表空间;
create user crjsj identified by crjsj default tablespace crjsj_date temporary tablespace crjsj_date_temp;
为用户添加权限
初始建立的用户没有任何权限,不能执行任何数据库操作,因此必须为用户设置权限或者角色。被赋予了某个角色的用户将拥有该角色所具备的权限,常被用到的系统预定义角色:CONNECT、RESOURCE、DBA、EXP_FULL_DATABASE、IMP_FULL_DATABASE。其中,CONNECT、RESOURCE、DBA主要用于数据库管理,数据库管理员需要被授予这三个角色。一般的数据库开发人员,需要被授予CONNECT、RESOURCE角色即可。EXP_FULL_DATABASE、IMP_FULL_DATABASE角色分别用于操作数据库导出、导入相关的操作。为用户授予角色:
grant connect,resource to crjsj;
查询已创建的用户
select username from dba_users;
修改用户密码:
alter user crjsj identified by 123456;
有时用户会处于锁定状态,解锁用户:
alter user crjsj account unlock;
删除用户语句:
drop user 用户名 cascade;
--删除空的表空间,但是不包含物理文件
drop tablespace tablespace_name;
--删除非空表空间,但是不包含物理文件
drop tablespace tablespace_name including contents;
--删除空表空间,包含物理文件
drop tablespace tablespace_name including datafiles;
--删除非空表空间,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
--如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
结束