1. 练习环境从哪来:从安装到可用,这第一步拦住了多少人
我见过太多学ORACLE的人,SQL语法背得滚瓜烂熟,一到自己机器上装数据库就卡住了。说句实话,ORACLE练习这件事,最劝退的往往不是SQL本身,而是安装和配置这一关。尤其是Windows用户,装到一半报个错,再重装一次又提示已存在实例,整个人直接麻了。
所以这个练习系列的第一篇,我想先从环境搭建讲起。标题叫“ORACLE 练习1”,那默认读者就是刚开始接触这个数据库的人,或者是以前用过MySQL、SQL Server、PG,现在要转ORACLE的人。如果你属于这两类,这篇会很对路。
先说版本选型。去ORACLE官网能看到一堆版本号,新手别贪新,直接选目前使用面最广的稳定版本——比如Oracle Database 19c,或者经典的11g。19c是长期支持版,网上教程多、坑少,遇到问题搜起来全是答案。11g虽然老,但很多企业内部还在用,如果你是为了工作做准备,装11g也说得过去。
下载要注册账号,这是很多人第一次就被挡住的地方。记住一个经验:用企业邮箱注册,验证流程会顺利很多。个人邮箱偶尔会遇到收不到验证链接的情况,换浏览器或者等几分钟再试就好。
安装过程中,最关键的几个选择点如下:
- 安装类型选“桌面类”还是“服务器类”:自己练习选桌面类,代价最小;后面要模拟真实环境,再考虑服务器类。
- 全局数据库名和SID:建议直接用orcl,后续连接命令写起来省事。
- 管理口令:设一个自己一定不会忘的密码,但要满足复杂度要求。我习惯在练习环境用Oracle_123这种强度适中的,生产环境另说。
- “创建为容器数据库”这个勾选:默认是勾上的,如果你不熟悉CDB/PDB概念,建议先取消,用传统非容器数据库方式,少一层隔离,练习阶段更容易理解。
我遇到过一个很典型的安装事故:12c装在Windows上,因为之前装过一次没卸载干净,第二次安装时总报监听程序错误。后来发现是注册表残留和Windows服务里还留着旧实例。所以安装之前,先到 services.msc 里看看有没有Oracle开头的服务,有的话先删干净,再重新装。12c删除不干净这个问题,网上问的人特别多,几乎都是第一次装的时候没做清理工作。
装完之后,很多新手会卡在“怎么进去”。命令行敲sqlplus / as sysdba进不去、账户被锁、密码过期,这些问题一个接一个。别急,这些我都遇到过,下面把这几个问题一起说清楚。
1.1 账号权限与登录配置的坑
ORACLE装完默认有一个超级管理员账户SYS,还有SYSTEM。新手练习不要整天用SYS,风险和习惯都不好。应该自己建一个普通用户,给够练习需要的权限就行。这个操作后面有专门一节讲,这里先说要怎么顺利登录。
如果你用的是容器数据库结构,登录命令会长这样:
bash复制sqlplus sys/Oracle_123@localhost:1521/orcl as sysdba
如果是非容器数据库,通常直接写:
bash复制sqlplus system/Oracle_123@orcl
新手最常见的问题就是监听没起来。检查监听状态的命令:
bash复制lsnrctl status
如果监听没启动,运行:
bash复制lsnrctl start
另一个高频问题是ORA-28001,提示口令已过期。这是ORACLE的默认密码有效期策略在捣鬼,默认180天,练习机器上完全没必要。关掉这个限制是很常见的基础操作:
sql复制ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
这行命令我几乎在每台练习机上都要执行一次,顺手还能解决一堆“昨天还能进今天进不去”的诡异问题。
还有一类坑是客户端连不上。用Navicat或PL/SQL Developer连ORACLE时,报ORA-12541或ORA-12514,多半是tnsnames.ora配置问题。Windows下这个文件在安装目录的network/admin下面,Linux在$ORACLE_HOME/network/admin。确认一下里面的HOST是localhost还是你的机器IP,SERVICE_NAME对不对,端口是不是1521,基本都能解决。
1.2 客户端连接与Java环境的小细节
做ORACLE练习,光有数据库服务端还不够,最好装一个图形客户端。Navicat对新手友好,PL/SQL Developer是很多企业的标配,两个都行。但要注意:PL/SQL Developer是32位程序,必须配32位的Oracle Instant Client,否则连不上。这个坑当年坑了我一下午,最后发现就是位数不匹配。
如果后面你要用Spring Boot连接ORACLE,JDBC驱动选对版本很关键。ojdbc8对应12c以上的版本,ojdbc6对应11g。maven坐标里的artifactId从ojdbc14到ojdbc11都有,别一上来就复制最新版,得看数据库版本。这里有个简单的对应关系:
| 数据库版本 | JDBC驱动 | maven artifactId |
|---|---|---|
| 11g | ojdbc6 | com.oracle.database.jdbc:ojdbc6 |
| 12c/19c | ojdbc8 | com.oracle.database.jdbc:ojdbc8 |
| 21c+ | ojdbc11 | com.oracle.database.jdbc:ojdbc11 |
还有一种常见场景是用Java开发,下载JDK时跑到oracle官网去下。oracle官网jdk下载这个搜索词一直很热,我多说一句:现在OracleJDK分两种,一种是要登录下载的商用版,一种是OpenJDK。练习用哪个都行,如果是个人学习和测试,完全不需要纠结授权问题。还有人会对比Dragonwell和OracleJDK的差异,那是另一个话题,练习阶段用OpenJDK或者OracleJDK都没问题,先把数据库跑起来再说。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 第一个必练的SQL基本功:Dual表与sysdate、trunc的配合
环境搞定以后,我建议第一个练习别急着去建表、插数据,先跟Dual表打打交道。Dual表是ORACLE里最特别的一张表,它不属于任何用户,但所有用户都能查它。每个数据库会话执行select * from dual,永远返回一行一列,值就是X。
这个表存在的意义是什
