知识库✳

教程与手册

全部教程
  1. 01Oracle 函数手册
  2. 02性能优化手册
  3. 03Linux Shell
  4. 04Oracle 学习与演练
  5. 05网络基础学习
  6. 06数据治理与管理
返回个人网站
甲Oracle 学习教程从 SQL 到 PL/SQL 与运维
首页课程目录搜索演练场
知识库

已完成 0 / 22 章

模块一 · 入门与准备

  • 01Oracle 数据库体系结构
  • 02环境安装与连接方式
  • 03SQL*Plus 与常用工具

模块二 · SQL 查询基础

  • 04SELECT 查询基础
  • 05过滤与排序
  • 06单行函数
  • 07多表连接
  • 08分组聚合与 HAVING
  • 09子查询

模块三 · 数据与对象

  • 10DML 与事务控制
  • 11表与数据类型
  • 12约束
  • 13索引与执行计划
  • 14视图、序列与同义词

模块四 · PL/SQL 编程

  • 15PL/SQL 块与变量
  • 16流程控制与游标
  • 17存储过程与函数
  • 18触发器
  • 19异常处理

模块五 · 运维与进阶

  • 20用户与权限管理
  • 21表空间与存储管理
  • 22备份与恢复
❖

Oracle 学习教程

返回个人网站知识库

示例代码基于 Oracle AI Database 26ai / 23ai,查询示例使用官方 HR 示例方案。

以 Next.js 16 · Tailwind CSS v4 · HeroUI v3 装帧

02
  1. 首页
  2. 课程目录
  3. 环境安装与连接方式

第 2 章◆入门◆建议 40 分钟◆模块一 · 入门与准备

环境安装与连接方式

装好 Oracle 并成功连上:区分 CDB/PDB、服务名与 SID,掌握 SQL*Plus 与图形客户端的连接配置。

学完这一章,你应该能

  • 选择并安装合适的 Oracle 版本(26ai Free / 23ai Free / XE)
  • 理解 CDB 与 PDB 的关系
  • 会用 EZConnect 和 TNS 别名两种方式连接
  • 能排查「监听器拒绝连接」这类常见故障

2.1选哪个版本

  • Oracle AI Database 26ai Free:当前免费版。官方限制为最多 12GB 用户数据、2GB 数据库内存、2 个 CPU 线程
  • Oracle Database 23ai Free:上一代免费版,资源限制相同,现有教程和第三方资料最多
  • Oracle Database 21c XE / 18c XE:更早的免费版,做基础 SQL 练习完全够用
  • 19c:长期支持版本,很多企业的生产库仍是 19c,安装包需要 Oracle 账号
  • 学习建议:装 26ai Free 或 23ai Free 都行;不想折腾安装就用官方 Docker 镜像

提示 如果你的机器内存小于 8GB,建议用 Docker 或调低 SGA_TARGET,否则安装会失败或系统会很卡。

2.2CDB 与 PDB:多租户架构

从 12c 开始,Oracle 引入了容器数据库(CDB)与可插拔数据库(PDB)。CDB 是外壳,PDB 才是你实际存放业务数据的地方。安装后默认会有一个 PDB(Free 版里通常叫 FREEPDB1)。

  • CDB$ROOT:容器根,存放数据字典和公共对象
  • PDB$SEED:模板 PDB,只能只读,用来克隆新 PDB
  • 业务连接应该连到具体的 PDB,而不是 CDB$ROOT
  • 在 CDB 中执行 SHOW CON_NAME 可以看到当前在哪个容器
查看容器与 PDB 列表
SHOW con_name

SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
切换到业务 PDB
ALTER SESSION SET CONTAINER = FREEPDB1;
SHOW con_name;

2.3两种连接写法

连接信息由「用户名 + 口令 + 网络地址」组成。网络地址有两种常见写法:直接写 EZConnect 字符串,或在 tnsnames.ora 里配别名。

EZConnect(推荐,无需配置)
-- 语法:用户名/口令@主机:端口/服务名
sqlplus system/Oracle123@localhost:1521/FREEPDB1

-- 以 SYSDBA 身份连到 CDB
sqlplus / as sysdba
TNS 别名方式
-- $ORACLE_HOME/network/admin/tnsnames.ora
FREEPDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = freepdb1)
    )
  )

-- 之后即可简写
sqlplus system/Oracle123@FREEPDB1

提示 SERVICE_NAME 和 SID 不是一回事。连 PDB 用服务名(freepdb1);老式的 SID 写法是 host:port:SID,不要混用。

2.4连不上怎么办

  • ORA-12541: TNS 无监听程序 → 监听器没起,执行 lsnrctl start
  • ORA-12514: 监听器不认识服务 → 服务名写错,或 PDB 未 OPEN
  • ORA-01017: 用户名/口令无效 → 口令区分大小写(11g 引入;12c 起默认强制,SEC_CASE_SENSITIVE_LOGON 默认 TRUE),注意引号
  • ORA-28000: 账户被锁定 → 用 DBA 执行 ALTER USER ... ACCOUNT UNLOCK
  • 图形客户端里 1521 端口连不上,先确认虚拟机防火墙放行
排查监听器状态与服务注册
-- 在操作系统命令行执行(不是 SQL 里)
lsnrctl status

-- 在 SQL 里看服务注册情况
SELECT name, pdb, network_name FROM v$services ORDER BY name;

练习

3 题 · 先自己写,再展开对照

参考答案

1. 服务名写错了(把 SID 当服务名用,或拼错了 PDB 名)。
2. 该 PDB 还没有 OPEN,服务没有注册到监听器。

排查顺序:先在库内确认服务名
SELECT name, pdb FROM v$services;
再确认 PDB 是 READ WRITE
SELECT name, open_mode FROM v$pdbs;

自评要点

  • SERVICE_NAME 与 SID 不是一回事
  • PDB 未 OPEN 会导致服务未注册

参考答案

EZConnect(主机:端口/服务名):随时可用、零配置,适合临时连接、
一次性脚本和文档示例。

TNS 别名:把连接信息集中写在 tnsnames.ora,适合固定的多套环境
(开发/测试/生产),改地址不用改脚本,也便于统一管理 DESCRIPTION 参数。

自评要点

  • EZConnect 免配置
  • 别名便于集中管理和环境切换

参考答案

SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;

只作示例阅读:读取全库字典或会话(沙箱只开放自身对象)。请在独立学习数据库中练习。

自评要点

  • 知道 V$PDBS 视图
  • open_mode 常见值:MOUNTED / READ WRITE
← 上一章

Oracle 数据库体系结构

下一章 →

SQL*Plus 与常用工具