一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Oracle数据库的使用及说明介绍Linux实用指南

时间:2026-09-01 20:34:01 编辑:袖梨 来源:一聚教程网

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Oracle数据库的采用及说明介绍Linux”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

一、Oracle数据库介绍

结合项目来看,Oracle 数据库是全球最主流的企业级关系型数据库管理系统(RDBMS)之一,由美国甲骨文(Oracle)公司开发,以稳定性强、功能全面、兼容高同时发和复杂业务场景而闻名。

Oracle 数据库被研发出来的初衷是开发一种关系型数据库管理系统在这个场景下,(RDBMS),以提供高效、可靠的数据存储和检索能力,同时确保数据的完整性和安全性。

系型数据库管理系统(RDBMS):在这个场景下,用 “表格(行和列)” 来组织数据,同时用 “关系”(如主键、外键)关联不同表格的数据库管理软件。有关联的表A和表B同时改变,适用大多数生活场景,比如扣款和到账同时成功或者失败。

特点:

(1)高可用性:兼容RAC实时应用集群(兼容分布式数据处理)

(2)业务与安全能力强大

(3)多场景适配:兼具 OLTP(在线事务处理)和 OLAP(在线分析处理)能力

(4)跨平台兼容性:可运行于 Windows、Linux、Unix 等多种操作系统,兼容 x86、ARM 等不同架构服务器;同时兼容 SQL 标准,能与 Java、Python 等主流开发语言及各类企业级应用无缝集成。

二、Oracle的轻松架构

Oracle的特别之处

在这个场景下,在Oracle的典型架构里,一个实例(Instance)通常挂载同时管理一个数据库(Database)。对比之下MySQL是一个实例管理多个数据库,更接近数据仓库管理的感觉。

什么是实例

实际处理时,能够轻松的将实例理解为进程加涉及的其他的资源(例如内存资源,磁盘空间),在该运行环境内只允许有一个数据库。是Oracle数据库运行的载体。数据库指的就是磁盘上的物理文件的集合(例如数据文件,日志文件,控制文件等组合采用的实际文件),是数据的实际存储载体。

前面提到过的RAC集群有一点不同,这里是多个实例共享一个数据库。

Oracle只能有一个数据库吗?

从实现思路看,实际上是默认1个数据库,但是能够多实例对应多个独立的Oracle数据库。只是它新建多个数据库不像MySQL那样轻松。

Oracle的端口号:1521

MySQL和Oracle的区别:

尝试对比MySQL和Oracle来学习Oracle的特别之处。

(1)Oracle新建数据库不同于MySQL新建数据库

在Oracle里,新建一个新的、独立的数据库环境,这个过程称为 “数据库新建(Database Creation)” 在这个场景下,。会为它新建一个专属的 “实例”(独立的进程和内存空间,比如第二个实例叫 ORCL2)。而 MySQL 新建数据库,只是在现有实例的目录下新建一个 “文件夹”,不需额外分配进程和内存。

结合项目来看,所以感觉上就像MySQL新建不同数据库就是在一张A4纸上划了一根线分出一块来,就新建了一个数据库。就是一个实例对应N个逻辑数据库,Oracle是一张纸就是一个数据库,新建新的数据库需新的纸,就是一个物理数据库对应1个实例。这样分配独立的资源,在安全性和隔离性上来看,Oracle的会更强一些。当然这个例子同时不能代表在这个场景下,MySQL的存储上限就比Oracle的小。MySQL的单张纸也能够很大,Oracle的多张纸也能够很小,两者的存储上限和性能差异主要取决于涉及的目标。

三、Oracle如何解决数据库的安全机制问题?

落到代码里,虽然Oracle一个实例对应一个数据库,但是Oracle会借助逻辑隔离和精细化权限控制来保证数据的安全。

同样采用MySQL和Oracle的例子来举例。

1、MySQL的权限控制逻辑

授权结构:数据库用户--->数据库--->数据库下的表

落到代码里,数据库用户只能够采用被授权过的数据库和数据库下的表。比如:fruit数据库下的apple表对A用户授权,那么A用户就能够采用fruit数据库下的apple表,其他的表它便不可采用。如果fruit数据库授权A用户采用库下的所有表,那么A用户就能够全部采用。(grant all on fruit.* to A@'loaclhost' indentified by '123')。

MySQL中不同数据库之间的权限隔离,不同数据库的权限设置不相互影响。

2、Oracle的权限控制逻辑:单数据库多租户

(1)授权结构

借助表空间(Tablespace)用户 Schema 实际处理时,实现逻辑隔离,效果类似 MySQL 的 “多数据库”,但更灵活。Oracle的权限体系极其精细,避免单个用户删除库的风险。

  • 表空间(物理隔离)在这个场景下,数据库的物理文件被划分为多个表空间,不同用户的数据可存储在不同表空间中(如财务数据在FIN_TBS,人事数据在HR_TBS)。即使某个表空间损坏,其他表空间的数据不受影响。
  • 用户 Schema(逻辑隔离)从实现思路看,每个用户默认拥有一个同名的 “Schema(模式)”,用户新建的表、视图等对象默认属于自己的 Schema。

比如:用户USER_A新建的表实际是USER_A.TABLE1。用户USER_B新建的表实际是USER_B.TABLE1两者名称相同但完全独立,互不干扰(类似同一文件夹下不同用户的文件)。

(2)Oracle的权限设置

权限分级

普通用户默认只有自己 Schema 的操作权限CREATE TABLEINSERT等),无法访问其他用户的对象,更不能删除整个数据库。只有SYSDBA等超级权限角色,才能执行DROP DATABASE等危险操作,而这类权限会严格限制给极少数管理员。

用户/角色用户等级用户权限
sysdba最高级别的管理员账户对数据库的完全控制权
sysoper管理员账户权限比sysdba低一些,可启动、关闭数据库,但不能新建数据库。
SYS数据库初始就存在的管理员用户天生拥有 sysdba 权限
普通用户普通用户需借助被授权之后才能够对数据库进行操作

注释1:sysdba和sysper是Oracle数据库内置的两种最高级别的系统权限集合在这个场景下,,也被称为 “特权身份”。就像Linux的超级管理员root一样。普通用户无法自动获得这两种身份,必须由已拥有 sysdba 权限的用户(如 SYS)手动授予。

采用特权登录:获得身份后,登录时需明确指定身份,否则默认以普通用户权限登录。

注释2:虽然表格中写的sysdba sysoper是用户/角色。但是实际上这两个是”特权身份令牌“。它们是 Oracle 底层权限机制的一部分,属于 “特权集合” 而非 “用户账号”。数据库安装完成后,这两种特权身份就已存在,但默认仅赋予 SYS 用户。

落到代码里,sysdba和sysoper已经作为系统基础组件存在,等待被分配给合适的用户(通常是 SYS,也可分配给其他用户)。

理解这一步时,数据库安装完成 → 自动新建SYS用户 → SYS默认拥有sysdba特权 ↓ sysdba和sysoper作为内置特权机制,从安装完成就存在于系统中

操作审计与日志

结合项目来看,所有关键操作(如删除表、修改权限)会被记录到审计日志中,可追溯操作人。同时,Oracle 的闪回技术(Flashback)能更快恢复误删除的数据。

数据备份与恢复机制

在这个场景下,兼容在线热备份、增量备份等,即使发生极端情况(如误删库),也能借助备份文件恢复数据,配合归档日志可实现 “任意时间点恢复”。

(3)MySQL和Oracle的对比

这里采用MySQL来做对比,便于理解。

安全性能上

在这个场景下,MySQL 的 “一个实例多个数据库” 看似更隔离,但本质是逻辑文件夹的隔离,权限控制相对轻松。

普通用户可能被赋予DROP DATABASE权限,风险更高。缺乏表空间级别的物理隔离,某数据库文件损坏可能影响整个实例。而 Oracle 的设计思路是借助精细化权限 + 逻辑隔离,在单数据库内实现比多数据库更强的安全性,同时避免多数据库带来的资源浪费和管理复杂度。

适用场景上

从实现思路看,Oracle面向企业级市场(如银彳、电信),解决 “大规模数据 + 高可靠性” 需求。

MySQL面向个人和中小型项目,主打 “轻量、开源、免费”。

四、Oracle的安装设置

1、Oracle版本

Oracle21版本,下载其他版本差别不大

2、安装环境

Centos7操作系统(Linux)

内存4G,磁盘空间20G

这里的内存给大一点,后面初始化的时候内存大一些可能时间会短一点。

[root@localhost ~]# hostnamectl set-hostname oracle
[root@localhost ~]# bash

错点注意:从实现思路看,这里最好关闭一下防火墙和SELinux,否则后面初始化Oracle数据库的时候可能会卡住。会出现权限拦截的问题。

[root@oracle ~]# systemctl stop firewalld.service 
[root@oracle ~]# getenforce
Enforcing
[root@oracle ~]# setenforce 0
[root@oracle ~]#

3、Oracle安装

安装预安装包

从实现思路看,从 Oracle 官方 YUM 仓库下载同时安装 Oracle Database 21c 的预安装包(oracle-database-preinstall-21c)。

注意:如果是采用虚拟机,需虚拟机能够联网

yum install -y  https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm

(链接已移除)

补充:预安装包的作用:

具体来说,oracle-database-preinstall-21c 是 Oracle 为简化数据库安装而提供的专用预设置包,它的主要功能包括:

  1. 自动新建 oracle 用户和相关用户组(如 dbaoinstall 等)
  2. 设置系统内核参数(如共享内存、文件描述符限制等)以满足 Oracle 数据库运行要求
  3. 安装数据库依赖的基础库(如 libaioglibc 等)
  4. 设置系统安全策略和资源限制,确保 Oracle 服务正常运行

安装Oracle数据库主程序

官方网址:(链接已移除)

下载之后传输到Linux中,要先安装预安装包否则可能报错

方式一:自定义源仓库

[root@oracle ~]yum -y install createrepo-0.9.9-28.el7.noarch

[root@oracle ~]createrepo /oracle/

[root@oracle ~]vim /etc/yum.repos.d/oracle.repo

[name]
name=oracle
baseurl=file:///oracle/
enabled=1
gpgcheck=0

[root@oracle ~]yum repolist

[root@oracle ~]yum -y install /oracle/oracle-database-xe-21c-1.0-1.ol7

轻松的yum仓库安装注意事项:

自定义源仓库之后:yum 会先查询本地缓存的 “仓库包索引”,借助你输入的 “包名”(如 percona-xtrabackup-24-2.4.7-1.el7.x86_64)匹配索引中对应的包信息(包括包的完整名称、版本、依赖等)。匹配成功后,yum 会自动从仓库下载该包,同时解决依赖关系(比如自动安装 perl(DBD::mysql)rsync 等),因此无需手动指定 .rpm 后缀。

若不是自定义源仓库:就需输入完整的rpm包名字带后缀,比如这个【yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm】 本地已下载的.rpm 文件(非仓库中的包),yum 无法借助 “包名” 查询仓库索引(因为包不在仓库里),必须借助你提供的 “完整文件名 + 路径”(如 /root/percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm)定位到本地的.rpm 文件。 .rpm 后缀是 yum 识别 “本地 rpm 文件” 的关键标志 —— 如果不带后缀,yum 会默认去仓库中查找该 “包名”,但仓库中可能没有(或版本不匹配),最后导致安装失败

方式二:rpm本地安装

rpm -ivh oracle-database-xe-21c-1.0-1.ol7.x86_64.rpm

初始化Oracle数据库

在这一步的时候有些步骤会看起来像是卡住,请耐心等待,这是正常现象。

  • 若服务器是普通虚拟机(2 核 4G 内存),通常需 5-15 分钟。
  • 落到代码里,若服务器设置较低(1 核 2G 内存),可能需 20-30 分钟,期间终端无输出属于正常现象。
[root@oracle ~]# ls /etc/init.d/ | grep oracle
[root@oracle ~]# ls /etc/init.d/oracle-xe-21c

[root@oracle ~]# /etc/init.d/oracle-xe-21c configure

下面是详细的初始化流程每一步的解析:

Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts: #设置密码(这里设置的是123321Dyq)
Confirm the password: ##确认密码
Configuring Oracle Listener. ##自动配置 Oracle Listener(默认端口 1521)
Listener configuration succeeded. ##表示设置成功
Configuring Oracle Database XE.
Enter SYS user password:
*********
Enter SYSTEM user password:
**********
Enter PDBADMIN User Password:
***********
Prepare for db operation ###数据库实例与结构创建阶段
7% complete
Copying database files ###复制数据库文件:将 Oracle 的基础模板文件(如数据文件、控制文件、日志文件)复制到指定目录默认/opt/oracle/oradata/XE。是数据存储的基础
29% complete
Creating and starting Oracle instance ###创建并启动 Oracle 实例,为后续的数据存储做准备
30% complete
33% complete
37% complete
40% complete
43% complete
Completing Database Creation ###完成数据库创建
47% complete
50% complete
Creating Pluggable Databases ###创建可插拔数据库
54% complete
71% complete
Executing Post Configuration Actions ##执行后续配置操作
93% complete
Running Custom Scripts
100% complete
Database creation complete. For details check the logfiles at:
 /opt/oracle/cfgtoollogs/dbca/XE.
Database Information:
Global Database Name:XE ### 全局数据库名
System Identifier(SID):XE ##系统标识符(SID),实例的唯一标识
Look at the log file "/opt/oracle/cfgtoollogs/dbca/XE/XE.log" for further details.

Connect to Oracle Database using one of the connect strings:
     Pluggable database: oracle/XEPDB1
     Multitenant container database: oracle
Use https://localhost:5500/em to access Oracle Enterprise Manager for Oracle Database XE

注释:密码的作用范围(初始化日志中也能够看出来)

作用:该密码会同时应用来三个核心账户,这三个账户是后续管理和采用数据库的关键:

  • SYS:数据库最高权限账户,负责管理数据库结构(如新建表空间、用户)和系统级设置。
  • SYSTEM:数据库管理员账户,用来日常管理(如新建用户、授权),权限略低于SYS
  • PDBADMIN:可插拔数据库(PDB)的管理员账户,负责管理后续新建的XEPDB1插件数据库。

设置环境变量

在文件末尾添加以下内容(根据实际安装路径调整,默认路径如下所示)

[root@oracle ~]# vim /home/oracle/.bash_profile   ##单个用户的配置文件

核心配置:

 export ORACLE_HOME=/opt/oracle/product/21c/dbhomeXE #指定 Oracle 数据库软件的安装目录(主目录)。Oracle 的所有工具和服务都需要通过这个路径找到对应的程序才能运行。

主目录的位置:其实在前面的初始化最后提示你日志路径,便知道了主目录的位置在哪里了


export ORACLE_SID=XE ##指定当前要连接的数据库实例名,SID = System Identifier,初始化日志最后表明是XE。

export PATH=$ORACLE_HOME/bin:$PATH #将 Oracle 的命令目录添加到系统的可执行路径中。


额外配置(可选)

export ORACLE_BASE=path #定义 Oracle 的「基础目录」(根目录)
export ROACLE_PID=oral12 #定义数据库进程的标识,这个变量不是必须的,默认情况下 Oracle 会自动生成进程标识,只有多实例场景下才需要手动配置。
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib #指定程序运行时依赖的「动态链接库(.so 文件)」路径。
export LANG="zh_CN.UTF-8" #设置 Linux 系统的默认语言和字符集。LANG 是系统级变量,控制终端、日志等系统输出的语言编码。设置为 zh_CN.UTF-8 表示系统默认使用中文显示,且支持 UTF-8 编码(避免中文乱码)。
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" #设置 Oracle 客户端与数据库交互的「语言和字符集」。
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss' #统一日期数据的「显示格式」。


使设置生效

##注意:使用root用户编辑注意查看文件所有者是否是Oracle

[root@oracle ~]# ll -d /home/oracle/.bash_profile
[root@oracle ~]#source ~/.bash_profile

手动新建 systemd 服务文件

[root@oracle ~]# ls /usr/lib/systemd/system  | grep oracle #如果有就可以省略这个步骤
[root@oracle ~]# vim /usr/lib/systemd/system/oracle-xe-21c.service
[Unit]
Description=Oracle Database 21c Express Edition
After=network.target

[Service]
Type=forking
User=root
Group=root
ExecStart=/etc/init.d/oracle-xe-21c start
ExecStop=/etc/init.d/oracle-xe-21c stop
ExecReload=/etc/init.d/oracle-xe-21c restart
RemainAfterExit=yes


[Install]
WantedBy=multi-user.target

开启数据库服务

[root@oracle ~]#systemctl daemon-reload
[root@oracle ~]# systemctl enable oracle-xe-21c.service --now
[root@oracle ~]# systemctl status oracle-xe-21c.service #状态是 active (exited)表示成功

验证是否初始化成功

[root@oracle ~]# su - oracle
[root@oracle ~]# sqlplus / as sysdba #这里可能需要卡一下,等待一会即可
SQL*Plus: Release 21.0.0.0.0 - Production on Thu Oct 16 02:57:17 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle. All rights reserved.


Connected to:
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

SQL> ##结果是这样表示成功

命令解析:
Oracle 自带的命令行客户端工具,用于连接数据库并执行 SQL 语句或管理命令。
/:表示 “使用操作系统认证”(而非密码认证)
as sysdba:表示以 SYSDBA 身份登录(Oracle 中最高权限角色)。

错点注意:必须采用oracle用户

sqlplus / as sysdba 依赖「操作系统认证」,而这种认证必须以 oracle 用户身份执行root 用户无法借助这种方式登录(即使知道密码也不行)。(或者在前面修改设置文件的时候切换用户同样能够)

如果是不oracle用户则会出现以下错误提示:

[root@oracle ~]# sqlplus / as sysdba 
SQL*Plus: Release 21.0.0.0.0 - Production on Thu Oct 16 02:55:23 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle. All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name:

管理Oracle服务

# 启动服务
systemctl start oracle-xe-21c

# 停止服务
systemctl stop oracle-xe-21c

# 查看服务状态
systemctl status oracle-xe-21c

安装完成

操作注意事项SYSDBA 权限极高,操作需谨慎(如误执行 drop database 会直接删除数据库)。

仅能在数据库服务器本地执行(远程连接通常需密码认证,除非特殊设置)。

五、Oracle的常用语法

Oracle数据库不能直接按删除键删除命令,按住ctrl+删除键即可。

Oracle的操作技巧(命令行)

【1】Oracle清屏命令

SQL> host clear; #滚轮上划可以看见历史命令

【2】自定义方向键

在Linux里,Oracle不像MySQL一样兼容上行历史命令键。

解决方法:采用 rlwrap 工具增强 SQL*Plus 功能

(1)安装rlwrap工具

方式一:源安装(root用户)

rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
yum install rlwrap

方式二:如果一不成功就是用官方Git仓库拉取rpm包源码编译安装

[root@oracle ~]# cd /tmp
[root@oracle tmp]# curl -O https://github.com/hanslub42/rlwrap/releases/download/v0.46.1/rlwrap-0.46.1.tar.gz
[root@oracle tmp]# ls /tmp/
CVU_21.0.0.0.0_oracle hsperfdata_oracle rlwrap-0.46.1.tar.gz vmware-root

方法三:二不行就采用这个

[root@oracle ~]# cd /tmp
[root@oracle tmp]# wget https://github.com/hanslub42/rlwrap/releases/download/v0.47/rlwrap-0.47.tar.gz
[root@oracle tmp]# ll -dh rlwrap-0.47.tar.gz
(2)源码编译安装
[root@oracle tmp]# yum -y install gcc make
[root@oracle tmp]yum -y install readline-devel ##这个包不安装可能会报错
[root@oracle tmp]# tar -xf rlwrap-0.47.tar.gz
[root@oracle tmp]# cd rlwrap-0.47/
[root@oracle rlwrap-0.47]#./configure --without-libptytty
[root@oracle rlwrap-0.47]# make && make install
[root@oracle rlwrap-0.47]# rlwrap --version
rlwrap 0.47

##如果显示版本信息就表示安装成功

(3)编辑设置文件和加载设置

最后一行插入别名:

[root@oracle rlwrap-0.47]# vim /home/oracle/.bash_profile
alias sqlplus='rlwrap sqlplus'
[root@oracle rlwrap-0.47]# source /home/oracle/.bash_profile #使配置生效

(4)重新进入Oracle

此时按 键就能够正常调取历史命令了, 键能够向前切换,解决了乱码问题。而且采用删除键也能够正常采用了,不会出现乱码问题了。

sqlplus / as sysdba

注意:从实现思路看,若你是再其他终端执行的source命令,就再执行source命令的终端测试才能够成功。只对执行 source 命令的当前终端生效,对之前早就开启的其他终端完全不生效。source不会开启自子进程。

【3】Oracle自带的历史命令

若不想那么麻烦,就是查看历史命令也是相同的。

SQL> set history on #开启历史命令
SQL> hist #查看历史命令

Oracle常用查询连接命令

  • dual 是 Oracle 自带的一个特殊 “单行单列” 表(系统表),通常用来轻松的查询测试或计算。
  • 执行后会得到一行结果 DUMMY(值为 X),表示数据库能够正常响应 SQL 命令。
SQL> select * from dual;
D
-
X

查看 Oracle 数据库的参数设置

SQL> show parameter name;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cdb_cluster_name string
cell_offloadgroup_name string
db_file_name_convert string
db_name string XE
db_unique_name string XE
global_names boolean FALSE
instance_name string XE
lock_name_space string
log_file_name_convert string
pdb_file_name_convert string
processor_group_name string

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string XE

查看当前登录用户

SELECT user FROM dual;

新建用户

CREATE USER 用户名 
IDENTIFIED BY 密码    #指定用户密码(需符合 Oracle 密码规则)
DEFAULT TABLESPACE 表空间名   #指定用户默认存储数据的表空间(如 USERS)
TEMPORARY TABLESPACE 临时表空间名   #指定用户的临时表空间(通常为 TEMP)
QUOTA 空间大小 ON 表空间名; #限制用户在表空间上使用的空间(UNLIMITED 表示无限制)
 

切换用户

从实现思路看,切换前需知道目标用户的 正确密码,若密码包含特殊字符(如 @#),需用双引号包裹,比如:CONNECT myuser/"My@Pass123";

CONNECT 目标用户名/密码;
-- 或带数据库实例(若需指定)
CONNECT 目标用户名/密码@数据库实例名;

案例:新建一个名为 myuser 的用户,密码为 MyPass123,默认表空间为 USERS

CREATE USER myuser
IDENTIFIED BY MyPass123
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;

注意:新建用户后,需授予基本权限才能操作(如登录权限)

GRANT CREATE SESSION TO myuser; -- 允许登录
GRANT CREATE TABLE TO myuser; -- 允许创建表

删除用户

仅删除用户(若用户有对象则会失败)
DROP USER 用户名;

删除用户及其所有对象(级联删除)
DROP USER 用户名 CASCADE;

删除用户及其所有的对象
DROP USER testuser CASCADE;

新建表,默认属于当前用户

-- 语法:CREATE TABLE 表名 (字段名 类型 [约束])
CREATE TABLE student (
    id NUMBER(10) PRIMARY KEY, -- 数字类型,长度10,主键
    name VARCHAR2(50) NOT NULL, -- 字符串类型(Oracle 常用VARCHAR2)
    age NUMBER(3),
    birthday DATE
);

注释:字符串类型常用 VARCHAR2 而非 VARCHAR(Oracle 中 VARCHAR 是兼容型,建议用 VARCHAR2)。

表的字段类型:和MySQL相差无几

表中插入值

INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);

案例:假设存在表 employees(包含 idnamesalaryhire_date 列),插入一条记录

INSERT INTO employees (id, name, salary, hire_date)
VALUES (1001, '张三', 5000, TO_DATE('2023-01-15', 'YYYY-MM-DD'));

删除表

GRANT CREATE SESSION TO myuser; -- 允许登录
GRANT CREATE TABLE TO myuser; -- 允许创建表


普通 DROP TABLE:表会被放入 Oracle 回收站(RECYCLEBIN),必要时可通过 FLASHBACK TABLE 表名 TO BEFORE DROP 恢复。
加 PURGE 选项:表会被直接删除,不进入回收站,适合确认无需恢复的场景。

查看表

-- 查看当前用户所有表(仅表名)
SELECT table_name FROM user_tables;

查看表结构

-- 查看表结构(类似 MySQL 的 DESC)
DESCRIBE student; -- 或简写 DESC student;

查看其他用户的表

-- 查看所有用户的表(需管理员权限)
SELECT owner, table_name FROM all_tables;
-- 查看指定用户(如 SCOTT)的表
SELECT table_name FROM all_tables WHERE owner = 'SCOTT'; -- 注意用户名大写

查看数据库已有用户

#查看所有用户(包括系统用户和普通用户)
SELECT username FROM dba_users;

#查看当前用户可访问的用户
SELECT username FROM all_users;

#查看用户的详细信息(如创建时间、状态等) 
SELECT username, created, account_status
FROM dba_users
ORDER BY created DESC;

查看表的完整信息

-- 查看表的创建语句(需有对应权限)
SELECT dbms_metadata.get_ddl('TABLE', 'STUDENT') FROM dual; -- 表名大写

查看当前的Oracle数据库

方法1:查询系统视图(推荐)
SELECT sys_context('userenv', 'db_name') AS current_database FROM dual;

方法2:查询实例名(SID)
SELECT instance_name FROM v$instance; -- 需有对应权限

Oracle的表内容查询语句总览

1、基本查询
SELECT * FROM 表名;  --查询表中所有行和所有列
SELECT 列1, 列2, 列3 FROM 表名;  -- 只查询需要的列,多个列用逗号分隔

2、条件查询
SELECT 列名 FROM 表名 WHERE 条件;  -- 按条件筛选行

常用条件运算符:=(等于)、>(大于)、<(小于)、>=、<=、!=/<>(不等于)、BETWEEN...AND(范围)、IN(包含)、LIKE(模糊匹配)、IS NULL(空值)


3、排序查询(ORDER BY)
SELECT 列名 FROM 表名 ORDER BY 列1 [ASC/DESC], 列2 [ASC/DESC];  -- 按指定列排序,默认升序(ASC),降序需加 DESC


4、去重查询
SELECT DISTINCT 列名 FROM 表名;  -- 去除结SELECT 分组列, 聚合函数 FROM 表名 GROUP BY 分组列 [HAVING 聚合条件];果中重复的行(所有列都相同才视为重复)

5、限制查询
SELECT * FROM 表名 WHERE ROWNUM <= N; -- 查询前N行数据


6、聚合查询(GROUP BY + 聚合函数)
SELECT 分组列, 聚合函数 FROM 表名 GROUP BY 分组列 [HAVING 聚合条件];


7、多表连接查询
-- 内连接(只显示匹配的记录)
SELECT a.列, b.列
FROM 表A a
INNER JOIN 表B b ON a.关联字段 = b.关联字段;

-- 左连接(显示表A所有记录,表B无匹配则为NULL)
SELECT a.列, b.列
FROM 表A a
LEFT JOIN 表B b ON a.关联字段 = b.关联字段;



补充内容:国内外的数据库版本

国外版本介绍
MySQL开源免费,生态完善,是国内互联网公司最广泛采用的数据库之一

PostgreSQL

功能强大,兼容复杂查询,在、正府场景中常用

MongoDB

文档型数据库,适合JSON数据存储
Oracle从实现思路看,甲骨文公司的一款关系数据库管理系统,在数据库市场上占有重要份额。它具有强大的功能、出色的性能和高可用性,兼容大规模数据存储和复杂的业务逻辑,广泛应用来大型企业、机构等对数据处理要求较高的场景。
SQL server在这个场景下,由微软公司开发的关系型数据库管理系统,与 Windows 操作系统紧密集成,具有良好的兼容性和易用性,在 Windows 环境下的企业级应用中较为常用,适用来中小型企业的业务系统。
IBM Db2实际处理时,IBM 公司推出的关系型数据库管理系统,高性能,高可靠性和强大的数据分析能力。
Informix落到代码里,IBM 公司的一款数据库产品,结合了关系型和面向对象的功能,可实现灵活的数据建模,兼容 SQL、NoSQL/JSON 和时间序列数据,具有无缝整合特性,可进行高性能事务处理,适合嵌入式应用程序中的全天候事务和实时分析。
Sybase最初由 Sybase 公司开发,后来被 SAP 公司收购。
Redis内存数据库,常用来缓存,会话存储等场景
国产版本介绍

OceanBase

蚂蚁集团开发,常用来、电信、互联网等场景
TiDB在这个场景下,由 PingCAP 公司开发,是一款分布式 NewSQL 数据库,,适合分布式在线事务处理
达梦数据库(DM)在这个场景下,由武汉达梦数据库有限公司研发,是一款完全自主研发的关系型数据库,高度兼容 Oracle,广泛应用来正府、、电信、能源等对数据安全要求高的行业。
ren大金仓(Kingbase)从实现思路看,由北京ren大金仓信息技术股份有限公司开发,是入选国家自主创新产品目录的唯一数据库产品
南大通用(GBase)落到代码里,天津南大通用数据技术有限公司的产品。适用来、电信、正府等大数据处理需求高的行业。

TDSQL-C

从实现思路看,腾讯云自研的分布式数据库,兼容 MySQL 和 PostgreSQL,分布式架构适用来高同时发业务。

PolarDB

由阿里云开发,广泛应用来阿里云生态。

SequoiaDB(巨杉数据库)

实际处理时,由巨杉数据库公司开发,主要应用来、电信、正府等大数据处理需求高的行业。
GoldenDB由中兴通讯开发,成熟度较高,主要应用来行业的核心交易系统。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多兼容脚本之家。

您可能感兴趣的文章:
  • Oracle数据库定时备份脚本方式(Linux)
  • Linux系统下启动/关闭Oracle数据库
  • Linux环境下Oracle数据库重启详细步骤
  • Linux系统下Oracle数据库启动关闭命令详解
  • Linux环境下重启Oracle数据库详细图文教程

热门栏目