选哪个版本
- 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 镜像
CDB 与 PDB:多租户架构
从 12c 开始,Oracle 引入了容器数据库(CDB)与可插拔数据库(PDB)。CDB 是外壳,PDB 才是你实际存放业务数据的地方。安装后默认会有一个 PDB(Free 版里通常叫 FREEPDB1)。
- CDB$ROOT:容器根,存放数据字典和公共对象
- PDB$SEED:模板 PDB,只能只读,用来克隆新 PDB
- 业务连接应该连到具体的 PDB,而不是 CDB$ROOT
- 在 CDB 中执行 SHOW CON_NAME 可以看到当前在哪个容器
SHOW con_name
SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;ALTER SESSION SET CONTAINER = FREEPDB1;
SHOW con_name;两种连接写法
连接信息由「用户名 + 口令 + 网络地址」组成。网络地址有两种常见写法:直接写 EZConnect 字符串,或在 tnsnames.ora 里配别名。
-- 语法:用户名/口令@主机:端口/服务名
sqlplus system/Oracle123@localhost:1521/FREEPDB1
-- 以 SYSDBA 身份连到 CDB
sqlplus / as sysdba-- $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连不上怎么办
- 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;