前言:为什么学 Oracle?
Oracle 是企业级数据库的 “扛把子”—— 银行、电商、政务系统大多用它,因为它稳、能存海量数据、还能扛住多用户同时操作。这篇笔记从 “是什么” 到 “怎么用”,全是小白能看懂的大白话,跟着做就能上手。
一、Oracle 基础概念:先搞懂 “最绕” 的核心术语
核心目标:分清 “数据库” 和 “实例”,别被术语吓住
1. Oracle 有啥特点?(企业为啥爱用它)
| 特点 | 大白话解释 | 实际例子 |
|---|---|---|
| 🚀多用户 + 大事务处理 | 多人同时操作不混乱,大额操作(比如转账)不会错 | 银行 1000 个用户同时查余额、转账,数据不丢不错 |
| 🔒数据安全 + 完整性 | 能控制谁能看数据、改数据,还能防数据乱改 | 只有财务能改工资表,且改之前要填审批记录 |
| 🌐分布式数据处理 | 数据存在多个服务器,却像存在一个库一样用 | 北京和上海的服务器各存一部分订单,查全国订单时自动合并 |
| 🔄可移植性 | 能在 Windows、Linux 上跑,换系统不用改代码 | 从 Windows 服务器迁移到 Linux,数据库直接用 |
2. Oracle 体系结构:用 “文件柜” 比喻帮你理解
Oracle 的核心是 “数据库(文件)+ 实例(程序) ”,缺一不可,就像 “文件柜” 和 “管理员”:
数据库(Database):就是 “物理文件柜”,存的是实实在在的文件,关了电脑也在。包含 4 类关键文件(少一个都不行):
1. 数据文件(.DBF):“文件柜里的文件夹”,存你的数据(比如用户表、订单表)。
- ✅ 注意:一个 “文件夹”(表空间)可以对应多个.DB 文件,一个.DB 文件只能属于一个 “文件夹”。
- 重要特性:数据文件一旦加入表空间,不能单独删除
2. 控制文件(.CTL):“文件柜的目录表”,二进制文件,记录数据库结构信息,如记着数据文件存在哪、数据库叫啥。
❌ 丢了就完了:控制文件没了,Oracle 找不到数据文件,数据库直接用不了。
3. 日志文件(.LOG):“操作记录本”,分两种:
◦ 重做日志:记你做过的操作(比如改了某行数据),万一数据库崩溃,能恢复到最新状态;
◦ 归档日志:重做日志满了后,备份起来的 “历史记录本”,用于恢复更早的数据。
4. 参数文件:“管理员的操作手册”,记着数据库的配置(比如内存分配多大)。
实例(Instance):就是 “管理员 + 钥匙”,是启动数据库后分配的内存 + 后台进程。
✅ 特点:电脑关了,实例就没了;一个 “文件柜”(数据库)可以有多个 “管理员”(实例),但同一时间一个实例只能管一个数据库。
• 表空间(Tablespace):“文件柜里的分类文件夹”,把数据文件逻辑分组。比如 “财务文件夹”(财务表空间)存工资表、报销表,“人事文件夹”(人事表空间)存员工表。
✅ 必须知道:每个数据库至少有一个 “系统文件夹”(SYSTEM 表空间),存 Oracle 自己的核心数据(比如用户信息、表结构)。
• 用户(User):“文件柜的使用者”,每个用户只能用自己 “文件夹”(表空间)里的东西。比如创建 “张三” 用户,指定他用 “财务表空间”,那张三登录后只能看 / 改财务相关的表 —— 这和 MySQL 的 “数据库” 概念很像(MySQL 一个库对应 Oracle 一个用户)。
3. Oracle 版本怎么看?(新手选哪个?)
版本号里的字母是关键,不用记太多,新手学11g 或 12c就行(稳定、资料多):
| 版本 | 字母含义 | 核心特点 |
|---|---|---|
| 8i | i=Internet | 第一次支持互联网访问 |
| 9i | i=Internet | 加强互联网功能 |
| 10g | g=Grid(网格) | 支持 “网格计算”(多服务器协同工作) |
| 11g | g=Grid | 优化性能,新手最常用 |
| 12c | c=Cloud(云) | 支持云计算,企业现在常用 |
二、Oracle 实战:从安装到建表,一步一步来
核心目标:搞定 “环境搭建 + 用户创建 + 权限分配”,能正常建表查数据
1. 安装 Oracle:新手避坑指南
安装前先选 “网络模式”,这是新手最容易错的地方,用表格帮你选:
| 网络模式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 桥接模式 | 主机插网线,想让虚拟机和主机在同一局域网 | 虚拟机可被其他电脑访问 | 需手动配 IP,没网线用不了 |
| 仅主机模式 | 只想让主机和虚拟机互通,不用连外网 | 不用配 IP,稳定 | 虚拟机不能连外网 |
| NAT 模式 | 主机用 WiFi,虚拟机想连外网但不用被其他电脑访问 | 自动配 IP,能连外网 | 主机和虚拟机偶尔连不上 |
安装步骤(精简版):
- 挂载 Oracle 安装镜像(新手建议用 Linux 虚拟机,Windows 版本较少);
- 运行安装程序,选 “创建数据库”(选 “桌面类” 适合学习,“服务器类” 是企业用);
- 设置 “全局数据库名”(比如orcl)和 “系统密码”(记好,sys 和 system 用户用这个密码);
- 等待安装完成,最后会提示 “数据库创建成功”。
2. 卸载 Oracle:别留 “后遗症”
卸载一定要彻底,不然下次装不上,步骤记好:
- 先停服务:Windows 打开 “服务”,找到OracleServiceOrcl和OracleOraDb11g_home1TNSListener,右键 “停止”;
- 运行卸载程序:找到 Oracle 安装目录下的deinstall.bat(Windows)或deinstall(Linux),双击运行;
- 删除残留:
◦ Windows:删C:\Program Files\Oracle和安装目录(比如D:\app);
◦ Linux:删/u01/app目录; - 清注册表(Windows):打开regedit,删HKEY_LOCAL_MACHINE\SOFTWARE\Oracle;
- 删环境变量:Windows 删PATH里的 Oracle 路径,还有ORACLE_HOME等变量;
- 重启电脑(关键!)。
3. Oracle 目录结构:重点看这几个文件夹
不用记所有目录,新手关注 3 个核心目录就行:
| 目录名 | 作用一句话总结 | 新手重点关注 |
|---|---|---|
| admin | 存实例的配置和日志 | 每个实例一个文件夹,比如admin/orcl |
| oradata | 存数据文件(.DBF)、控制文件(.CTL)等 | 比如oradata/orcl/SYSTEM01.DBF是系统表空间文件 |
| product/11.2.0/dbhome_1 | 存 Oracle 软件程序(比如 sqlplus 客户端) | bin目录下有sqlplus.exe,是命令行工具 |
目录结构详解
Oracle安装目录/
├── admin/ # 实例配置和日志文件
├── oradata/ # 数据文件存储
│ ├── SYSTEM01.DBF # 系统表空间
│ ├── SYSAUX01.DBF # 辅助系统表空间
│ ├── USERS01.DBF # 用户表空间
│ ├── TEMP01.DBF # 临时表空间
│ └── UNDOTBS01.DBF # 回滚表空间
├── flash_recovery_area/ # 闪回恢复区
├── diag/ # 诊断日志(11g新结构)
└── product/ # Oracle软件目录
关键文件举例(oradata/orcl 目录下):
• SYSTEM01.DBF:系统表空间文件,存 Oracle 核心数据;
• USER01.DBF:默认用户表空间文件,存普通用户的数据;
• REDO01.LOG:重做日志文件,恢复数据靠它;
• CONTROL01.CTL:控制文件,数据库的 “目录”。
4. 系统用户:用对账号很重要
Oracle 有 3 个常用默认用户,新手别搞混,用表格分清楚:
| 用户名 | 权限等级 | 登录方式 | 用途 |
|---|---|---|---|
| sys | 超级管理员(最高) | 必须加as sysdba(系统管理员) | 建表空间、删用户等核心操作 |
| system | 本地管理员(次高) | 直接登录(normal 模式) | 建视图、查系统信息,别建业务表 |
| scott | 练习用户(低权限) | 默认被锁,需先解锁 | 学习用,自带 emp(员工表)、dept(部门表) |
实战操作(命令行用 sqlplus):
-
登录 sys 用户(最常用,做管理操作):
# 本地登录(Windows/Linux都能用) sqlplus / as sysdba # 远程登录(比如连192.168.10.8的Oracle) sqlplus sys/你的密码@192.168.10.8:1521/orcl as sysdba -
解锁 scott 用户(练手用):
# 解锁scott alter user scott account unlock; # 重置scott密码(比如设为tiger) alter user scott identified by tiger; # 登录scott connect scott/tiger; # 查scott的表(自带4张表) select table_name from user_tables;
5. 启动 / 关闭 Oracle:关键看两个服务
Oracle 能不能用,全看服务有没有启动,新手记好这两个 “必须启动” 的服务:
| 服务名 | 作用 | 启动方式(Windows) |
|---|---|---|
| OracleServiceOrcl | 数据库实例服务(核心) | 服务里右键 “启动”,或命令行:net start OracleServiceOrcl |
| OracleOraDb11g_home1TNSListener | 监听器服务(远程连接用) | 服务里右键 “启动”,或命令行:net start OracleOraDb11g_home1TNSListener |
关闭服务:
命令行输入:
net stop OracleServiceOrcl
net stop OracleOraDb11g_home1TNSListener
6. 客户端工具:新手用哪个?
不用记太多,两个工具足够:
1. sqlplus(自带,命令行):
◦ 优点:不用装,Oracle 自带;
◦ 用法:Windows 打开 “命令提示符”,直接输sqlplus;
◦ 退出:输quit或exit。
2. PL/SQL Developer(第三方,图形化):
◦ 优点:点鼠标操作,写 SQL 有提示;
◦ 配置:安装后,选 “Oracle Home”(比如D:\app\product\11.2.0\dbhome_1),输入用户名、密码、数据库名(比如orcl);
◦ 常用窗口:
- SQL Window:写 SQL 语句;
- Command Window:输 sqlplus 命令。
三、Oracle 核心操作:表空间→用户→权限→建表
核心目标:从 “无” 到 “有”,创建自己的用户和表
1. 表空间:先建 “文件夹” 再存数据
表空间是 “用户的专属文件夹”,必须先建表空间,才能建用户。
表空间类型说明
| 类型 | 用途 | 特点 |
|---|---|---|
| 永久表空间 | 存储业务数据 | 数据持久化保存 |
| 临时表空间 | 查询排序操作 | 事务结束自动清理 |
| UNDO表空间 | 回滚操作 | 支持事务回滚和数据恢复 |
实战:创建永久表空间(sys 用户登录)
-- 创建永久表空间(比如叫“my_tablespace”)
create tablespace my_tablespace
datafile 'D:\app\oradata\orcl\my_tablespace.dbf' -- 数据文件路径(Linux可写“/u01/app/oradata/orcl/...”)
size 15M -- 初始大小
autoextend on next 10M -- 满了自动加10M
maxsize unlimited; -- 最大容量不限(学习用,企业可设上限)
-- 创建临时表空间(存临时数据,比如查询中间结果)
create temporary tablespace
my_temp_tablespace
tempfile 'D:\app\oradata\orcl\my_temp_tablespace.dbf'
size 10M
autoextend on next 5M;
查表空间:用数据字典(Oracle 自带的 “说明书”)
-- 查所有表空间(sys用户)
select tablespace_name from dba_tablespaces;
-- 查当前用户的表空间(普通用户)
select default_tablespace from user_users;
2. 创建用户:给 “文件夹” 分配使用者
用户必须指定 “默认表空间” 和 “临时表空间”,不然没法存数据。
实战:创建用户(sys 用户登录)
-- 创建用户(比如叫“my_user”,密码“123456”)
create user my_user
identified by "123456" -- 密码有特殊字符要加双引号
default tablespace my_tablespace -- 默认表空间(刚才建的)
temporary tablespace my_temp_tablespace; -- 临时表空间
-- 查用户(sys用户)
select username from dba_users;
-- 切换到新用户登录
connect my_user/123456;
3. 分配权限:让用户 “有权做事”
刚创建的用户啥也干不了(连登录都不行),必须给权限。权限分 3 类,新手记好 “常用授权组合” 就行:
| 权限类型 | 大白话解释 | 常用权限 |
|---|---|---|
| 系统权限(System Privileges) | 能做 “全局操作”(比如建表、建视图) | create table(建表)、create view(建视图) |
| 对象权限Object Privileges) | 能操作 “别人的表”(比如查 scott 的 emp 表) | select on scott.emp(查 emp 表) |
| 角色权限(Role Privileges) | 权限的 “打包组合”(不用一个个给权限) | connect(登录权限)、resource(建表等基础权限) |
实战:给用户授权(sys 用户登录)
-- 1. 给“登录+建表”基础权限(新手必给)
grant connect, resource to my_user;
-- 2. 给“无限使用表空间”权限(不然表空间满了没法用)
grant unlimited tablespace to my_user;
-- 3. 给“建视图、建存储过程”权限(按需给)
grant create view, create procedure to my_user;
-- 4. 撤销权限(比如收回建表权限)
revoke create table from my_user;
验证权限:登录 my_user,建个表试试
-- 登录my_user
connect my_user/123456;
-- 建表(比如叫“student”,存学生信息)
create table student(
id number(10) primary key, -- 学号(主键)
name varchar2(20) not null, -- 姓名(非空)
age number(3) -- 年龄
);
-- 插数据
insert into student values(1, '张三', 20);
-- 查数据
select * from student;
完整用户创建示例
-- 以SYS用户登录
SQLPLUS / AS SYSDBA;
-- 删除现有用户(可选)
DROP USER abiExam CASCADE;
-- 创建表空间
CREATE TABLESPACE abiExam
LOGGING DATAFILE 'D:\oracle\abiExam.dbf'
SIZE 32M
AUTOEXTEND ON NEXT 32M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
-- 创建临时表空间
CREATE TEMPORARY TABLESPACE abiExamtemp
TEMPFILE 'D:\oracle\abiExamtemp.dbf'
SIZE 32M
AUTOEXTEND ON NEXT 32M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
-- 创建用户
CREATE USER abiExam IDENTIFIED BY abiExam
DEFAULT TABLESPACE abiExam
TEMPORARY TABLESPACE abiExamtemp;
-- 分配权限
GRANT CONNECT, RESOURCE, CREATE VIEW, UNLIMITED TABLESPACE TO abiExam;
4. 中文乱码解决:新手必踩的坑
插入中文报错?比如 “ORA-12899: 值过大”,是字符集不匹配,两步解决:
- 查 Oracle 当前字符集:
select userenv('language') from dual;
-- 结果比如:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
-
加环境变量(Windows):
◦ 右键 “此电脑”→“属性”→“高级系统设置”→“环境变量”;
◦ 新建 “系统变量”:
◦ 变量名:NLS_LANG
◦ 变量值:刚才查到的结果(比如SIMPLIFIED CHINESE_CHINA.ZHS16GBK); -
重启客户端工具(比如 PL/SQL),再插中文就没问题了。
四、Oracle 远程连接:配置 “通讯录”
核心目标:让另一台电脑连你的 Oracle
1. 三个关键配置文件(在product/11.2.0/dbhome_1/NETWORK/ADMIN目录下)
配置文件详解
NETWORK/ADMIN/
├── sqlnet.ora # 名称解析配置
├── tnsnames.ora # 客户端服务别名配置
└── listener.ora # 服务器端监听配置
这三个文件就像 “通讯录” 和 “监听规则”,新手改listener.ora和tnsnames.ora就行:
| 文件名 | 作用 | 改哪里? |
|---|---|---|
listener.ora | 服务器端 “监听规则”(比如监听哪个端口) | 改HOST为服务器 IP(比如192.168.10.8) |
tnsnames.ora | 客户端 “通讯录”(记服务器地址) | 改HOST为服务器 IP,SERVICE_NAME为数据库名(比如orcl) |
sqlnet.ora | 控制 “怎么找服务器” | 默认不用改,保持NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) |
实战:配置远程连接(以 Windows 为例)
- 服务器端改listener.ora:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.8)(PORT = 1521)) -- HOST改服务器IP
)
)
- 客户端改tnsnames.ora:
ORCL = -- 客户端连接用的“别名”,随便起
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.8)(PORT = 1521)) -- HOST改服务器IP
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl) -- 数据库名,和服务器一致
)
)
- 测试连接:客户端打开 sqlplus,输
sqlplus my_user/123456@192.168.10.8:1521/
能登录就说明成功了!
2. Net Configuration Assistant:图形化配置工具
嫌手动改文件麻烦?用 Oracle 自带的图形化工具:
- Windows 搜索 “Net Configuration Assistant”,打开;
- 配置服务器监听:选 “监听程序配置”→“添加”→输入监听名(默认LISTENER)→选 TCP 协议→端口 1521→完成;
- 配置客户端:选 “本地网络服务名配置”→“添加”→输入服务名(比如orcl)→选 TCP 协议→输入服务器 IP→测试连接(输用户名密码)→完成。
五、小白避坑指南(必看!)
- 别用 sys 用户建业务表:sys 是超级管理员,建表会存在系统表空间,容易搞乱核心数据;
- 控制文件一定要备份:复制oradata/orcl下的
CONTROL01.CTL到其他地方,丢了数据库就废了; - 表空间别建太多:学习用 1-2 个永久表空间 + 1 个临时表空间足够,多了不好管理;
- 远程连接前关防火墙:服务器和客户端都要关,不然会被防火墙挡住;
- 密码别太简单:Oracle 密码区分大小写,建议设成 “字母 + 数字”(比如MyUser123)。
常见问题解决
✅ 用户无法登录 - 检查用户状态和权限分配
✅ 表空间不足 - 扩展表空间或启用自动扩展
✅ 连接失败 - 验证监听服务和网络配置
✅ 中文乱码 - 正确配置NLS_LANG环境变量
3725

被折叠的 条评论
为什么被折叠?



