千家信息网

oracle基本操作和查锁

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,oracle基本操作desc all_tables; --查看表结构select * from all_tables;--查看当前数据库所有的表select table_name from user_
千家信息网最后更新 2025年12月03日oracle基本操作和查锁

oracle基本操作
desc all_tables; --查看表结构
select * from all_tables;--查看当前数据库所有的表
select table_name from user_tables;查看当前登录的用户的表:
select * from dba_users;查看有哪些用户
sqlplus system/oracle as sysdba 登录dba用户

--与视图有关的表
select * from user_views
select * from dba_views

--涉及到查看表空间和数据文件的几个表
SELECT * FROM dba_free_space --查看表空间剩余空间
select * from dba_temp_files; --查看临时表空间
select * from dba_tablespaces --查看表空间
select * from dba_data_files --查看数据文件位置
SELECT * FROM user_source --查看存储过程

--与索引有关的表
select * from user_tables
select * from all_indexes where table_name = 'TEST1';
select* from all_ind_columns where table_name = 'TEST1';
select * from user_ind_columns where index_name='TIME_IDX1';
select * from user_indexes where table_name='TEST1';

查看oracle中被占用的表,分析AWR报告耗时,分析瓶颈时使用
例如:想删除一张表或者更改表时卡住了,可以用如下语句查看

(1)查看是否有SQL语句在占用这张表
查看谁在占用
select sess.INST_ID, sess.machine,
sess.program, sess.sql_id,
sess.sid, sess.serial#,
sess.PROCESS
lo.oracle_username, lo.os_user_name,
lo.locked_mode,
ao.object_name, ao.object_type,
ao.status,
from gv$locked_object lo, dba_objects ao, gv$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid
and sess.username = 'SCOTT'
--杀掉进程 sid,serial#
alter system kill session'10,11562';

(2)查看是否有会话没有结束
SQL> select username,sid,serial#,paddr,status from v$session where username='SCOTT';
USERNAME SID SERIAL# PADDR STATUS

SCOTT 1 281 000000008E51C510 KILLED
SCOTT 20 362 000000008E491150 INACTIVE
SCOTT 21 175 000000008E48D050 INACTIVE
SCOTT 28 169 000000008E51C510 KILLED

SQL> select PROGRAM from v$process where addr='000000008E490110';
PROGRAM
oracle@master.example.com

--杀掉进程 sid,serial#
alter system kill session '1,281';
alter system kill session '20,362';
alter system kill session '21,175';
alter system kill session '28,169';
SQL> drop user scott cascade;
User dropped.

oracle数据库小知识:
rebuild 和 rebuild online的区别
alter index rebuild online:实质上是扫描表而不是扫描现有的索引块来实现索引的重建
alter index rebuild:只扫描现有的索引块来实现索引的重建。
rebuild index online在执行期间不会阻塞DML操作,但在开始和结束阶段,需要请求模式为4的TM锁。因此,如果在rebuild index online开始前或结束时,有其它长时间的事物在运行,很有可能就造成大量的锁等待。也就是说在执行前仍会产生阻塞, 应该避免排他锁,所以需要晚上停掉应用后进行操作.
而rebuild index在执行期间会阻塞DML操作, 但速度较快.
两者重建索引时的扫描方式不同,
rebuild用的是"INDEX FAST FULL SCAN",
rebuild online用的是"TABLE ACCESS FULL";
即rebuild index是扫描索引块,而rebuild index online是扫描全表的数据块.

  1. 把索引与对应的表放在不同的表空间。
    当读取一个表时表与索引是同时进行的。如果表与索引和在一个表空间里就会产生资源竞争,放在两个表空间中可并行执行。
  2. 如果一个表很大,建立索引的时间很长,建立索引时可以设置为不产生redo信息。

Oracle默认五块,设置成5的整数倍。

--与视图有关的表
select from user_views
select
from dba_views

--涉及到查看表空间和数据文件的几个表
SELECT FROM dba_free_space; --查看表空间剩余空间
select
from dba_temp_files; --查看临时表空间
select from dba_tablespaces; --查看表空间
select
from dba_data_files; --查看数据文件位置
SELECT * FROM user_source; --查看存储过程

--与索引有关的表
select from user_tables
select
from all_indexes where table_name = 'TEST1';
select from all_ind_columns where table_name = 'TEST1';
select
from user_ind_columns where index_name='TIME_IDX1';
select * from user_indexes where table_name='TEST1';

1.创建表空间
创建表test_data和索引空间test_idx,数据文件放在/oracle/oracle/oradata/orcl/这里,大小1G。
create tablespace test_data datafile '/oracle/oracle/oradata/orcl/test_data01.dbf' size 1024M;
create tablespace test_idx datafile '/oracle/oracle/oradata/orcl/test_idx01.dbf' size 1024M;
select * from datafile
2.创建用户
创建用户test1放在表空间test_data中
create user test1 identified by test1 default tablespace test_data;
DROP USER test1 CASCADE --删除用户
3.授权给新用户
grant connect, resource,create session,CREATE SYNONYM ,create view,select any table TO test1;
revoke xxx on xxxtab to test1; --撤销权限
4.登录新用户创建表指定表空间
创建一个表test1指定表空间 test_data
为表test1创建一个索引,指定索引空间 test_idx
create table test1 (id number(5), create_date varchar2 (20),charg_date varchar2 (20)) tablespace test_data;

create index time_idx1 on test1 (create_date) tablespace test_idx;
create index time_idx2 on test1 (create_date,charg_date) tablespace test_idx;
create index time_idx3 on test1 (chage_date) tablespace test_idx;

drop index TIME_IDX1; --删除索引    

alter table test1.test1 rename column charg_date to chage_date;-- 修改字段名
alter table test1.test1 modify (chage_date nvarchar2(20)); -- 修改字段类型
comment on column T_00970001.C_009700010003 is '处罚事由';
comment on column test1.id is '创建id';
comment on column test1.create_date is '创建时间';
comment on column test1.chage_date is '修改时间';
5.创建一个视图
索引和视图都占用真实表空间,创建时尽量规划
create view v_test1 as select * from test1.test1; --主要是不想每次都输入前面的test1
commit;
DROP VIEW v_test1; --删除视图
6.导入数据

beginfor i in 1..80loopinsert into test1.TEST1 (id,create_date,chage_date) values (i,to_char(SYSDATE-i),to_char(SYSDATE-i,'yyyymmddhh34miss'));END LOOP;commit; 

END;

7.测试
几个可以用全表扫描更改为索引扫描的例子:
包含函数转换和运算符都是走TABLE ACCESS FULL
1.select from v_test1 where to_char(sysdate,'yyyymmdd') + 7 < to_char(sysdate,'yyyymmdd');
1.select
from v_test1 where chage_date < to_char(sysdate,'yyyymmddhh34miss') - 7;
1.select from v_test1 where to_char('chage_date') < '20191003073258';或者
select
from v_test1 where create_date < to_date('20191003','yyyy-mm-dd');
2.select from v_test1 where create_date < '03-oct-19';或者
select
from v_test1 where create_date < '03-10月-19';
--查1小时内的数据
1.select from test1 where (sysdate - to_date(chage_date,'yyyymmddhh34miss'))24 <=1;
2.select * from test1 where chage_date >= TO_CHAR((sysdate - 1/24),'yyyymmddhh34miss');

Alter Table test1 Add name varchar2(10); --为表增加一个字段name
update test1 set name='t1' where id ='1';
update test1 set name='t2' where id ='2';
update test1 set name='t3' where id ='3';

COLUMN 可以改变列标题
1). 改变缺省的列标题
2). 将列名NAME改为新列名EMPLOYEE NAME并将新列名放在两行上:
3). 改变列的显示长度:
4). 设置列标题的对齐方式
5). 不让一个列显示在屏幕上
7). 显示列值时,如果列值为NULL值,用text值代替NULL值
8). 设置一个列的回绕方式
9). 显示列的当前的显示属性值
10). 将所有列的显示属性设为缺省值
具体可以查看https://blog.csdn.net/xiazaixiazai2010/article/details/102622347

COLUMN
col 命令全称column
varchar2
col name for a20;
number
col id for 9999;

col ID for A60
col CREATE_DATE for A60
col CHAGE_DATE for A60
col NAME for A60

Execution Plan


0   SELECT STATEMENT Optimizer=CHOOSE
1  0  MERGE JOIN
2  1   SORT (JOIN)
3  2    NESTED LOOPS
4  3     TABLE ACCESS (FULL) OF 'B'
5  3     TABLE ACCESS (BY INDEX ROWID) OF 'A'
7  1   SORT (JOIN)
8  7    TABLE ACCESS (FULL) OF 'C'

8.索引创建思路
多表关联
优化的思路是由小到大,即从限制性最强,返回记录最少的连接开始,基本采用嵌套循环连接,依次完成其它表的连接,并在访问每张表时,合理使用索引,特别是复合索引技术。

复合索引
复合索引比单字段索引效率高多了,但是复合索引比单字段索引的内部原理复杂,复合索引有两个重要原则需要把握:前缀性和可选性。
国内很多IT系统开发人员没有意识到应该优先设计复合索引,更没有充分理解复合索引的前缀性和可选性两个重要原则。
前缀性:
查询中只要有复合索引条件中第一个字段为where后的查询值,就会使用到该复合索引
可选性:
字段值多的排在前面,可选性越强,定位的记录越少,查询效率越高

9.监控索引

查找这些不合理的索引:
1、根据原理去判断
这种情况肯定存在很多复合索引,可根据前缀性和可选择性两大原理,去分析这张表各字段的记录分布情况,自己做出合并、整合处理。
2、利用oracle索引监控特性
更保险的办法是,利用oracle9i开始提供的索引监控特性,在某个典型业务周期开始之前,执行索引启用监控功能,在典型业务周期结束以后,结束监控,查看v$object_usage视图,看哪个索引没有被采用,就删除。
索引碎片分析和整理
3、频繁对索引字段进行delete和update操作,会让索引产生大量的碎片,从而极大的影响索引的使用效率,并造成索引i/o的增加。
1、对索引碎片分析,如果索引的碎片空间超过20%,则理解索引碎片非常严重,则重建索引。
2、重建索引可以采用rebuild和coalesce的方法。

摘抄:
收集索引使用的统计信息:
ANALYZE INDEX time_idx1 VALIDATE STRUCTURE;
查看统计信息:
SELECT name, (DEL_LF_ROWS_LEN/LF_ROWS_LEN) * 100
AS wastage FROM index_stats;
当wastage 超过20%时,需要重建索引
ALTER INDEX time_idx1 REBUILD;
整合索引(与rebuild二者选一):
ALTER INDEX time_idx1 REBUILD;

导出awr报告:

索引 空间 数据 字段 用户 视图 文件 碎片 分析 监控 前缀 可选性 有关 两个 信息 效率 方式 时间 标题 查询 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 武大鸿蒙软件开发 网络安全的事件及其分析 网络安全法立的概念 兴义gpu云服务器 图片以路径存储数据库的app 互联网股票是是是科技股类的 网络安全小卫士的手抄报简单好看 华为郑州软件开发云创新中心 梦幻选择服务器排队扣点卡吗 方舟生存进化8818服务器 广东跑腿行业软件开发哪家比较好 软件开发类的工资待遇 软件测试计划数据库测试 配置代理服务器打不开网站 传家宝 不同服务器 福建智能化软件开发要多少钱 我国网络安全防护投入的数据 逻辑表 数据库怎么写 河北专科软件开发哪个学校好 德州市互联网科技公司 互联网下科技发展的弊端 海康服务器电源一闪一闪的 无法连接到服务器怎么办 Apex服务器是重生做的吗 李欢赌石小说我有一个数据库 深圳税控服务器管理系统 广东国正科技软件开发 诚实守信网络安全主题班会记录 东莞市长悦网络技术有限公司 计算机网络技术生涯规划书
0