本笔记以 Oracle 19c+ / 23ai / 26ai 的常见使用方式为主,并结合前面使用的
FREEPDB1环境进行说明。示例环境:
Oracle Instance:FREE PDB:FREEPDB1 Service Name:FREEPDB1 Listener Port:1521 管理员:SYSTEM
1、Oracle 登录与基本命令
1.1 使用 SQL*Plus 登录
连接本机 Oracle:
sqlplus system/123456@127.0.0.1:1521/FREEPDB1
格式:
sqlplus 用户名/密码@主机:端口/ServiceName
例如:
sqlplus ecommerce_training/123456@127.0.0.1:1521/FREEPDB1
1.2 查看当前登录用户
SHOW USER;
也可以:
SELECT USER FROM dual;
1.3 查看当前 PDB / Container
SHOW CON_NAME;
例如:
CON_NAME
------------------------------
FREEPDB1
1.4 查看 Instance
SELECT instance_name, status
FROM v$instance;
1.5 查看数据库名称
SELECT name
FROM v$database;
1.6 查看 Oracle 版本
SELECT *
FROM v$version;
1.7 退出 SQL*Plus
EXIT;
或者:
QUIT;
2、Oracle Listener 常用命令
查看 Listener 状态:
lsnrctl status
启动 Listener:
lsnrctl start
停止 Listener:
lsnrctl stop
重新加载配置:
lsnrctl reload
查看 Listener 中注册的 Service:
lsnrctl services
3、PDB 常用命令
以下命令通常需要管理员权限。
查看 PDB:
SHOW PDBS;
或者:
SELECT name, open_mode
FROM v$pdbs;
3.1 打开 PDB
ALTER PLUGGABLE DATABASE FREEPDB1 OPEN;
3.2 关闭 PDB
ALTER PLUGGABLE DATABASE FREEPDB1 CLOSE;
3.3 切换 Container
如果当前登录到 CDB ROOT:
ALTER SESSION SET CONTAINER = FREEPDB1;
查看:
SHOW CON_NAME;
4、Tablespace 表空间管理
4.1 查看所有表空间
SELECT tablespace_name
FROM dba_tablespaces;
4.2 查看 Datafile
SELECT tablespace_name,
file_name,
bytes / 1024 / 1024 AS size_mb
FROM dba_data_files;
4.3 创建表空间
例如:
CREATE TABLESPACE ecommerce_data
DATAFILE '/opt/oracle/oradata/FREE/FREEPDB1/ecommerce_data01.dbf'
SIZE 1G
AUTOEXTEND ON;
其中:
ECOMMERCE_DATA
↓
Tablespace
ecommerce_data01.dbf
↓
Datafile
4.4 设置自动扩展
例如:
ALTER DATABASE DATAFILE
'/opt/oracle/oradata/FREE/FREEPDB1/ecommerce_data01.dbf'
AUTOEXTEND ON
NEXT 100M
MAXSIZE 10G;
表示:
初始大小:由创建时决定
空间不足:
每次增加 100MB
最大:
10GB
4.5 给表空间增加 Datafile
ALTER TABLESPACE ecommerce_data
ADD DATAFILE '/opt/oracle/oradata/FREE/FREEPDB1/ecommerce_data02.dbf'
SIZE 1G
AUTOEXTEND ON;
此时:
ECOMMERCE_DATA
│
├── ecommerce_data01.dbf
└── ecommerce_data02.dbf
4.6 查看表空间使用情况
SELECT
df.tablespace_name,
ROUND(df.total_mb, 2) AS total_mb,
ROUND(df.total_mb - fs.free_mb, 2) AS used_mb,
ROUND(fs.free_mb, 2) AS free_mb
FROM
(
SELECT tablespace_name,
SUM(bytes) / 1024 / 1024 total_mb
FROM dba_data_files
GROUP BY tablespace_name
) df
LEFT JOIN
(
SELECT tablespace_name,
SUM(bytes) / 1024 / 1024 free_mb
FROM dba_free_space
GROUP BY tablespace_name
) fs
ON df.tablespace_name = fs.tablespace_name;
4.7 删除表空间
只删除 Tablespace:
DROP TABLESPACE ecommerce_data;
删除 Tablespace 以及其中的对象:
DROP TABLESPACE ecommerce_data
INCLUDING CONTENTS;
同时删除 Datafile:
DROP TABLESPACE ecommerce_data
INCLUDING CONTENTS
AND DATAFILES;
这是破坏性操作,执行前必须确认数据已经不再需要。
5、Oracle 用户管理
5.1 查看用户
管理员可以:
SELECT username
FROM dba_users;
查看当前用户:
SHOW USER;
5.2 创建用户
CREATE USER ecommerce_training
IDENTIFIED BY "123456"
DEFAULT TABLESPACE ecommerce_data
TEMPORARY TABLESPACE temp;
含义:
用户名:
ECOMMERCE_TRAINING
密码:
123456
默认表空间:
ECOMMERCE_DATA
临时表空间:
TEMP
5.3 修改用户密码
ALTER USER ecommerce_training
IDENTIFIED BY "654321";
5.4 锁定用户
ALTER USER ecommerce_training
ACCOUNT LOCK;
5.5 解锁用户
ALTER USER ecommerce_training
ACCOUNT UNLOCK;
5.6 删除用户
如果用户没有 Schema 对象:
DROP USER ecommerce_training;
如果用户已经创建了表等对象:
DROP USER ecommerce_training CASCADE;
CASCADE 会同时删除该 Schema 中的对象。
6、Tablespace Quota
指定默认 Tablespace 并不代表用户可以无限占用空间。
例如:
ALTER USER ecommerce_training
QUOTA 2G ON ecommerce_data;
表示:
ECOMMERCE_TRAINING
最多可以在:
ECOMMERCE_DATA
中占用:
2GB
6.1 设置无限 Quota
ALTER USER ecommerce_training
QUOTA UNLIMITED ON ecommerce_data;
6.2 取消用户的 Tablespace Quota
ALTER USER ecommerce_training
QUOTA 0 ON ecommerce_data;
6.3 查看 Quota
SELECT username,
tablespace_name,
bytes,
max_bytes
FROM dba_ts_quotas;
7、Oracle 用户授权
Oracle 权限主要分为:
System Privilege
↓
系统权限
Object Privilege
↓
对象权限
Role
↓
角色
8、System Privilege 系统权限
8.1 允许用户登录
GRANT CREATE SESSION
TO ecommerce_training;
8.2 允许创建表
GRANT CREATE TABLE
TO ecommerce_training;
8.3 允许创建视图
GRANT CREATE VIEW
TO ecommerce_training;
8.4 允许创建序列
GRANT CREATE SEQUENCE
TO ecommerce_training;
8.5 允许创建存储过程
GRANT CREATE PROCEDURE
TO ecommerce_training;
8.6 一次授权多个权限
GRANT CREATE SESSION,
CREATE TABLE,
CREATE VIEW,
CREATE SEQUENCE,
CREATE PROCEDURE
TO ecommerce_training;
8.7 查看用户系统权限
SELECT *
FROM dba_sys_privs
WHERE grantee = 'ECOMMERCE_TRAINING';
9、撤销权限 REVOKE
例如撤销创建表权限:
REVOKE CREATE TABLE
FROM ecommerce_training;
撤销创建视图权限:
REVOKE CREATE VIEW
FROM ecommerce_training;
10、Object Privilege 对象权限
假设:
ECOMMERCE_TRAINING.ORDERS
属于 ECOMMERCE_TRAINING。
现在希望:
REPORT_USER
能够查询订单:
GRANT SELECT
ON ecommerce_training.orders
TO report_user;
10.1 授予 INSERT
GRANT INSERT
ON ecommerce_training.orders
TO report_user;
10.2 授予 UPDATE
GRANT UPDATE
ON ecommerce_training.orders
TO report_user;
10.3 授予 DELETE
GRANT DELETE
ON ecommerce_training.orders
TO report_user;
10.4 一次授予多个权限
GRANT SELECT,
INSERT,
UPDATE,
DELETE
ON ecommerce_training.orders
TO report_user;
10.5 撤销对象权限
REVOKE SELECT
ON ecommerce_training.orders
FROM report_user;
11、Role 角色
创建角色:
CREATE ROLE ecommerce_reader;
给角色授权:
GRANT SELECT
ON ecommerce_training.orders
TO ecommerce_reader;
GRANT SELECT
ON ecommerce_training.products
TO ecommerce_reader;
将角色授予用户:
GRANT ecommerce_reader
TO report_user;
关系:
Object Privilege
↓
Role
↓
User
12、查看当前 Schema 中的表
SELECT table_name
FROM user_tables;
查看当前用户能够访问的表:
SELECT owner, table_name
FROM all_tables;
管理员查看数据库中的表:
SELECT owner, table_name
FROM dba_tables;
13、查看表结构
SQL*Plus 中:
DESC users;
或者:
DESCRIBE users;
例如:
Name Type
------------- ----------------
USER_ID NUMBER
USERNAME VARCHAR2(64)
REAL_NAME VARCHAR2(50)
REGISTER_TIME TIMESTAMP
14、创建表 CREATE TABLE
例如:
CREATE TABLE users (
user_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
username VARCHAR2(64) NOT NULL,
real_name VARCHAR2(50),
phone VARCHAR2(20),
register_time TIMESTAMP DEFAULT SYSTIMESTAMP,
CONSTRAINT pk_users
PRIMARY KEY (user_id),
CONSTRAINT uq_users_username
UNIQUE (username)
);
15、指定 Tablespace 创建表
CREATE TABLE users (
user_id NUMBER PRIMARY KEY,
username VARCHAR2(64)
)
TABLESPACE ecommerce_data;
表示:
对象:
ECOMMERCE_TRAINING.USERS
数据存储:
ECOMMERCE_DATA Tablespace
16、修改表 ALTER TABLE
16.1 添加字段
ALTER TABLE users
ADD email VARCHAR2(100);
16.2 修改字段
ALTER TABLE users
MODIFY email VARCHAR2(200);
16.3 删除字段
ALTER TABLE users
DROP COLUMN email;
16.4 重命名字段
ALTER TABLE users
RENAME COLUMN real_name TO full_name;
16.5 重命名表
RENAME users TO customer_users;
17、删除表
DROP TABLE users;
Oracle 默认可能将表放入 Recycle Bin。
彻底删除:
DROP TABLE users PURGE;
如果存在依赖约束:
DROP TABLE users
CASCADE CONSTRAINTS PURGE;
18、TRUNCATE TABLE
删除表中全部数据:
TRUNCATE TABLE users;
特点:
表还存在
结构还存在
数据全部删除
和:
DELETE FROM users;
不是完全相同的操作。
TRUNCATE 属于 DDL,通常速度更快,并会隐式提交,不能像普通未提交的 DELETE 一样通过 ROLLBACK 撤销。
19、表数据 INSERT 增加
19.1 插入一条数据
INSERT INTO users (
username,
real_name,
phone
)
VALUES (
'zhangsan',
'张三',
'13800138000'
);
19.2 插入后提交
COMMIT;
Oracle 的 DML 操作通常需要关注事务。
INSERT
UPDATE
DELETE
↓
COMMIT
20、SELECT 查询数据
查询所有数据:
SELECT *
FROM users;
查询指定字段:
SELECT user_id,
username,
real_name
FROM users;
20.1 WHERE 条件
SELECT *
FROM users
WHERE user_id = 100;
20.2 AND
SELECT *
FROM products
WHERE price > 100
AND stock > 0;
20.3 OR
SELECT *
FROM orders
WHERE order_status = '已完成'
OR order_status = '下单成功';
20.4 IN
SELECT *
FROM orders
WHERE order_status IN (
'已完成',
'下单成功'
);
20.5 BETWEEN
SELECT *
FROM products
WHERE price BETWEEN 100 AND 500;
20.6 LIKE
SELECT *
FROM users
WHERE username LIKE 'zhang%';
20.7 NULL
查询 NULL:
SELECT *
FROM payments
WHERE payment_time IS NULL;
不能写成:
payment_time = NULL
21、ORDER BY 排序
升序:
SELECT *
FROM products
ORDER BY price ASC;
降序:
SELECT *
FROM products
ORDER BY price DESC;
22、限制查询行数
Oracle 12c+:
SELECT *
FROM products
ORDER BY price DESC
FETCH FIRST 10 ROWS ONLY;
分页:
SELECT *
FROM products
ORDER BY product_id
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY;
23、UPDATE 修改数据
例如:
UPDATE products
SET price = 199.99
WHERE product_id = 100;
然后:
COMMIT;
同时修改多个字段:
UPDATE products
SET price = 299.99,
stock = 500
WHERE product_id = 100;
注意:
如果没有:
WHERE
例如:
UPDATE products
SET price = 100;
将修改整张表。
24、DELETE 删除数据
删除指定数据:
DELETE FROM users
WHERE user_id = 100;
提交:
COMMIT;
删除全部数据:
DELETE FROM users;
注意:
DELETE FROM users;
会删除整张表中的所有记录。
25、事务 COMMIT / ROLLBACK
例如:
UPDATE products
SET price = 999
WHERE product_id = 1;
如果确认修改:
COMMIT;
如果还没有提交,希望撤销:
ROLLBACK;
基本关系:
INSERT
UPDATE
DELETE
│
├── COMMIT
│ ↓
│ 提交
│
└── ROLLBACK
↓
回滚
26、SAVEPOINT 保存点
例如:
SAVEPOINT step1;
执行:
UPDATE products
SET price = 100
WHERE product_id = 1;
再:
SAVEPOINT step2;
继续修改:
UPDATE products
SET price = 200
WHERE product_id = 2;
如果只想撤销到 step2:
ROLLBACK TO step2;
最后:
COMMIT;
27、聚合查询
统计记录数量:
SELECT COUNT(*)
FROM orders;
求和:
SELECT SUM(total_amount)
FROM orders;
平均值:
SELECT AVG(price)
FROM products;
最大值:
SELECT MAX(price)
FROM products;
最小值:
SELECT MIN(price)
FROM products;
28、GROUP BY
例如统计不同订单状态数量:
SELECT order_status,
COUNT(*) AS order_count
FROM orders
GROUP BY order_status;
28.1 HAVING
SELECT user_id,
COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 100;
29、多表 JOIN
例如查询订单及用户名:
SELECT
o.order_id,
o.order_no,
u.username,
o.total_amount
FROM orders o
JOIN users u
ON o.user_id = u.user_id;
29.1 LEFT JOIN
SELECT
u.username,
o.order_no
FROM users u
LEFT JOIN orders o
ON u.user_id = o.user_id;
30、创建索引
创建普通索引:
CREATE INDEX idx_users_username
ON users(username);
组合索引:
CREATE INDEX idx_orders_user_time
ON orders(user_id, created_at);
30.1 查看索引
当前 Schema:
SELECT index_name,
table_name
FROM user_indexes;
30.2 删除索引
DROP INDEX idx_users_username;
31、主键 PRIMARY KEY
创建表时:
CREATE TABLE users (
user_id NUMBER,
username VARCHAR2(64),
CONSTRAINT pk_users
PRIMARY KEY(user_id)
);
32、外键 FOREIGN KEY
例如:
CREATE TABLE orders (
order_id NUMBER PRIMARY KEY,
user_id NUMBER NOT NULL,
CONSTRAINT fk_orders_user
FOREIGN KEY(user_id)
REFERENCES users(user_id)
);
关系:
USERS
│
│ user_id
↓
ORDERS
33、UNIQUE 唯一约束
ALTER TABLE users
ADD CONSTRAINT uq_users_username
UNIQUE(username);
34、CHECK 约束
Oracle 没有 MySQL ENUM 这种列类型时,可以使用:
gender VARCHAR2(3)
CHECK (gender IN ('男','女'))
例如:
ALTER TABLE users
ADD CONSTRAINT ck_users_gender
CHECK (gender IN ('男','女'));
35、查看约束
SELECT constraint_name,
constraint_type,
table_name
FROM user_constraints;
常见:
P = Primary Key
R = Foreign Key
U = Unique
C = Check / Not Null 等检查约束
36、View 视图
创建视图:
CREATE VIEW completed_orders AS
SELECT *
FROM orders
WHERE order_status = '已完成';
查询:
SELECT *
FROM completed_orders;
删除:
DROP VIEW completed_orders;
37、Sequence 序列
现代 Oracle 可以使用 Identity:
id NUMBER GENERATED BY DEFAULT AS IDENTITY
传统 Oracle 中也经常使用 Sequence。
创建:
CREATE SEQUENCE users_seq
START WITH 1
INCREMENT BY 1;
获取下一个值:
SELECT users_seq.NEXTVAL
FROM dual;
插入:
INSERT INTO users(
user_id,
username
)
VALUES(
users_seq.NEXTVAL,
'zhangsan'
);
查看当前值:
SELECT users_seq.CURRVAL
FROM dual;
删除:
DROP SEQUENCE users_seq;
38、执行 SQL 文件
SQL*Plus 中:
@/path/to/file.sql
例如:
@/tmp/ecommerce_training_oracle.sql
也可以:
START /tmp/ecommerce_training_oracle.sql
39、Oracle 数据导入导出
Oracle 常用的逻辑导入导出工具是:
Data Pump
对应:
expdp
↓
Data Pump Export
impdp
↓
Data Pump Import
Data Pump 导出的文件通常为:
.dmp
40、创建 DIRECTORY
Data Pump 通常通过 Oracle DIRECTORY 对象访问服务器上的目录。
例如:
CREATE DIRECTORY ecommerce_backup
AS '/opt/oracle/backup';
给用户权限:
GRANT READ, WRITE
ON DIRECTORY ecommerce_backup
TO ecommerce_training;
注意:
Oracle DIRECTORY
只是数据库中的目录对象,它所指向的操作系统目录需要真实存在,并且 Oracle 数据库进程需要具有相应文件系统权限。
41、查看 DIRECTORY
SELECT directory_name,
directory_path
FROM dba_directories;
42、expdp 导出 Schema
例如:
expdp system/123456@127.0.0.1:1521/FREEPDB1 \
schemas=ECOMMERCE_TRAINING \
directory=ECOMMERCE_BACKUP \
dumpfile=ecommerce_training.dmp \
logfile=ecommerce_training_export.log
产生:
ecommerce_training.dmp
ecommerce_training_export.log
其中:
.dmp
↓
实际导出的数据库数据
.log
↓
导出日志
43、impdp 导入 Schema
例如:
impdp system/123456@127.0.0.1:1521/FREEPDB1 \
schemas=ECOMMERCE_TRAINING \
directory=ECOMMERCE_BACKUP \
dumpfile=ecommerce_training.dmp \
logfile=ecommerce_training_import.log
44、导出指定表
例如:
expdp system/123456@127.0.0.1:1521/FREEPDB1 \
tables=ECOMMERCE_TRAINING.USERS,ECOMMERCE_TRAINING.ORDERS \
directory=ECOMMERCE_BACKUP \
dumpfile=ecommerce_tables.dmp \
logfile=ecommerce_tables.log
45、导入指定表
impdp system/123456@127.0.0.1:1521/FREEPDB1 \
tables=ECOMMERCE_TRAINING.USERS,ECOMMERCE_TRAINING.ORDERS \
directory=ECOMMERCE_BACKUP \
dumpfile=ecommerce_tables.dmp \
logfile=ecommerce_tables_import.log
46、导出整个数据库
管理员可以根据权限和环境使用:
expdp system/密码@127.0.0.1:1521/FREEPDB1 \
full=y \
directory=BACKUP_DIR \
dumpfile=full_backup.dmp \
logfile=full_backup.log
是否适合直接使用 SYSTEM、以及 FULL=Y 所需权限,需要根据实际 Oracle 环境配置。
生产环境通常会创建专门的备份账号并遵循最小权限原则。
47、Data Pump 常见参数
常见:
DIRECTORY
↓
Oracle Directory 对象
DUMPFILE
↓
导出的 .dmp 文件
LOGFILE
↓
日志文件
SCHEMAS
↓
导出/导入指定 Schema
TABLES
↓
指定表
FULL
↓
全库模式
CONTENT
↓
控制导入/导出内容
例如只导出结构:
expdp ... content=METADATA_ONLY
只处理数据:
CONTENT=DATA_ONLY
48、SQL 文件和 Data Pump 的区别
例如:
ecommerce_training.sql
通常是:
DDL
INSERT
UPDATE
PL/SQL
等可阅读 SQL 文本。
而:
ecommerce_training.dmp
是 Oracle Data Pump 的 Dump 文件。
因此:
.sql
↓
SQL 脚本
可以直接阅读、修改、学习
.dmp
↓
Oracle Data Pump Dump
主要通过 expdp / impdp 管理
49、Oracle 数据库备份
需要区分两个概念:
Data Pump
↓
逻辑导出 / 导入
RMAN
↓
Oracle 数据库物理备份与恢复
所以:
expdp / impdp
更准确地说是:
数据的逻辑导出和导入工具。
而 Oracle 正式的物理备份与恢复工具主要是:
RMAN
Recovery Manager
50、RMAN 基本连接
连接目标数据库:
rman target /
也可以根据实际环境使用 Oracle Net 连接:
rman target sys/密码@服务名
51、查看 RMAN 配置
进入 RMAN:
SHOW ALL;
52、RMAN 备份数据库
最基本的命令:
BACKUP DATABASE;
53、备份数据库和归档日志
数据库运行在合适的 ARCHIVELOG 配置下时,常见备份形式:
BACKUP DATABASE PLUS ARCHIVELOG;
54、查看 RMAN Backup
LIST BACKUP;
查看备份摘要:
LIST BACKUP SUMMARY;
55、验证数据库文件
VALIDATE DATABASE;
56、RMAN 恢复基本概念
RMAN 中常见:
RESTORE
↓
从备份中恢复物理文件
RECOVER
↓
应用恢复所需要的日志,使数据恢复到一致状态
因此:
RESTORE DATABASE;
RECOVER DATABASE;
不是完全相同的两个操作。
真正执行全库恢复前,需要根据数据库当前状态、控制文件、归档日志、恢复目标等制定恢复流程,不能在生产数据库上直接照抄简单命令。
57、Data Pump 和 RMAN 对比
| 工具 | 作用 |
|---|---|
| expdp | 逻辑导出 |
| impdp | 逻辑导入 |
| RMAN | 物理备份和恢复 |
| SQL Script | DDL/DML 脚本 |
简单理解:
想迁移一个 Schema / 几张表
↓
expdp / impdp
想做 Oracle 数据库级物理备份
↓
RMAN
想保存建表语句、测试数据、初始化程序
↓
.sql
58、查看当前 Session
管理员:
SELECT username,
status,
machine,
program
FROM v$session
WHERE username IS NOT NULL;
59、查看数据库对象
当前 Schema:
SELECT object_name,
object_type
FROM user_objects
ORDER BY object_type,
object_name;
例如可以看到:
TABLE
INDEX
VIEW
SEQUENCE
PROCEDURE
FUNCTION
TRIGGER
60、查看表属于哪个 Tablespace
SELECT table_name,
tablespace_name
FROM user_tables;
例如:
TABLE_NAME TABLESPACE_NAME
--------------- ----------------
USERS ECOMMERCE_DATA
PRODUCTS ECOMMERCE_DATA
ORDERS ECOMMERCE_DATA
这条命令非常适合理解:
Table
↓
存储在
↓
Tablespace
61、查看表占用空间
SELECT segment_name,
segment_type,
tablespace_name,
bytes / 1024 / 1024 AS size_mb
FROM user_segments
ORDER BY bytes DESC;
可以观察:
Table / Index
↓
Segment
↓
Tablespace
62、查看当前 Schema
当前用户:
SELECT USER
FROM dual;
当前 Schema:
SELECT SYS_CONTEXT(
'USERENV',
'CURRENT_SCHEMA'
)
FROM dual;
63、常用数据字典速查
当前用户的表:
SELECT *
FROM user_tables;
当前用户能够访问的表:
SELECT *
FROM all_tables;
所有用户:
SELECT *
FROM dba_users;
所有表空间:
SELECT *
FROM dba_tablespaces;
Datafile:
SELECT *
FROM dba_data_files;
当前用户对象:
SELECT *
FROM user_objects;
当前用户索引:
SELECT *
FROM user_indexes;
当前用户约束:
SELECT *
FROM user_constraints;
当前用户权限:
SELECT *
FROM user_sys_privs;
当前用户角色:
SELECT *
FROM user_role_privs;
64、Oracle 常用命令分类总结
数据库连接
sqlplus
lsnrctl
用户管理
CREATE USER
ALTER USER
DROP USER
用户授权
GRANT
REVOKE
CREATE ROLE
Tablespace
CREATE TABLESPACE
ALTER TABLESPACE
DROP TABLESPACE
表结构
CREATE TABLE
ALTER TABLE
DROP TABLE
TRUNCATE TABLE
数据操作
INSERT
SELECT
UPDATE
DELETE
即常说的:
CRUD
对应:
Create
↓
INSERT
Read
↓
SELECT
Update
↓
UPDATE
Delete
↓
DELETE
事务
COMMIT
ROLLBACK
SAVEPOINT
索引
CREATE INDEX
DROP INDEX
视图
CREATE VIEW
DROP VIEW
数据逻辑导入导出
expdp
impdp
数据库物理备份恢复
RMAN
65、最常用命令速记
登录
sqlplus system/123456@127.0.0.1:1521/FREEPDB1
查看当前用户
SHOW USER;
查看当前 PDB
SHOW CON_NAME;
查看表
SELECT table_name
FROM user_tables;
查看表结构
DESC users;
创建用户
CREATE USER test
IDENTIFIED BY "123456"
DEFAULT TABLESPACE users;
允许登录
GRANT CREATE SESSION TO test;
允许创建表
GRANT CREATE TABLE TO test;
设置 Quota
ALTER USER test
QUOTA UNLIMITED ON users;
创建表
CREATE TABLE users (
id NUMBER PRIMARY KEY,
username VARCHAR2(100)
);
插入
INSERT INTO users
VALUES (1, 'zhangsan');
查询
SELECT *
FROM users;
修改
UPDATE users
SET username = 'lisi'
WHERE id = 1;
删除数据
DELETE FROM users
WHERE id = 1;
提交
COMMIT;
回滚
ROLLBACK;
删除表
DROP TABLE users PURGE;
删除用户及 Schema 对象
DROP USER test CASCADE;
66、Oracle 常用操作完整流程
一个新的业务系统通常可以按照下面的思路进行:
① Oracle / Instance 已经启动
↓
② 连接业务 PDB
↓
③ 创建 Tablespace
↓
④ 创建 User
↓
⑤ 设置 Tablespace Quota
↓
⑥ GRANT 用户权限
↓
⑦ 使用业务用户登录
↓
⑧ CREATE TABLE
↓
⑨ 创建 Index / Constraint / View 等对象
↓
⑩ INSERT / SELECT / UPDATE / DELETE
↓
⑪ COMMIT / ROLLBACK
↓
⑫ expdp 做逻辑导出
↓
⑬ impdp 做逻辑导入
↓
⑭ RMAN 做数据库级物理备份与恢复
最终需要建立的整体概念:
Oracle Instance
│
↓
Database / CDB
│
↓
PDB
│
├───────────────┐
↓ ↓
User/Schema Tablespace
│ │
↓ ↓
Table/View/Index Datafile
│ .dbf
↓
INSERT / SELECT
UPDATE / DELETE
│
↓
COMMIT / ROLLBACK
逻辑导入导出
↓
expdp / impdp
物理备份恢复
↓
RMAN
67、一句话总结
Oracle 日常管理可以概括为:使用 SQL*Plus/JDBC 等客户端通过 Listener 和 Service 连接数据库/PDB;使用
CREATE USER、GRANT、REVOKE管理用户和权限;使用CREATE/ALTER/DROP TABLESPACE管理逻辑存储;使用CREATE/ALTER/DROP TABLE管理表结构;使用INSERT/SELECT/UPDATE/DELETE操作数据;使用COMMIT/ROLLBACK管理事务;使用expdp/impdp进行逻辑导入导出;使用 RMAN 进行数据库级物理备份和恢复。
浙公网安备 33010602011771号