前缀
- X$:基表
- V_$:基于X$表创建的动态性能视图。只有sys用户可以访问。
- V$: V$视图(前缀为V_$)的同义词,数据库管理员和其他用户通过同义词访问 V$视图,而不是直接访问V_$对象
补充一下老师问的问题
- 物理结构有哪些,分别查看一下
- 逻辑结构有哪些,分别查看一下
- 还有一个关于用户的,我忘了hh
1. 简单了解Oracle数据库具有哪些数据字典和动态性能视图。
- 数据字典:数据字典是Oracle数据管理系统的核心,它存储整个Oracle数据库的所有数据定义信息,如数据库的物理存储结构和逻辑存储结构,存储空间的分配使用情况数据库内的对象及其约束,以及用户、角色、权限设置等。Oracle数据字典由以下两种对象类型组成:
- 基表:大部分数据是以加密格式存储的,用户不应该直接访问基表。
- 用户访问视图:这些视图基于数据字典基表而创建,它们汇总数据字典基表内的信息,以可读的方式提供给用户使用。
- SYS用户拥有所有数据字典基表和用户访问视图,为了便于访问,Oracle为大部分视图创建了同名的public同义词。数据字典存储在system表空间内。
- 三组常用的数据字典视图:USER_,ALL_,DBA_
SQL> desc dict # 查看数据字典的结构
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
TABLE_NAME VARCHAR2(128)
COMMENTS VARCHAR2(4000)
SQL> select * from dict; # 查看数组字典中所有用户视图的名称及其描述
# 修改格式
SQL> column TABLE_NAME format a35
SQL> column COMMENTS format a35
# 很多,只截取了一点点
TABLE_NAME COMMENTS
----------------------------------- -----------------------------------
ional tables
USER_OBJECT_TABLES Description of the user’s own objec
t tables
USER_ALL_TABLES Description of all object and relat
ional tables owned by the user‘s
ALL_TABLES Description of relational tables ac
cessible to the user
- 动态性能视图:Oracle数据库运行过程中维护了一套动态性能视图,用于记录数据库的当前活动,管理员在进行会话管理、备份操作和性能调优时必须要使用它们。这些视图之所以被称之为动态性能视图,是因为在实例运行和数据库使用过程中,它们的内容不断地更新,而且其内容也主要与性能有关。与动态性能视图相关的对象分为以下三种:
- 基表:名称前缀为X$。它们不存储在数据库中,而是构建在0racle实例的内存结构内,所以又被称作虚拟表。普通用户不能直接访问X$表;
- 视图:基于X$表创建的动态性能视图,它们的名称前缀是V_$,又被称作V$视图。只有sys用户才能访问该视图。动态性能视图的结构定义及其基表中的数据都不能由用户修改,因此动态性能视图又被称作固定表;
- 同义词:Oracle为V$视图创建了public同义词,这些同义词的名称前缀为V$。数据库管理员和其他用户应该通过这些同义词访问V$视图,而不是直接访问V_$对象。
SQL> desc v$fixed_table # 查看动态性能视图
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(128)
OBJECT_ID NUMBER
TYPE VARCHAR2(5)
TABLE_NUM NUMBER
CON_ID NUMBER
SQL> select NAME,TYPE from v$fixed_table;# where rownum <= 10;
NAME TYPE
---------- ----------
X$KQFTA TABLE
X$KQFVI TABLE
X$KQFVT TABLE
X$KQFDT TABLE
X$KQFCO TABLE
X$KQFOPT TABLE
X$KYWMPCTA TABLE
B
X$KYWMWRCT TABLE
AB
NAME TYPE
---------- ----------
X$KYWMCLTA TABLE
B
X$KYWMNF TABLE
2. 使用数据字典或性能视图查询数据库的物理存储结构。
物理存储结构:控制文件,数据文件,重做日志文件。
- 控制文件:Oracle为了管理数据库的状态而维护的一个文件,记录了数据库的物理存储结构和其他控制信息。
SQL> desc v$controlfile # 查看控制文件结构信息
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
STATUS VARCHAR2(7)
NAME VARCHAR2(513)
IS_RECOVERY_DEST_FILE VARCHAR2(3)
BLOCK_SIZE NUMBER
FILE_SIZE_BLKS NUMBER
CON_ID NUMBER
SQL> select name from v$controlfile;# 查看控制文件名
NAME
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\CONTROL01.CTL
D:\ORACLE\ORADATA\ORCL\CONTROL02.CTL
SQL> show parameter control_files; # 通过初始化参数查询控制文件。是show parameter的一个小技巧,可以用于模糊查询
NAME TYPE VALUE
------------------------------------ ---------- ------------------------------
control_files string D:\ORACLE\ORADATA\ORCL\CONTROL
01.CTL, D:\ORACLE\ORADATA\ORCL
\CONTROL02.CTL
SQL> select name from v$controlfile; # 和上面一样
NAME
----------------------------------------
D:\ORACLE\ORADATA\ORCL\CONTROL01.CTL
D:\ORACLE\ORADATA\ORCL\CONTROL02.CTL
- 数据文件:存储表和索引数据,已经排序和散列等操作的中间结果。一个数据库包含一个或多个数据文件,一个数据文件只属于一个数据库。
SQL> desc dba_data_files # 查看数据文件结构信息
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
FILE_NAME VARCHAR2(513)
FILE_ID NUMBER
TABLESPACE_NAME VARCHAR2(30)
BYTES NUMBER
BLOCKS NUMBER
STATUS VARCHAR2(9)
RELATIVE_FNO NUMBER
AUTOEXTENSIBLE VARCHAR2(3)
MAXBYTES NUMBER
MAXBLOCKS NUMBER
INCREMENT_BY NUMBER
USER_BYTES NUMBER
USER_BLOCKS NUMBER
ONLINE_STATUS VARCHAR2(7)
LOST_WRITE_PROTECT VARCHAR2(7)
SQL> select FILE_NAME from dba_data_files;# 查看数据文件名
FILE_NAME
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF
D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
D:\ORACLE\ORADATA\ORCL\USERS01.DBF
- 重做日志文件:存储数据库的重做日志信息,记录数据库所产生的所有变化信息。
- v$log详细说明了重做日志文件的结构、属性以及动态变化情况。
- status是group的状态,current:正在使用,inactive:没有使用
- v$logfile说明了重做日志文件的物理地址和当前在线状态
- status指的是member的状态 ,blank:整除都是空,不管是否背斜,stale:备用状态
- v$log详细说明了重做日志文件的结构、属性以及动态变化情况。
SQL> desc v$log
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
GROUP# NUMBER
THREAD# NUMBER
SEQUENCE# NUMBER
BYTES NUMBER
BLOCKSIZE NUMBER
MEMBERS NUMBER
ARCHIVED VARCHAR2(3)
STATUS VARCHAR2(16)
FIRST_CHANGE# NUMBER
FIRST_TIME DATE
NEXT_CHANGE# NUMBER
NEXT_TIME DATE
CON_ID NUMBER
SQL> select GROUP#,MEMBERS,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- --------------------------------
1 1 INACTIVE
2 1 INACTIVE
3 1 CURRENT
SQL> select GROUP#,MEMBER,status from v$logfile;
GROUP# MEMBER STATUS
---------- ---------------------------------------- --------------
3 D:\ORACLE\ORADATA\ORCL\REDO03.LOG
2 D:\ORACLE\ORADATA\ORCL\REDO02.LOG
1 D:\ORACLE\ORADATA\ORCL\REDO01.LOG
3. 用数据字典查询数据库的逻辑存储结构。
逻辑结构包括:表空间,段,区,数据块
- 表空间:它位于逻辑存储结构的顶层,用于存储数据库中的所有数据,表空间内的数据被物理存放在数据文件中,一个表空间可以包含一个或多个数据文件。
- V$_是动态性能视图,存在于controlfile中,数据库在mount状态下可以查询,
- dba_是静态视图,存在于数据库中,只能在open时查询.
SQL> desc dba_tablespaces # 查看表空间静态试图
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
TABLESPACE_NAME NOT NULL VARCHAR2(30)
BLOCK_SIZE NOT NULL NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NOT NULL NUMBER
MAX_EXTENTS NUMBER
MAX_SIZE NUMBER
PCT_INCREASE NUMBER
MIN_EXTLEN NUMBER
STATUS VARCHAR2(9)
CONTENTS VARCHAR2(21)
LOGGING VARCHAR2(9)
FORCE_LOGGING VARCHAR2(3)
EXTENT_MANAGEMENT VARCHAR2(10)
ALLOCATION_TYPE VARCHAR2(9)
PLUGGED_IN VARCHAR2(3)
SEGMENT_SPACE_MANAGEMENT VARCHAR2(6)
DEF_TAB_COMPRESSION VARCHAR2(8)
RETENTION VARCHAR2(11)
BIGFILE VARCHAR2(3)
PREDICATE_EVALUATION VARCHAR2(7)
ENCRYPTED VARCHAR2(3)
COMPRESS_FOR VARCHAR2(30)
DEF_INMEMORY VARCHAR2(8)
DEF_INMEMORY_PRIORITY VARCHAR2(8)
DEF_INMEMORY_DISTRIBUTE VARCHAR2(15)
DEF_INMEMORY_COMPRESSION VARCHAR2(17)
DEF_INMEMORY_DUPLICATE VARCHAR2(13)
SHARED VARCHAR2(13)
DEF_INDEX_COMPRESSION VARCHAR2(8)
INDEX_COMPRESS_FOR VARCHAR2(13)
DEF_CELLMEMORY VARCHAR2(14)
DEF_INMEMORY_SERVICE VARCHAR2(12)
DEF_INMEMORY_SERVICE_NAME VARCHAR2(1000)
LOST_WRITE_PROTECT VARCHAR2(7)
CHUNK_TABLESPACE VARCHAR2(1)
SQL> select TABLESPACE_NAME,block_size from dba_tablespaces; # 查看各表名和大小
TABLESPACE_NAME BLOCK_SIZE
------------------------------------------------------------ ----------
SYSTEM 8192
SYSAUX 8192
UNDOTBS1 8192
TEMP 8192
USERS 8192
SQL> desc v$tablespace # 查看表空间动态性能试图
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
TS# NUMBER
NAME VARCHAR2(30)
INCLUDED_IN_DATABASE_BACKUP VARCHAR2(3)
BIGFILE VARCHAR2(3)
FLASHBACK_ON VARCHAR2(3)
ENCRYPT_IN_BACKUP VARCHAR2(3)
CON_ID NUMBER
SQL> select name from v$tablespace;
NAME
------------------------------------------------------------
SYSAUX
SYSTEM
UNDOTBS1
USERS
TEMP
SYSTEM
SYSAUX
UNDOTBS1
TEMP
SYSTEM
SYSAUX
NAME
------------------------------------------------------------
UNDOTBS1
TEMP
USERS
已选择 14 行。
- 段:用于存储和隔离不同数据库对象的数据。Oracle数据库中的段分为表段、索引段、回滚段和临时段四种。
SQL> desc dba_segments
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(128)
SEGMENT_NAME VARCHAR2(128)
PARTITION_NAME VARCHAR2(128)
SEGMENT_TYPE VARCHAR2(18)
SEGMENT_SUBTYPE VARCHAR2(10)
TABLESPACE_NAME VARCHAR2(30)
HEADER_FILE NUMBER
HEADER_BLOCK NUMBER
BYTES NUMBER
BLOCKS NUMBER
EXTENTS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
MAX_SIZE NUMBER
RETENTION VARCHAR2(7)
MINRETENTION NUMBER
PCT_INCREASE NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
RELATIVE_FNO NUMBER
BUFFER_POOL VARCHAR2(7)
FLASH_CACHE VARCHAR2(7)
CELL_FLASH_CACHE VARCHAR2(7)
INMEMORY VARCHAR2(8)
INMEMORY_PRIORITY VARCHAR2(8)
INMEMORY_DISTRIBUTE VARCHAR2(15)
INMEMORY_DUPLICATE VARCHAR2(13)
INMEMORY_COMPRESSION VARCHAR2(17)
CELLMEMORY VARCHAR2(24)
SQL> select owner,segment_name,segment_type from dba_segments where owner='SYS';
# 只获取前10行,加上条件rownum <= 10
OWNER SEGMENT_NAME SEGMENT_TYPE
---------- -------------------- --------------------
SYS PROXY_DATA$ TABLE
SYS OBJ$ TABLE
SYS BOOTSTRAP$ TABLE
SYS UNDO$ TABLE
SYS CON$ TABLE
SYS FILE$ TABLE
SYS PROXY_ROLE_DATA$ TABLE
SYS OBJERROR$ TABLE
SYS OBJAUTH$ TABLE
SYS HIST_HEAD$ TABLE
- 区:Oracle数据库内存储空间最小分配单位。每个区必须是一段连续的存储空间,他可以小到只有一个数据块,也可以大到2GB的空间。
SQL> desc dba_extents
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
OWNER VARCHAR2(128)
SEGMENT_NAME VARCHAR2(128)
PARTITION_NAME VARCHAR2(128)
SEGMENT_TYPE VARCHAR2(18)
TABLESPACE_NAME VARCHAR2(30)
EXTENT_ID NUMBER
FILE_ID NUMBER
BLOCK_ID NUMBER
BYTES NUMBER
BLOCKS NUMBER
RELATIVE_FNO NUMBER
SQL> select extent_id from dba_extents where owner='SYS'; # and rownum <= 10;
EXTENT_ID
----------
0
0
1
2
3
4
5
6
7
8
已选择 10 行。
- 数据块:是Oracle数据库的I/O单位,也就是说,在读写Oracle数据库中的数据时,每次读写的数据量至少为一个数据块大小。Oracle数据库支持的数据块大小包括2KB、4KB、BKB、16KB和32KB等。Oracle 数据块有一定的标准大小,其大小被写入到初始化参数DB_BLOCK_SIZE 中。另外, Oracle 支持在同一个数据库中使用多种大小的块,与标准块大小不同的块就是非标准块。
SQL> select name,value from v$parameter where name = 'db_block_size';
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
db_block_size
8192
4. 用动态性能视图查询Oracle实例当前状态。
SQL> select status from v$instance;
OPEN
5. 以scott用户登录,查询该用户所具有的数据库对象。
SQL> conn sys/1234 as sysdba
已连接。
SQL> desc user_objects
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(128)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(23)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
NAMESPACE NUMBER
EDITION_NAME VARCHAR2(128)
SHARING VARCHAR2(18)
EDITIONABLE VARCHAR2(1)
ORACLE_MAINTAINED VARCHAR2(1)
APPLICATION VARCHAR2(1)
DEFAULT_COLLATION VARCHAR2(100)
DUPLICATED VARCHAR2(1)
SHARDED VARCHAR2(1)
CREATED_APPID NUMBER
CREATED_VSNID NUMBER
MODIFIED_APPID NUMBER
MODIFIED_VSNID NUMBER
SQL> select OBJECT_TYPE,OBJECT_NAME from user_objects;# where cownum <= 10
OBJECT_TYP OBJECT_NAME
---------- --------------------
TABLE ACCESS$
TABLE ACLMV$
VIEW ACLMV$_BASE_VIEW
VIEW ACLMV$_MVINFO
TABLE ACLMV$_REFLOG
TABLE ACLMVREFSTAT$
TABLE ACLMVSUBTBL$
TABLE ADMINAUTH$
SEQUENCE ADO_IMCSEQ$
TABLE ADO_IMPARAM$
创建表空间,分配给用户
SQL> create tablespace scott_tb_space datafile 'd:/Oracle_TableSpace/scott_tablespace.dbf' size 200M;
表空间已创建。
SQL> create user c##scott identified by 1234 default tablespace scott_tb_space;
用户已创建。
SQL> grant dba to c##scott;
授权成功。
SQL> exit
SQL> sqlplus /nolog # 未登录开启实例
SQL> conn c##scott/1234@orcl
已连接。
SQL> select username, user_id, account_status from dba_users where username like '%SCOTT%';
USERNAME
--------------------------------------------------------------------------------
USER_ID ACCOUNT_ST
---------- ----------
C##SCOTT
########## OPEN