📖 Oracle 命令速查

按使用场景分组,点击"复制"按钮一键复制命令

连接与基本信息
sqlplus 连接(服务名)
sqlplus user/password@<service_name>
sqlplus 以管理员连接
sqlplus sys/password AS SYSDBA
查看当前用户
SELECT USER FROM DUAL;
查看数据库版本
SELECT * FROM v$version;
disql 连接达梦数据库
disql user/password@<server>
用户与权限
创建用户
CREATE USER <user> IDENTIFIED BY "密码";
修改密码
ALTER USER <user> IDENTIFIED BY "新密码";
授予基础角色
GRANT CONNECT, RESOURCE TO <user>;
授权指定表权限
GRANT SELECT, INSERT, UPDATE ON <schema>.<table> TO <user>;
授权表全部权限
GRANT ALL PRIVILEGES ON <schema>.<table> TO <user>;
删除用户(含其对象)⚠️
DROP USER <user> CASCADE;
表空间
创建表空间
CREATE TABLESPACE <tbs> DATAFILE '/u01/app/oracle/oradata/<db>/<tbs>.dbf' SIZE 10G AUTOEXTEND ON;
查看表空间及大小
SELECT tablespace_name, status FROM dba_tablespaces;
查看表空间使用率
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024/1024,2) AS size_gb FROM dba_data_files GROUP BY tablespace_name;
表结构与序列
创建表(Oracle 常用类型)
CREATE TABLE <table> (id NUMBER(19) PRIMARY KEY, name VARCHAR2(64) NOT NULL, created DATE DEFAULT SYSDATE);
查看表结构
DESC <table>;
查看当前用户所有表
SELECT table_name FROM user_tables ORDER BY table_name;
生成建表语句
SELECT DBMS_METADATA.GET_DDL('TABLE', '<table>') FROM DUAL;
创建序列
CREATE SEQUENCE seq_<table> START WITH 1 INCREMENT BY 1;
取序列下一个值(写入时用)
SELECT seq_<table>.NEXTVAL FROM DUAL;
取序列当前值
SELECT seq_<table>.CURRVAL FROM DUAL;
分页与日期函数
分页(ROWNUM 写法,12c 前)
SELECT * FROM (SELECT a.*, ROWNUM rn FROM (<sql> ) a WHERE ROWNUM <= <offset+size>) WHERE rn > <offset>;
分页(FETCH FIRST,12c+)
SELECT * FROM <table> OFFSET <offset> ROWS FETCH NEXT <size> ROWS ONLY;
字符串日期转 DATE
SELECT TO_DATE('2026-01-01', 'YYYY-MM-DD') FROM DUAL;
日期格式化输出
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
索引执行计划与锁
创建索引
CREATE INDEX idx_<col> ON <table> (<col>);
生成执行计划
EXPLAIN PLAN FOR <sql>;
查看执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
查看锁信息
SELECT sid, type, id1 FROM v$lock WHERE block = 1;
查看阻塞会话(关联 v$session)
SELECT a.sid, a.serial#, a.username, a.status FROM v$session a JOIN v$lock l ON a.sid = l.sid WHERE l.block = 1;
行级锁
SELECT * FROM <table> WHERE <col> = <val> FOR UPDATE;
闪回查询(按时间点)
SELECT * FROM <table> AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE) WHERE <cond>;
闪回表到指定时间 ⚠️ 需开启闪回
FLASHBACK TABLE <table> TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
达梦兼容
达梦兼容提示
DM8 兼容 Oracle 大部分语法(表空间 / 用户 / 序列 / 包),以上命令可直接复用;差异:VARCHAR2 默认按字节(Oracle 11g 同),部分高级特性(闪回、DBMS_METADATA)需在 DM 手册核对