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

 更新时间:2026年03月09日 09:19:46   作者:72861021  
这篇文章主要介绍了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

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数据库主程序

官方网址:https://www.oracle.com/cn/database/technologies/xe-downloads.html

下载之后传输到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 Db2IBM 公司推出的关系型数据库管理系统,高性能,高可靠性和强大的数据分析能力。
InformixIBM 公司的一款数据库产品,结合了关系型和面向对象的功能,可实现灵活的数据建模,支持 SQL、NoSQL/JSON 和时间序列数据,具有无缝整合特性,可进行高性能事务处理,适合嵌入式应用程序中的全天候事务和实时分析。
Sybase最初由 Sybase 公司开发,后来被 SAP 公司收购。
Redis内存数据库,常用于缓存,会话存储等场景
国产版本介绍

OceanBase

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

TDSQL-C

腾讯云自研的分布式数据库,兼容 MySQL 和 PostgreSQL,分布式架构适用于高并发业务。

PolarDB

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

SequoiaDB(巨杉数据库)

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

总结

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

相关文章

  • Oracle中多表关联批量插入批量更新与批量删除操作

    Oracle中多表关联批量插入批量更新与批量删除操作

    这篇文章主要介绍了Oracle中多表关联批量插入,批量更新与批量删除操作,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 一文详解Oracle中RAC的用法

    一文详解Oracle中RAC的用法

    Oracle RAC(Oracle Real Application Server, Cluster)是一种分布式数据库解决方案,本文就将详细给大家介绍一下Oracle RAC的知识点及用法,感兴趣的同学可以参考阅读
    2023-06-06
  • oracle 常见等待事件及处理方法

    oracle 常见等待事件及处理方法

    我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息
    2009-03-03
  • Oracle 触发器实现主键自增效果

    Oracle 触发器实现主键自增效果

    这篇文章主要介绍了Oracle 触发器实现主键自增,说白了就是数据确认(after)与安全性检查(before),此外触发器不针对select操作,本文给大家介绍的非常详细,需要的朋友参考下吧
    2021-12-12
  • oracle常用数据类型说明

    oracle常用数据类型说明

    这篇文章主要介绍了oracle常用数据类型说明,需要的朋友可以参考下
    2014-02-02
  • oracle中如何保留两位小数

    oracle中如何保留两位小数

    这篇文章主要介绍了oracle中如何保留两位小数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • oracle中利用关键字rownum查询前20名员工信息及rownum用法

    oracle中利用关键字rownum查询前20名员工信息及rownum用法

    这篇文章主要介绍了oracle中利用关键字rownum查询前20名员工信息,本文通过代码给大家简单介绍了ORACLE 中ROWNUM用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • 使用PLSQL查看表属性乱码的解决方法

    使用PLSQL查看表属性乱码的解决方法

    PL/SQL是Oracle数据库的编程语言,用于编写存储过程、触发器、函数等,今天用plsql想查看表的属性,看看各个字段的注释,可是打开一看,居然是乱码的,所以接下来本文给大家介绍了使用PLSQL查看表属性乱码的解决方法,需要的朋友可以参考下
    2024-03-03
  • ORA-00349|激活 ADG 备库时遇到的问题及处理方法

    ORA-00349|激活 ADG 备库时遇到的问题及处理方法

    这篇文章主要介绍了ORA-00349|激活 ADG 备库时遇到的问题及处理方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Oracle中 关于数据库存储过程和存储函数的使用

    Oracle中 关于数据库存储过程和存储函数的使用

    本篇文章,小编将为大家介绍,在Oracle中 关于数据库存储过程和存储函数的使用,有需要的朋友可以参考一下
    2013-04-04

最新评论