Oracle常用语句总结(后期续更)

Oracle常用语句总结

    • 一、查看表空间占用情况
      • 1. 查看表空间占用情况
      • 2. 创建表空间
    • 二、数据库情况查询
      • 1. 查询数据库版本
      • 2. 查询连接数
        • 2.1 数据库连接数
          • 2.1.1 查询数据库当前进程的连接数
          • 2.1.2 查询数据库当前session会话的连接数
          • 2.1.3 数据库的并发连接数
          • 2.1.4 查看当前数据库建立的会话情况
          • 2.1.5 查看数据库允许的最大连接数
          • 2.1.6 修改最大连接数
      • 3. 查找数据表被哪些存储过程调用过
      • 4. 查找存储过程被哪些其他存储过程调用过
      • 5. 查找含有某个字段的表名
      • 6. 查询表之间的关联
        • 6.1 查询表的键的约束(例如主键约束)
        • 6.2 查询所有应用到该键的记录
      • 7. PL/SQL提示资源正忙,或者表被锁住
        • 7.1 找出被锁的对象,定位具体是哪一个session
        • 7.2 查看造成锁的索引
        • 7.3 杀死占用资源的session
      • 8. 使用sysdba用户:查询整体oracle
        • 8.1 查询有哪些数据库
        • 8.2 查询实例名
        • 8.3 查询数据库域名
        • 8.4 查询数据库服务器
        • 8.5 数据库服务名
    • 三、数据库用户
      • 1. 查看用户
      • 2. 创建用户
      • 3. 修改用户密码
      • 4. 用户授权
        • 4.1 授予用户登录权限
        • 4.2 授予用户使用表空间的权限
        • 4.3 授予用户删除表的权限
        • 4.4 授予用户插入表的权限
        • 4.5 授予用户修改表的权限
        • 4.6 授予用户查询表的权限
        • 4.7 授予用户创建视图的权限
        • 4.8 授予用户三种标准角色
          • 4.8.1 connect角色
          • 4.8.2 resource角色
          • 4.8.3 dba角色
        • 4.9 授权函数使用权限
        • 4.10 取消授权
        • 4.11 查看用户权限
      • 5. 用户删除
      • 6. 解锁用户
      • 6. 查看当前用户属性
      • 7. 查看当前表空间角色
      • 8. 查看当前用户的缺省表空间
      • 9. 查看当前有哪些用户正在使用数据
    • 四、数据库表
      • 1. 创建表
      • 2. 备份表
      • 3. 更新表
        • 3.1 方法一:末尾加 for update(容易把表锁住)
        • 3.2 方法二:加rowid(推荐)
    • 五、Oracle函数
      • 1. over():开窗函数
      • 2. rownum:加序号
      • 3. row_number():加序号
      • 4. hextoraw() :十六进制字符串转换为raw串
      • 5. rawtohex():将raw串转换为十六进制
      • 6. 获取系统时间年月日
      • 7. sys_guid():生成全球唯一16字节的标识符
      • 8. substr():字符串截取
      • 9. instr():字符串查找返回位置下标
      • 10. listagg():列记录聚合为一条记录,实现列转行
      • 11. regexp_??():正则表达式
        • 11.1 regexp_like():模糊匹配
        • 11.2 regexp_instr():模糊匹配的位置下标
        • 11.3 regexp_substr():模糊匹配截取字符串
        • 11.4 regexp_replace():模糊匹配替换字符串

一、查看表空间占用情况

1. 查看表空间占用情况

SELECT a.tablespace_name "表空间名",b.total/1024/1024 表空间大小M,a.free/1024/1024 表空间剩余大小M,
(b.total-a.free)/1024/1024 表空间使用大小M,
ROUND((b.total-a.free)/b.total,4)*100 "使用率 %"
FROM 
 (SELECT tablespace_name,SUM(bytes) free FROM DBA_FREE_SPACE GROUP BY tablespace_name ) a,
(SELECT tablespace_name,SUM(bytes) total FROM DBA_DATA_FILES GROUP BY tablespace_name) b
WHERE a.tablespace_name=b.tablespace_name;

Oracle常用语句总结(后期续更)_第1张图片

2. 创建表空间

create tablespace 表空间名
datafile 'C:\oracledata\表空间存储的位置名.dbf' --表位置
size 100m  -- 表空间大小                         
autoextend on -- 自动扩容                       
next 10m; --扩容大小

二、数据库情况查询

1. 查询数据库版本

select * from v$version;

Oracle常用语句总结(后期续更)_第2张图片

2. 查询连接数

2.1 数据库连接数

2.1.1 查询数据库当前进程的连接数
select count(*) from v$process;

Oracle常用语句总结(后期续更)_第3张图片

2.1.2 查询数据库当前session会话的连接数
select count(*) from v$session;

Oracle常用语句总结(后期续更)_第4张图片

2.1.3 数据库的并发连接数
select count(*) from v$session where status='ACTIVE';

Oracle常用语句总结(后期续更)_第5张图片

2.1.4 查看当前数据库建立的会话情况
select sid,serial# as session的序列号,username,program,machine,status from v$session;

Oracle常用语句总结(后期续更)_第6张图片

2.1.5 查看数据库允许的最大连接数
select value from v$parameter where name='processes';

Oracle常用语句总结(后期续更)_第7张图片

2.1.6 修改最大连接数
alter system set processes=最大连接数值 scope=spfile;
  • 修改processes和sessions值,需要重启oracle生效
shutdown immediate;  --关闭实例
startup; --启动实例

3. 查找数据表被哪些存储过程调用过

select *from user_dependencies r where r.referenced_name = '表名';

4. 查找存储过程被哪些其他存储过程调用过

select *from user_source a where a.text like '%存储过程名%'

5. 查找含有某个字段的表名

select * from dba_tab_columns where column_name = '字段名'

6. 查询表之间的关联

6.1 查询表的键的约束(例如主键约束)

select *from user_constraints e where e.table_name='表名'

6.2 查询所有应用到该键的记录

select b.table_name, b.column_name from user_constraints a 
	inner join user_cons_columns b on a.constraint_name = b.constrain_name 
	where a.r_constraint_name = '上条sql查出的具体键对应的约束名'

7. PL/SQL提示资源正忙,或者表被锁住

7.1 找出被锁的对象,定位具体是哪一个session

select i.session_id, o.owner, o.object_name from v$locked_object i, dba_objects o where i.object_id = o.object_id; 

7.2 查看造成锁的索引

select s.username, s.sid, s.serial#, 
		s.logon_time from v$locked_object o, v$session s 
		where o.session_id = s.sid order by s.logon_time desc;

7.3 杀死占用资源的session

sid和serial从上一条sql可获取到

alter system kill session '具体的sid, 具体对应的serial'

8. 使用sysdba用户:查询整体oracle

8.1 查询有哪些数据库

select name,dbid from v$database;  
-- 或者 
show parameter db_name;

8.2 查询实例名

select instance_name from v$instance;   
-- 或者
show parameter instance_name;

8.3 查询数据库域名

select value from v$parameter where name='db_domain';   
-- 或者
show parameter domain;

8.4 查询数据库服务器

select value from v$parameter where name='service_names';   
-- 或者
show parameter service;   
-- 或者
show parameter names;

8.5 数据库服务名

此参数是数据库标识类参数,用service_name表示。数据库如果有域,则数据库服务名就是全局数据库名;如果没有,则数据库服务名就是数据库名。查询:

show parameter service_name;

三、数据库用户

1. 查看用户

select * from dba_users;

2. 创建用户

create user 用户名 identified by 用户名密码;

-- 指定表空间
default tablespace 表空间名字;
-- 指定临时表空间
temporary tablespace 临时表空间名字(默认系统temp;

3. 修改用户密码

-- 特殊字符用双引号引起来
alter user 用户名 identified by 新密码;

4. 用户授权

4.1 授予用户登录权限

grant create session to 用户名;

4.2 授予用户使用表空间的权限

grant unlimited tablespace to 用户名;

4.3 授予用户删除表的权限

grant drop any table to 用户名;

4.4 授予用户插入表的权限

grant insert any table to 用户名;

4.5 授予用户修改表的权限

grant update any table to 用户名;

4.6 授予用户查询表的权限

grant select on 表名 to 用户名;

4.7 授予用户创建视图的权限

  • 其余类似,将语句中的create修改为其他操作
grant create view to 用户名;

4.8 授予用户三种标准角色

4.8.1 connect角色

Connect 角色:是授予最终用户的典型权利,最基本的权利,能够连接到Oracle数据库中,并在对其他用户的表有访问权限时,做select、update、insert 等操作。

grant connect to 用户名;

-- with admin option的意思是被授予该权限的用户有权将某个权限(如create any table)授予其他用户或角色,取消是不级联的。
grant connect to 用户名 with admin option;

-- 取消是级联的
grant connect to 用户名 with grant option;
4.8.2 resource角色

Resouce角色:是授予开发人员的,能在自己的方案中创建表、序列、视图等。

grant resource to 用户名;
4.8.3 dba角色

DBA角色:是授予系统管理员的,拥有该角色的用户就能成为系统管理员了,它拥有所有的系统权限。

grant dba to 用户名;

4.9 授权函数使用权限

grant execute on 函数名称 to 用户名;

4.10 取消授权

-- 取消所有表的查询权限
revoke select any table from 用户名;

-- 取消某个表的查询权限
revoke select on 表名 from 用户名;

4.11 查看用户权限

select * from dba_role_privs;

Oracle常用语句总结(后期续更)_第8张图片

5. 用户删除

drop user 用户名;

-- cascade:级联
-- 删除数据库用户及名下的所有表和视图
drop user 用户名 cascade;

6. 解锁用户

  • 一般数据库默认是10次尝试失败后锁住,数据库参数文件中设置了输错密码的次数,登录时当输错密码的次数超过所设置的次数时,则锁住该用户。
select * from dba_profiles where resource_name='FAILED_LOGIN_ATTEMPTS';

Oracle常用语句总结(后期续更)_第9张图片

-- 提示 ORA-28000:the account is locked
alter user 用户名 account unlock;

6. 查看当前用户属性

select * from user_users;

在这里插入图片描述

7. 查看当前表空间角色

select * from dba_roles;

8. 查看当前用户的缺省表空间

  • 缺省表:默认自动创建的表
select username,default_tablespace from user_users;

Oracle常用语句总结(后期续更)_第10张图片

9. 查看当前有哪些用户正在使用数据

SELECT osuser, a.username,cpu_time/executions/1000000||'s', b.sql_text,machine
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc;

在这里插入图片描述

四、数据库表

1. 创建表

create table t_name
(
xh varchar2(20) not null primary key,
xm varchar2(60),
CSRQ date
)
comment on table t_nameis '姓名表';
comment on column t_name.xh is '学号';

2. 备份表

create table 备份表名 as select * from 需要备份的表名;

Oracle常用语句总结(后期续更)_第11张图片

3. 更新表

3.1 方法一:末尾加 for update(容易把表锁住)

select *from 表名 for update;

3.2 方法二:加rowid(推荐)

select t.rowid, t.* from 表名;

五、Oracle函数

1. over():开窗函数

over:开窗函数,通过over()函数,对明细数据再次进行分组,然后聚合
第一大类:聚合开窗函数====》聚合函数(列) OVER (选项),这里的选项可以是PARTITION BY子句,但不可是ORDER BY子句

第二大类:排序开窗函数====》排序函数(列) OVER(选项),这里的选项可以是ORDER BY子句,也可以是 OVER(PARTITION BY子句 ORDER BY子句),但不可以是PARTITION BY子句

2. rownum:加序号

select  rownum,t.* from (select * from 表名 order by t.需要排序的字段名) t;

Oracle常用语句总结(后期续更)_第12张图片

3. row_number():加序号

select row_number() over (order by t.需要排序的字段名) 序号的别名,t.* from 表名 t;

Oracle常用语句总结(后期续更)_第13张图片

4. hextoraw() :十六进制字符串转换为raw串

  • dual:是一个虚拟表,只有一条数据
  • hextoraw:char 、 VARCHAR2 、 NCHAR 或 NVARCHAR2 数据类型中包含十六进制数字的 char 转换为原始值

Oracle常用语句总结(后期续更)_第14张图片

5. rawtohex():将raw串转换为十六进制

Oracle常用语句总结(后期续更)_第15张图片

6. 获取系统时间年月日

trunc():对值进行截断
Oracle常用语句总结(后期续更)_第16张图片

7. sys_guid():生成全球唯一16字节的标识符

select sys_guid() from 表名;

Oracle常用语句总结(后期续更)_第17张图片

8. substr():字符串截取

substr(源字符串,符串截取的起始下标负数表示从倒数第几个字符开始,字符串截取长度)
Oracle常用语句总结(后期续更)_第18张图片

9. instr():字符串查找返回位置下标

instr(源字符串,查找的字符串,[开始查找的位置,查找第几次出现])
Oracle常用语句总结(后期续更)_第19张图片

10. listagg():列记录聚合为一条记录,实现列转行

listagg(需要拼接汇总的列名, '连接符') within group(order by 按照排序的列名)Oracle常用语句总结(后期续更)_第20张图片

11. regexp_??():正则表达式

11.1 regexp_like():模糊匹配

regexp_like(列名,正则表达式)

-- 数字开头的
select * from test where regexp_like(str,'^[0-9]');
-- 从头到位都是数字
select * from test where regexp_like(str,'^[0-9]+$')
-- 字段中是数字或者是字母组成
select * from test where regexp_like(str,'^[a-z]|[0-9]$','i');
-- 从头到位都是字母
select * from test where regexp_like(str,'^[A-Z]+$','i');

Oracle常用语句总结(后期续更)_第21张图片

11.2 regexp_instr():模糊匹配的位置下标

regexp_instr(列名,正则表达式,[开始查找位置默认1,查找第几次出现,模式i不区分大小写c区分大小写,是否含有子表达式])

-- 从第一个位置开始查找第2次出现非数字的位置
select '1,23,456,7890', 
       regexp_instr('1,23,456,7890', '[^0-9]+',1,2)
from dual;

Oracle常用语句总结(后期续更)_第22张图片

11.3 regexp_substr():模糊匹配截取字符串

regexp_substr(列名,正则表达式,[开始查找位置默认1,查找第几次出现,模式i不区分大小写c区分大小写,是否含有子表达式])

-- 拆分邮箱
select '[email protected]',
       regexp_substr('[email protected]','[a-zA-Z0-9]+') 邮箱名, 
       regexp_substr('[email protected]', '\@[a-zA-Z0-9]+\.[a-zA-Z0-9]+') 邮箱后缀 
from dual;

-- 匹配固定电话号码和手机号码
select regexp_substr('0755-11112222','^0[0-9]{2,3}-[0-9]{6,7}') 固定电话,
       regexp_substr('15866668888','^1[0-9]{10}') 手机号码,
from dual;

Oracle常用语句总结(后期续更)_第23张图片
Oracle常用语句总结(后期续更)_第24张图片

11.4 regexp_replace():模糊匹配替换字符串

regexp_replace(列名,正则表达式,[替换的字符串,替换第几次出现,模式i不区分大小写c区分大小写])

select 'abc123',
       regexp_replace('abc123', '[0-9]', 'A', 1) 将数字替换为A,
       regexp_replace('abc123', '[0-9]') 将数字替换为空
from dual;

Oracle常用语句总结(后期续更)_第25张图片

你可能感兴趣的:(数据库相关,oracle,dba,数据库)