数据库中所有模式对象的信息 表,视图,簇,索引 多少空间 列 约束完整性 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表 //-------------------------------------------------