心宇

FDF24DCED8C6738F8313A6D3B073C3F4

首页 管理

本笔记以 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 进行数据库级物理备份和恢复。

posted on 2026-09-30 10:13  心宇16969  阅读(17)  评论(0)    收藏  举报