Oracle 超全常用命令与内置函数实战文档
文档前言
本文档汇总Oracle运维命令、DDL/DML语句、高阶查询、系统视图查询、全套内置函数、分页、分析函数、数据泵、锁排查、性能排查等高频实战内容,内容全面、无冗余、可直接复制粘贴至Word,适合开发、运维日常备查使用。
适配说明:全文结构化分层,代码块统一规整,粘贴Word后可直接排版打印。
一、数据库基础连接与环境配置
1.1 常用登录命令
sql # 本地超级管理员登录 sqlplus / as sysdba
# 普通用户登录 sqlplus 用户名/密码
# 远程登录 sqlplus 用户名/密码@IP:1521/服务名
# 静默登录(不输出提示) sqlplus -s 用户名/密码 |
1.2 SQLPlus 环境美化配置(必用)
sql -- 设置行宽、页高,解决换行错乱 set linesize 300; set pagesize 200; set long 9999; set colsep ' '; set feedback off; set heading on; set timing on; -- 显示SQL执行时间 set serveroutput on; -- 开启打印输出
-- 基础查询 show user; -- 查看当前登录用户 select user from dual; clear screen; -- 清屏 |
二、数据库启停与状态查询(运维必备)
2.1 数据库启停
sql -- 启动数据库 startup;
-- 正常关闭(等待事务结束) shutdown immediate;
-- 强制关闭(生产慎用,应急使用) shutdown abort;
-- 只读启动 startup mount; alter database open read only; |
2.2 数据库基础状态查询
sql -- 查看数据库版本 select banner from v$version;
-- 查看实例状态、实例名 select instance_name,status,startup_time from v$instance;
-- 查看数据库名称、日志模式(归档/非归档) select name,log_mode,open_mode from v$database;
-- 查看数据库服务名 select value from v$parameter where name='service_names';
-- 查看数据库字符集 select userenv('language') from dual; |
三、用户与权限、角色管理(高频)
3.1 用户创建与管理
sql -- 创建用户+指定表空间+无限配额 create user test_dev identified by Test@123 default tablespace users temporary tablespace temp quota unlimited on users;
-- 修改用户密码 alter user test_dev identified by New@123;
-- 锁定/解锁用户 alter user test_dev account lock; alter user test_dev account unlock;
-- 删除用户(级联删除所有对象) drop user test_dev cascade; |
3.2 权限授予与回收
sql -- 基础登录权限 grant create session to test_dev;
-- 常用开发对象权限 grant create table,create view,create sequence,create synonym to test_dev;
-- 资源角色(开发必备,拥有建表等所有资源权限) grant resource to test_dev;
-- DBA管理员权限 grant dba to test_dev;
-- 回收权限 revoke dba,resource from test_dev;
-- 授予查询其他用户表权限 grant select on scott.emp to test_dev; |
3.3 用户权限查询语句(新增扩充)
sql -- 查询当前用户拥有的角色 select * from user_role_privs;
-- 查询指定用户的角色权限 select * from dba_role_privs where grantee='TEST_DEV';
-- 查询用户系统权限 select * from dba_sys_privs where grantee='TEST_DEV';
-- 查询用户对象权限 select * from dba_tab_privs where grantee='TEST_DEV'; |
四、表空间与数据文件管理(运维核心)
4.1 表空间全面查询语句
sql -- 1、查询所有表空间状态 select tablespace_name,status,contents,extent_management from dba_tablespaces;
-- 2、查询表空间使用率(精准使用率,生产常用) SELECT A.TABLESPACE_NAME, TOTAL_SIZE/1024/1024 TOTAL_MB, (TOTAL_SIZE-FREE_SIZE)/1024/1024 USED_MB, FREE_SIZE/1024/1024 FREE_MB, ROUND((TOTAL_SIZE-FREE_SIZE)/TOTAL_SIZE*100,2) USED_RATE FROM ( SELECT TABLESPACE_NAME,SUM(BYTES) TOTAL_SIZE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME ) A, ( SELECT TABLESPACE_NAME,SUM(BYTES) FREE_SIZE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) B WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME ORDER BY USED_RATE DESC;
-- 3、查询临时表空间使用率 select tablespace_name,used_blocks,free_blocks from v$temp_space_header;
-- 4、查询数据文件路径、大小、自动扩展 select file_name,bytes/1024/1024 size_mb,autoextensible,maxbytes/1024/1024 max_size_mb from dba_data_files; |
4.2 表空间操作语句
sql -- 创建永久表空间 create tablespace dev_ts datafile '/u01/app/oracle/oradata/orcl/dev_ts01.dbf' size 200m autoextend on next 100m maxsize 4096m;
-- 新增数据文件 alter tablespace dev_ts add datafile '/u01/app/oracle/oradata/orcl/dev_ts02.dbf' size 200m;
-- 手动扩容数据文件 alter database datafile '/u01/app/oracle/oradata/orcl/dev_ts01.dbf' resize 500m;
-- 删除表空间及数据文件 drop tablespace dev_ts including contents and datafiles; |
五、数据表 DDL 全量操作
5.1 建表与复制表
sql -- 标准建表(含约束、默认值) create table user_info( id number(10) primary key, username varchar2(50) not null, phone varchar2(20), status number(2) default 1, create_time date default sysdate, remark varchar2(500) );
-- 仅复制表结构(无数据) create table user_info_bak as select * from user_info where 1=0;
-- 复制表结构+所有数据 create table user_info_bak2 as select * from user_info; |
5.2 表结构修改操作
sql -- 新增字段 alter table user_info add email varchar2(100);
-- 修改字段类型/长度 alter table user_info modify email varchar2(150);
-- 重命名字段 alter table user_info rename column email to user_email;
-- 删除字段 alter table user_info drop column user_email;
-- 表重命名 rename user_info to sys_user;
-- 添加唯一约束 alter table sys_user add constraint uk_user_phone unique(phone);
-- 添加非空约束 alter table sys_user modify username not null; |
5.3 表查询相关实用语句
sql -- 查询当前用户所有表 select table_name from user_tables order by table_name;
-- 查询指定用户所有表 select table_name from dba_tables where owner='TEST_DEV';
-- 查询表字段详情 select column_name,data_type,data_length,nullable,data_default from user_tab_columns where table_name='SYS_USER';
-- 查询表约束 select constraint_name,constraint_type,column_name from user_cons_columns join user_constraints using(constraint_name) where table_name='SYS_USER'; |
六、DML 增删改查 + 条件查询
sql -- 插入数据 insert into sys_user(id,username,phone) values(1,'张三','13800138000'); commit;
-- 批量插入 insert into sys_user(id,username,phone) select id,username,phone from sys_user_bak;
-- 更新数据 update sys_user set status=2 where id=1; commit;
-- 删除数据 delete from sys_user where id=1; commit;
-- 基础条件查询 select * from sys_user where status=1 and create_time>sysdate-7;
-- 模糊查询 select * from sys_user where username like '%张%';
-- 范围查询 select * from sys_user where id between 1 and 100;
-- 空值判断 select * from sys_user where phone is null; select * from sys_user where phone is not null;
-- 去重查询 select distinct username from sys_user; |
七、Oracle 全套内置函数(重点扩充)
7.1 字符串函数(高频最全)
sql -- 大小写转换 select upper('oracle') from dual; -- 大写 select lower('ORACLE') from dual; -- 小写
-- 字符串拼接 select concat('Hello','Oracle') from dual; select 'Hello'||'Oracle' from dual;
-- 截取字符串 substr(字段,起始位置,长度) select substr('ABCDEFG',1,3) from dual; -- ABC
-- 字符串长度 select length('测试') from dual;
-- 去除空格 select ltrim(' 123') from dual; -- 左空格 select rtrim('123 ') from dual; -- 右空格 select trim(' 123 ') from dual; -- 首尾空格
-- 替换字符串 select replace('abc123','123','456') from dual;
-- 查找字符位置 select instr('abcdef','c') from dual;
-- 补齐字符 select lpad('123',5,'0') from dual; -- 00123 select rpad('123',5,'0') from dual; -- 12300 |
7.2 数字函数
sql -- 四舍五入 select round(3.1415,2) from dual;
-- 向上取整、向下取整 select ceil(2.1) from dual; select floor(2.9) from dual;
-- 取绝对值 select abs(-100) from dual;
-- 取余数 select mod(10,3) from dual;
-- 幂运算、开方 select power(2,3) from dual; select sqrt(16) from dual; |
7.3 日期函数(开发最常用)
sql -- 当前系统时间 select sysdate from dual; select systimestamp from dual; -- 带毫秒
-- 日期加减 select sysdate+1 from dual; -- 加1天 select sysdate-1/24 from dual; -- 减1小时
-- 月份加减 select add_months(sysdate,1) from dual; -- 加1月 select add_months(sysdate,-1) from dual; -- 减1月
-- 当月最后一天 select last_day(sysdate) from dual;
-- 两个日期月份差 select months_between(sysdate,to_date('2025-01-01','yyyy-mm-dd')) from dual;
-- 日期截断(清零时分秒) select trunc(sysdate) from dual;
-- 提取年月日 select extract(year from sysdate) from dual; select extract(month from sysdate) from dual; select extract(day from sysdate) from dual; |
7.4 转换函数
sql -- 字符串转日期 select to_date('2025-12-01','yyyy-mm-dd') from dual;
-- 日期转字符串 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
-- 数字转字符串 select to_char(12345) from dual;
-- 字符串转数字 select to_number('12345') from dual; |
7.5 逻辑判断函数
sql -- 空值处理 nvl(字段,默认值) select nvl(null,0) from dual; select nvl(phone,'暂无号码') from sys_user;
-- 双空值判断 select nvl2(phone,'有号码','无号码') from sys_user;
-- decode 条件判断(Oracle专属) select decode(status,1,'正常',2,'禁用','未知') from sys_user;
-- case when 多条件判断 select id,username, case status when 1 then '正常' when 2 then '禁用' else '未知' end as status_name from sys_user; |
7.6 聚合函数(分组统计)
sql select count(*) total_num, -- 总条数 count(phone) have_phone, -- 非空手机号数量 max(id) max_id, min(id) min_id, avg(id) avg_id, sum(id) sum_id from sys_user;
-- 分组查询 select status,count(*) num from sys_user group by status;
-- 分组条件筛选 select status,count(*) num from sys_user group by status having count(*)>10; |
八、Oracle 分析函数(高阶查询必备)
sql -- 行号排序(分页、排名必备) select username, row_number() over(order by id) rn, -- 连续行号 1,2,3 rank() over(order by id) rk, -- 跳跃排名 1,2,2,4 dense_rank() over(order by id) drk -- 密集排名 1,2,2,3 from sys_user;
-- 分组排名 select status,username, row_number() over(partition by status order by id) rn from sys_user;
-- 累计求和 select id,sum(id) over(order by id) sum_total from sys_user; |
九、索引、视图、序列、同义词
9.1 索引操作+索引查询
sql -- 普通索引 create index idx_user_name on sys_user(username);
-- 复合索引 create index idx_user_status_time on sys_user(status,create_time);
-- 唯一索引 create unique index idx_user_phone on sys_user(phone);
-- 查询表所有索引 select index_name,column_name,index_type from user_ind_columns join user_indexes using(index_name) where table_name='SYS_USER';
-- 删除索引 drop index idx_user_name; |
9.2 视图、序列、同义词
sql -- 创建视图 create view v_user_normal as select id,username,phone from sys_user where status=1;
-- 创建自增序列 create sequence seq_user_id start with 1 increment by 1 nocache nomaxvalue; select seq_user_id.nextval from dual;
-- 创建同义词(简化访问) create synonym su for sys_user; |
十、Oracle 标准分页查询(最全写法)
sql -- 1、基础分页 1-10条 select * from ( select t.*,rownum rn from sys_user t ) where rn between 1 and 10;
-- 2、排序分页(生产常用) select * from ( select t.*,rownum rn from ( select * from sys_user order by create_time desc ) t ) where rn between 11 and 20;
-- 3、分析函数分页(高效) select * from ( select t.*,row_number() over(order by id desc) rn from sys_user t ) where rn between 21 and 30; |
十一、运维排查核心查询(锁、会话、性能)
11.1 锁查询与解锁
sql -- 查询锁阻塞会话 SELECT S.SID,S.SERIAL#,S.USERNAME,S.MACHINE,S.PROGRAM,S.STATUS, L.TYPE,O.OBJECT_NAME FROM V$SESSION S JOIN V$LOCK L ON S.SID=L.SID LEFT JOIN DBA_OBJECTS O ON L.ID1=O.OBJECT_ID WHERE L.TYPE IN ('TX','TM');
-- 杀死锁会话 alter system kill session 'SID,SERIAL#'; alter system kill session '156,8972' immediate; |
11.2 会话、连接数查询
sql -- 查询所有在线会话 select sid,serial#,username,machine,program,status,logon_time from v$session where username is not null;
-- 查询当前总连接数、活跃连接数 select count(*) total_conn from v$session; select count(*) active_conn from v$session where status='ACTIVE'; |
11.3 慢SQL、执行计划查询
sql -- 查看SQL执行计划 explain plan for select * from sys_user where username='张三'; select * from table(dbms_xplan.display());
-- 查询近期高耗时SQL select sql_id,elapsed_time/1000000 cost_sec,sql_text from v$sql order by elapsed_time desc; |
十二、数据泵导入导出 expdp/impdp
sql -- 创建数据泵目录 create directory dump_dir as '/u01/oracle/dump'; grant read,write on directory dump_dir to test_dev;
-- 导出整用户 expdp test_dev/123456 directory=dump_dir dumpfile=dev_user.dmp schemas=test_dev
-- 导出指定表 expdp test_dev/123456 directory=dump_dir dumpfile=user_table.dmp tables=sys_user
-- 导入数据 impdp test_dev/123456 directory=dump_dir dumpfile=dev_user.dmp full=y |
十三、日常高频备查SQL(新增扩充)
sql -- 查询当前用户所有视图 select view_name from user_views;
-- 查询所有序列 select sequence_name from user_sequences;
-- 查询表数据量 select table_name,num_rows from user_tables;
-- 查询数据库归档状态 select log_mode,archive_change# from v$database;
-- 查询重做日志文件 select group#,member,status from v$logfile;
-- 查询参数配置 select name,value from v$parameter where name like '%memory%'; |
附件:Oracle 超全常用命令与内置函数实战文档.docx