Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。
使用CentOS7.9模板机克隆一个新的名为Oracle虚拟机,要求如下
虚拟机配置基础环境,修改主机名,分配IP地址
[root@localhost ~]# hostnamectl set-hostname oracle
[root@oracle ~]# nmcli connection modify ens33 ipv4.method auto connection.autoconnect yes
[root@oracle ~]# nmcli connection up ens33
查看虚拟机交换空间大小,默认2G,所以仅查看即可
[root@oracle ~]# grep SwapTotal /proc/meminfo
SwapTotal: 2097148 kB
Oracle默认不支持CentOS,将系统标识改为redhat-7
[root@oracle ~]# echo 'redhat-7' > /etc/redhat-release #修改系统标识为redhat-7
[root@oracle ~]# cat /etc/redhat-release #查看验证
redhat-7
修改 /etc/sysctl.conf配置,调整系统内核参数以满足Oracle数据库的要求。
每个参数具体作用如下(了解):
[root@oracle ~]# vim /etc/sysctl.conf
...此处省略一万字...在最后一行下方追加即可
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 2147483648
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
net.core.rmem_default = 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576
刷新生效
[root@oracle ~]# sysctl -p
创建oracle用户和用户组
[root@oracle ~]# groupadd oinstall #创建安装oracle程序用户组
[root@oracle ~]# groupadd dba #创建DBA用户组
[root@oracle ~]# useradd -g dba -m oracle #创建用户oracle 并加入到dba组
[root@oracle ~]# usermod -a -G oinstall oracle #将用户oracle加入到oinstall组
[root@oracle ~]# id oracle #验证用户是否创建成功
将oracle用户密码设置为"oracle"
[root@oracle ~]# passwd oracle #为oracle用户设置密码为oracle
更改用户 oracle 的密码 。
新的 密码: #输入密码不显示
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
准备oracle安装目录
[root@oracle ~]# mkdir -p /data/oracle #创建oracle主目录
[root@oracle ~]# mkdir -p /data/inventory #创建oralce配置目录
[root@oracle ~]# mkdir -p /data/src #创建oracle压缩包解压目录
修改目录归属关系
[root@oracle ~]# chown -R oracle:oinstall /data/oracle
[root@oracle ~]# chown -R oracle:oinstall /data/inventory
[root@oracle ~]# chown -R oracle:oinstall /data/src
[root@oracle ~]# ls -l /data/ #查看Oracl目录的归属关系
总用量 0
drwxr-xr-x 2 oracle oinstall 6 8月 27 15:20 inventory
drwxr-xr-x 2 oracle oinstall 6 8月 27 15:20 oracle
drwxr-xr-x 2 oracle oinstall 6 8月 27 15:20 src
配置oracle用户shell权限
[root@oracle ~]# vim /etc/security/limits.conf
...第51行下方添加下方内容...其他任容不要动
52 oracle soft nproc 2047
53 oracle hard nproc 16384
54 oracle soft nofile 1024
55 oracle hard nofile 65536
...此处省略一万字...
修改用户变量
[root@oracle ~]# vim /home/oracle/.bashrc
...最后一行下方追加下方内容...其他地方不要动
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export ORACLE_UNQNAME=orcl
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=C
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
[root@oracle ~]# source /home/oracle/.bashrc #执行文件,使用配置生效
将学习资料中的oracle-install上传至oracle虚拟机的/root/
安装oracle依赖包
[root@oracle ~]# cd /root/oracle-install
[root@oracle oracle-install]# unzip rpms.zip #将依赖包解压到当前路径
[root@oracle ~]# cd rpms/ #切换至解压目录
[root@oracle rpms]# yum -y localinstall *.rpm #安装依赖包
验证ksh是否安装
[root@oracle rpms]# ls -l /bin/ksh*
lrwxrwxrwx 1 root root 21 Aug 27 15:53 /bin/ksh -> /etc/alternatives/ksh
-rwxr-xr-x 1 root root 1519032 Aug 11 2022 /bin/ksh93
注:如果安装不正确,执行ksh安装: rpm -ivh /root/oracle-install/rpms/ksh-20120801-144.el7_9.x86_64.rpm
解压缩Oracle安装包
[root@oracle ~]# cd /root/oracle-install/
[root@oracle oracle-install]# unzip linux.x64_11gR2_database_1of2.zip -d /data/src/
[root@oracle oracle-install]# unzip linux.x64_11gR2_database_2of2.zip -d /data/src/
[root@oracle oracle-install]# chown -R oracle:oinstall /data/src/
[root@oracle oracle-install]# ls -l /data/src/
total 0
drwxr-xr-x 8 oracle oinstall 128 Aug 21 2009 database
关闭SELinux(已经在安装模板机的时候关闭过了,如果没有关闭,请按照如下方式关闭)
[root@oracle ~]# vim /etc/selinux/config
...其他内容不要动,只修改第七行内容...
7 SELINUX=disabled
...此处省略一万字...
重启
[root@oracle ~]# reboot
配置文件修改比较复杂,因此直接使用教学环境中修改完毕的即可
从学习环境资料里将配置文件dbca.rsp、db_install.rsp、netca.rsp上传至oracle虚拟机的/data/src/database/response/
上传之后无需再次编辑,上传的文件就是编辑好的。配置文件修改部分说明如下
[root@oracle ~]# vim /data/src/database/response/db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY #安装类型
ORACLE_HOSTNAME=oracle.server #主机名称
UNIX_GROUP_NAME=oinstall #安装组
INVENTORY_LOCATION=/data/inventory #INVENTORY目录
SELECTED_LANGUAGES=en,zh_CN #选择语言
ORACLE_HOME=/data/oracle/product/11.2.0/db_1 #oracle_home
ORACLE_BASE=/data/oracle #oracle_base
oracle.install.db.InstallEdition=EE #oracle版本
oracle.install.db.DBA_GROUP=dba #dba用户组
oracle.install.db.OPER_GROUP=oinstall #oper用户组
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE #数据库类型
oracle.install.db.config.starterdb.globalDBName=orcl #globalDBName
oracle.install.db.config.starterdb.SID=orcl #SID
oracle.install.db.config.starterdb.characterSet=AL32UTF8 #默认数据库编码
oracle.install.db.config.starterdb.memoryLimit=800 #自动管理内存的最小内存(M)
oracle.install.db.config.starterdb.password.ALL=oracle #设定所有数据库用户使用同一个密码
DECLINE_SECURITY_UPDATES=true #设置安全更新
[root@oracle ~]# vim /data/src/database/response/netca.rsp
INSTALL_TYPE=""custom"" #安装的类型
LISTENER_NUMBER=1 #监听器数量
LISTENER_NAMES={"LISTENER"} #监听器的名称列表
LISTENER_PROTOCOLS={"TCP;1521"} #监听器使用的通讯协议列表
LISTENER_START=""LISTENER"" #监听器启动的名称
[root@oracle ~]# vim /data/src/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 =/data/oracle/oradata #数据文件存放目录
RECOVERYAREADESTINATION=/data/oracle/flash_recovery_area #恢复数据存放目录
CHARACTERSET ="AL32UTF8" #字符集
NATIONALCHARACTERSET= "AL16UTF16" #字符集
TOTALMEMORY ="1638" #1638MB,物理内存2G*80%
使用oracle用户进行安装,提示Successfully即可
[root@oracle ~]# su - oracle
[oracle@oracle ~]# /data/src/database/runInstaller -silent -responseFile \ /data/src/database/response/db_install.rsp -ignorePrereq

重新打开一个远程连接窗口,使用root登录
[root@oracle ~]# /data/inventory/orainstRoot.sh
[root@oracle ~]# /data/oracle/product/11.2.0/db_1/root.sh
返回使用oracle登录的窗口,按回车
安装监听
[oracle@oracle ~]# /data/oracle/product/11.2.0/db_1/bin/netca /silent /responseFile \ /data/src/database/response/netca.rsp
如果提示下面的错误,则使用下方方法解决,如果没有报错,则忽略

[root@oracle ~]# find / -name libclntsh.so.11.1 #使用root用户搜索

复制备份文件到上面报错的文件
[root@oracle ~]# cp /data/oracle/product/11.2.0/db_1/inventory/backup/2023-05-13_06-04-35PM/Scripts/ext/lib/libclntsh.so.11.1 \ /data/oracle/product/11.2.0/db_1/lib/libclntsh.so.11.1
安装数据库实例
[oracle@oracle ~]# /data/oracle/product/11.2.0/db_1/bin/dbca -silent -responseFile \ /data/src/database/response/dbca.rsp
查看是否安装成功
[oracle@oracle ~]$ ps -ef | grep ora_ | grep -v grep
登录数据库测试
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> select instance_name, status from v$instance; #查看实例状态
INSTANCE_NAME STATUS
---------------- ------------
orcl OPEN
SQL> exit #退出
修改启动配置
[oracle@oracle ~]$ vim /data/oracle/product/11.2.0/db_1/bin/dbstart
#修改第80行,指定监听器安装目录
80 ORACLE_HOME_LISTNER=/data/oracle/product/11.2.0/db_1
修改关闭配置
[oracle@oracle ~]$ vim /data/oracle/product/11.2.0/db_1/bin/dbshut
#修改第50行,指定监听器安装目录
50 ORACLE_HOME_LISTNER=/data/oracle/product/11.2.0/db_1
修改/etc/oratab,将文件最后一行末尾的N改为Y
[oracle@oracle ~]$ vim /etc/oratab
#最后一行末尾改成Y
orcl:/data/oracle/product/11.2.0/db_1:Y
用root用户设置开机启动,先 exit退出oracle用户
[oracle@oracle ~]$ exit #退出oracle用户
[root@oracle ~]# vim /etc/rc.d/rc.local
# 文件最后一行后追加
su oracle -lc "/data/oracle/product/11.2.0/db_1/bin/lsnrctl start"
su oracle -lc "/data/oracle/product/11.2.0/db_1/bin/dbstart"
[root@oracle ~]# chmod +x /etc/rc.d/rc.local #赋予执行权限
配置listener.ora
[root@oracle ~]# vim /data/oracle/product/11.2.0/db_1/network/admin/listener.ora
...
#第9行下方添加这些配置
10 SID_LIST_LISTENER =
11 (SID_LIST =
12 (SID_DESC =
13 (GLOBAL_DBNAME = ORCL)
14 (SID_NAME = orcl)
15 (ORACLE_HOME = /data/oracle/product/11.2.0/db_1)
16 )
17 )
...
重启监听器(使用oracle用户执行)
[root@oracle ~]# su - oracle
[oracle@oracle ~]$ lsnrctl stop
[oracle@oracle ~]$ lsnrctl start
使用oracle用户登录数据库,创建用户,用于登录数据库
[oracle@oracle ~]$ sqlplus / as sysdba
SQL> create user orcl identified by orcl; #创建用户orcl,密码orcl
SQL> grant connect,resource,dba to orcl; #授权
SQL> grant create session to orcl; #授权
安装Dbeaver,用于连接Oracle数据库(安装包在教学环境中)

选择数据库类型为Oracle






| MySQL | Oracle |
|---|---|
| MySQL | 实例 |
| Database、Schema | 用户、Schema |
| 表空间 | |
| 数据文件 | 数据文件 |
| Segment |
在Dbeaver中执行SQL语句
CREATE tablespace orcldata
datafile '/data/oracle/oradata/orcl/orcldata.dbf'
SIZE 50m
AUTOEXTEND ON
NEXT 20m
segment space management auto
在服务器上查看文件列表
[oracle@oracle ~]$ ls -lh /data/oracle/oradata/orcl/
total 1.5G
-rw-r----- 1 oracle dba 9.3M Aug 27 19:15 control01.ctl
-rw-r----- 1 oracle dba 51M Aug 27 19:13 orcldata.dbf
-rw-r----- 1 oracle dba 51M Aug 27 19:14 redo01.log
-rw-r----- 1 oracle dba 51M Aug 27 18:04 redo02.log
-rw-r----- 1 oracle dba 51M Aug 27 18:04 redo03.log
-rw-r----- 1 oracle dba 481M Aug 27 19:09 sysaux01.dbf
-rw-r----- 1 oracle dba 671M Aug 27 19:09 system01.dbf
-rw-r----- 1 oracle dba 30M Aug 27 19:04 temp01.dbf
-rw-r----- 1 oracle dba 76M Aug 27 19:09 undotbs01.dbf
-rw-r----- 1 oracle dba 5.1M Aug 27 18:04 users01.dbf
增加表空间
alter tablespace orcldata
add datafile '/data/oracle/oradata/orcl/orcldata2.dbf'
size 30m
autoextend off
在服务器上查看文件列表
[oracle@oracle ~]$ ls -lh /data/oracle/oradata/orcl/
在Dbeaver中执行SQL语句
select tablespace_name,block_size,status,contents,logging from dba_tablespaces
查看表空间数据文件
select file_id,file_name,tablespace_name,status,bytes from dba_data_files
临时表空间和undo表空间
create temporary tablespace temp1
tempfile '/data/oracle/oradata/orcl/temp1.dbf'
size 5m
autoextend off
create undo tablespace orcl_undo
datafile '/data/oracle/oradata/orcl/orcl_undo.dbf'
size 20m
autoextend off
删除表空间
DROP tablespace orcldata
DROP tablespace orcldata INCLUDING contents AND datafiles
查询表空间的使用率 以下两个复杂的查询都可以得到表空间使用率数据
select upper(f.tablespace_name) "TS-name",
d.tot_grootte_mb "TS-bytes(m)",
d.tot_grootte_mb - f.total_bytes "TS-used (m)",
f.total_bytes "TS-free(m)",
to_char(round((d.tot_grootte_mb - f.total_bytes) / d.tot_grootte_mb * 100,2),'990.99') "TS-per"
from (select tablespace_name,
round(sum(bytes) / (1024 * 1024), 2) total_bytes,
round(max(bytes) / (1024 * 1024), 2) max_bytes
from sys.dba_free_space
group by tablespace_name) f,
(select dd.tablespace_name,
round(sum(dd.bytes) / (1024 * 1024), 2) tot_grootte_mb
from sys.dba_data_files dd
group by dd.tablespace_name) d
where d.tablespace_name = f.tablespace_name
order by 5 desc
CREATE tablespace neworcldata
datafile '/data/oracle/oradata/orcl/orcldatanew.dbf'
SIZE 50m
AUTOEXTEND ON
NEXT 20m
segment space management auto
create temporary tablespace temp2
tempfile '/data/oracle/oradata/orcl/temp2.dbf'
size 5m
autoextend off
create user zhangsan
identified by ora1234
default tablespace neworcldata
temporary tablespace temp2

alter user zhangsan identified by zhangsan1234
授予用户 connect,dba 角色
grant CONNECT,dba to zhangsan;
收回用户DBA角色的权限
revoke dba from zhangsan;
授予用户 能查询SCOTT 下的 EMP 表的权限
grant select on scott.emp to zhangsan;
授予用户能查询所有表的权限
grant select any table to zhangsan;
grant update any table to zhangsan;
grant insert any table to zhangsan;
grant DELETE any table to zhangsan;
grant alter any table to zhangsan;
grant CREATE any table to zhangsan;
grant DROP any table to zhangsan;
select username,created from dba_users;
Oracle Data Pump是Oracle提供的一种高性能,可扩展的数据导入/导出工具。它是一种逻辑备份和恢复数据库的方法,也是逻辑备份中的一种常用方法。
Oracle Data Pump提供了两个主要的工具:expdp和impdp。expdp用于将数据库对象和数据导出为一个或多个数据文件,impdp用于将数据文件导入到数据库中。
添加数据
#新建表并插入数据
CREATE TABLE tb1(id int, name varchar2(20))
CREATE INDEX idx_name ON tb1(name)
INSERT INTO tb1 values(1, 'A')
备份数据
# 查询数据备份目录
select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------ ---------------------- -------------------------------------------
SYS ORACLE_OCM_CONFIG_DIR /data/oracle/product/11.2.0/db_1/ccr/state
SYS DATA_PUMP_DIR /data/oracle/admin/orcl/dpdump/
SYS XMLDIR /ade/b/2125410156/oracle/rdbms/xml
后续使用data_pump_dir

备份:
[oracle@oracle ~]$ expdp orcl/orcl@orcl \
schemas=orcl directory=DATA_PUMP_DIR \
dumpfile=backup.dmp include=table,index
expdp - 数据泵实用程序的命令,用于导出数据库对象和数据
orcl/orcl@orcl - 数据库的用户名和密码。orcl是用户名,orcl是密码,@orcl是数据库实例名
schemas=orcl - 要导出的数据库模式,即用户
directory=DATA_PUMP_DIR - 数据库中已经创建的一个目录对象,用于指定导出文件的保存路径
dumpfile=backup.dmp - 导出的备份文件名为backup.dmp
include=table,index - 导出时包含的对象类型,这里包括表和索引。只会导出包含指定对象类型的数据和结构
查看备份文件
[oracle@oracle ~]$ ls -l /data/oracle/admin/orcl/dpdump/
模拟数据丢失
drop table tb1;
恢复数据
impdp orcl/orcl@orcl \
directory=DATA_PUMP_DIR dumpfile=backup.dmp \
include=table,index