oracle 领航_数据字典

数据库中所有模式对象的信息
表,视图,簇,索引
多少空间
列
约束完整性
Oracle


//-----------------------
静态数据字典

动态数据字典
反映数据库实例运行的信息..

//------------------------
静态数据字典
dba_*
 dba_tables,
 dba_segments
 dba_indexes
all_*
 all_tagles
 all_segments
 all_indexes
user_*
 user_tables,
 user_segments
 user_indexes..
//--------------------------
desc dba_users;//整个数据库所有用户(全局)
desc all_users;//当前用户可以看到用户信息??? 
desc user_users;//当前用户下相关用户信息



//-------------------------------------------------
由于sys 有dba 权限看到是一样的
实验一:创建新用户查询不同的数据字典...



create user tom identified by tom;
grant create session,resource,select_catalog_role to tom;

sqlplus tom/tom@abc

select username,created from dba_users;//23行
select username,created from all_users;//23行同样
select username,created from user_users;//1行

DBA_*意为DBA拥有的或可以访问的所有的对象。
ALL_*意为某一用户拥有的或可以访问的所有的对象。
USER_*意为某一用户所拥有的所有的对象。


不是一一对应的
select * from dba_data_files;
但是没有all_data_files;user_data_files;
//---------------------------------------------
实例二;
select * from dba_tables;//1104 行
select * from all_tables;//34   行
select * from user_tables;//0行 还没有创建表..

//-------------------------------------------
动态数据字典
v$--本地(当前实例)动态视图
 v$instance;
 v$log;
 v$lock;
gv$*(RAC架构下所有实例)
  gv$instance;
  gv$log;

//---------------------------------
数据字典中有多少个视图
select * from dict;//1738行
如果你想知道哪些有表相关的视图 
SELECT table_name from dict where table_name like '%TAB%';
  
//-------------------------------
oracle 数据字典的基表
是保存数据的真正表
数据字典视图的数据来自于基表
oracle不对基表做支持和解释
select * from v$fixed_table 
where name like 'X$%' and rownum<10;
  
select * from x$bh;///sys查询块头
//-----------------------------------
如何知道哪个视图使用的哪些基表
看执行记划就可以
set autotrace trace exp;
SET AUTOTRACE OFF //关闭执行计划
select * from v$lock;
--------------------------------------------------------------------------------------------
| Id  | Operation                | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT         |                 |     1 |   143 |     1 (100)| 00:00:01 |
|   1 |  NESTED LOOPS            |                 |     1 |   143 |     1 (100)| 00:00:01 |
|*  2 |   HASH JOIN              |                 |     1 |   108 |     1 (100)| 00:00:01 |
|*  3 |    FIXED TABLE FULL      | X$KSUSE         |     1 |    32 |     0   (0)| 00:00:01 |
|   4 |    VIEW                  | GV$_LOCK        |    10 |   760 |     0   (0)| 00:00:01 |
|   5 |     UNION-ALL            |                 |       |       |            |          |
|*  6 |      FILTER              |                 |       |       |            |          |
|   7 |       VIEW               | GV$_LOCK1       |     2 |   152 |     0   (0)| 00:00:01 |
|   8 |        UNION-ALL         |                 |       |       |            |          |
|*  9 |         FIXED TABLE FULL | X$KDNSSF        |     1 |   102 |     0   (0)| 00:00:01 |
|* 10 |         FIXED TABLE FULL | X$KSQEQ         |     1 |   102 |     0   (0)| 00:00:01 |
|* 11 |      FIXED TABLE FULL    | X$KTADM         |     1 |   102 |     0   (0)| 00:00:01 |
|* 12 |      FIXED TABLE FULL    | X$KTATRFIL      |     1 |   102 |     0   (0)| 00:00:01 |
|* 13 |      FIXED TABLE FULL    | X$KTATRFSL      |     1 |   102 |     0   (0)| 00:00:01 |
|* 14 |      FIXED TABLE FULL    | X$KTATL         |     1 |   102 |     0   (0)| 00:00:01 |
|* 15 |      FIXED TABLE FULL    | X$KTSTUSC       |     1 |   102 |     0   (0)| 00:00:01 |
|* 16 |      FIXED TABLE FULL    | X$KTSTUSS       |     1 |   102 |     0   (0)| 00:00:01 |
|* 17 |      FIXED TABLE FULL    | X$KTSTUSG       |     1 |   102 |     0   (0)| 00:00:01 |
|* 18 |      FIXED TABLE FULL    | X$KTCXB         |     1 |   102 |     0   (0)| 00:00:01 |
|* 19 |   FIXED TABLE FIXED INDEX| X$KSQRS (ind:1) |     1 |    35 |     0   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------
user_tables 当前用户可以使用的表
table_name       //t1
tablespace_name  //users
num_rows;        //
read_only
compression 是否压缩的.
segment_created 什么时候创建的

//---------------------------------
查询分区表的信息
如果是分区表是没什么表空间的信息..
user_tab_partitions
select * from user_tab_partitions;

//----------------------------------------
案例 :
创建分区表
drop table t_par purge;//从回收站清空表
create table t_part(id int,name varchar(20))
partition by range(id)
(partition p1 values less than(5),
 partition p2 values less than(10),
 partition p3 values less than(maxvalue));

insert into t_part values(1,'tom1');
insert into t_part values(4,'tom4');
insert into t_part values(9,'tom9');
insert into t_part values(20,'tom20');


SQL> select * from t_part;
select * from t_part partition(p1);
select * from t_part partition(p2);
select * from t_part partition(p3);


        ID NAME
---------- --------------------
         1 tom1
         4 tom4
         9 tom9
        20 tom20
        
        
select * from user_tables;
select * from user_tab_partitions;

TABLE_NAME                     COM PARTITION_NAME
------------------------------ --- ------------------------------
T_PART                         NO  P1
T_PART                         NO  P2
T_PART                         NO  P3

SQL> select * from user_tables;

TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
T1                             USERS
T_PART

//分区表没有表空间的信息
//----------------------------------------------
实验2:
将不同的分区添加到不同的表空间中

select * from v$tablespace;
         9 TOM                            YES NO  YES
        10 TOM2                           YES NO  YES

       TS# NAME                           INC BIG FLA E
---------- ------------------------------ --- --- --- -
        11 JERRY                          YES NO  YES
alter table t_part move partition p2 tablespace tom;
alter table t_part move partition p1 tablespace tom2;

//--------------------------------------------------
查看用户表上创建索引信息
SELECT * FROM user_indexes;
CREATE INDEX t1_id on t1(id);

SQL> SELECT * FROM user_indexes;
INDEX_NAME                     INDEX_TYPE
------------------------------ ---------------------------
T1_ID                          NORMAL


//---------------------------------------
创建分区索引
create index idx_t_part on t_part(id) local tablespace tom2;
select * from user_ind_partitions;


//###################################
当前对象所有用户...
select * from user_segments
当前用户所有对象大小 
select sum(t.bytes) from user_segments t;
SQL> select segment_name,(sum(t.bytes)/1024) as kb from user_segments t group by segment_name;
SEGMENT_NAME                                                                              KB
--------------------------------------------------------------------------------- ----------
T1_ID                                                                                     64
T1                                                                                        64
IDX_T_PART                                                                               192
T_PART                                                                                   192

//################################################3
数据库表空间,数据文件,多大
col file_name for a100;
select * from dba_data_files;
select * from dba_temp_files;


//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$44
动态视图
select * from v$instance;
数据库三个状态
startup nomount; //启动实例
select status from v$instance;
SQL> select status from v$instance;
STATUS
------------------------
STARTED
 alter database mount;
 SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database open;
数据库已更改。
SQL> select status from v$instance;
STATUS
------------
OPEN
//########################################3
select name,created from v$database;
查看数据库是否是归档
archive log list;

SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            D:devoracledata	estarchive
最早的联机日志序列     163
下一个存档日志序列   167
当前日志序列           167


//--------------------------------------
查看在线日志
DESC V$LOG;

desc v$logfile;//日志文件物理位置
select * from v$logfile;

//------------------------------
select * from v$session;
select machine from v$session;//从哪台机器上发起会话

/--------------------------
实验开一个窗口定位问题
sqlplus tom/tom@abc;
select count(*) from t1;
select distinct sid from v$mystat;//10

另一个窗口
select sql_id from v$session where sid = 10;
5bc0v4my7dvr5

select cpu_time,elapsed_time,sql_text from v$sql
where sql_id='5bc0v4my7dvr5';

  CPU_TIME ELAPSED_TIME SQL_TEXT
-----------------------------------------
  0      34080(毫秒)         select count(*) from t1

//--------------------------------
v$session_wait; 等待
select event,seconds_in_wait from 
v$session_wait
where sid = 10;

SQL*Net message from client          637[秒]

等待客户端发的指令..


//------------------------------------
锁;
主键表..

sqlplus tom/tom@abc
drop table t1;
create table t1(id int primary key);
insert into t1 values(1);
commit;
select  distinct sid from v$mystat;//251
update t1 set id = 2 where id = 1;



sqlplus tom/tom@abc
select * from t1;
update t1 set id = 3 where id = 1;
阻塞



select sid,type,lmode,request,block from v$lock
where type in('TM','TX');

       SID TY      LMODE    REQUEST      BLOCK
---------- -- ---------- ---------- ----------
        10 TX          0          6          0
        10 TM          3          0          0
       251 TM          3          0          0
       251 TX          6          0          1


SELECT session_id,object_id,
       locked_mode from 
       v$locked_object
       where session_id in(251,10);


SESSION_ID  OBJECT_ID LOCKED_MODE
---------- ---------- -----------
        10      16259           3
       251      16259           3

10 251 二个session 争一个对象 

//---------------------------------
二人争什么对象呢?
select object_name from dba_objects where object_id=16259;

OBJECT_NAME
----------------
T1

争t1表

//-------------------------------------------------
原文地址:https://www.cnblogs.com/kaka100/p/3614578.html