> 文章列表 > JMU Oracle实验三

JMU Oracle实验三

JMU Oracle实验三

前缀

  • 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 tablesUSER_OBJECT_TABLES                  Description of the user’s own object tablesUSER_ALL_TABLES                     Description of all object and relational tables owned by the user‘sALL_TABLES                          Description of relational tables accessible 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                                          NUMBERTYPE                                               VARCHAR2(5)TABLE_NUM                                          NUMBERCON_ID                                             NUMBERSQL> 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
BX$KYWMWRCT TABLE
ABNAME       TYPE
---------- ----------X$KYWMCLTA TABLE
BX$KYWMNF   TABLE

2. 使用数据字典或性能视图查询数据库的物理存储结构。

物理存储结构:控制文件,数据文件,重做日志文件。

  • 控制文件:Oracle为了管理数据库的状态而维护的一个文件,记录了数据库的物理存储结构和其他控制信息。
SQL> desc v$controlfile # 查看控制文件结构信息名称                                      是否为空? 类型----------------------------------------- -------- ----------------------------STATUS                                             VARCHAR2(7)NAME                                               VARCHAR2(513)IS_RECOVERY_DEST_FILE                              VARCHAR2(3)BLOCK_SIZE                                         NUMBERFILE_SIZE_BLKS                                     NUMBERCON_ID                                             NUMBERSQL> select name from v$controlfile;# 查看控制文件名
NAME
--------------------------------------------------------------------------------
D:\\ORACLE\\ORADATA\\ORCL\\CONTROL01.CTL
D:\\ORACLE\\ORADATA\\ORCL\\CONTROL02.CTLSQL> show parameter control_files; # 通过初始化参数查询控制文件。是show parameter的一个小技巧,可以用于模糊查询NAME                                 TYPE       VALUE
------------------------------------ ---------- ------------------------------
control_files                        string     D:\\ORACLE\\ORADATA\\ORCL\\CONTROL01.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                                            NUMBERTABLESPACE_NAME                                    VARCHAR2(30)BYTES                                              NUMBERBLOCKS                                             NUMBERSTATUS                                             VARCHAR2(9)RELATIVE_FNO                                       NUMBERAUTOEXTENSIBLE                                     VARCHAR2(3)MAXBYTES                                           NUMBERMAXBLOCKS                                          NUMBERINCREMENT_BY                                       NUMBERUSER_BYTES                                         NUMBERUSER_BLOCKS                                        NUMBERONLINE_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:备用状态
SQL> desc v$log名称                                      是否为空? 类型----------------------------------------- -------- ----------------------------GROUP#                                             NUMBERTHREAD#                                            NUMBERSEQUENCE#                                          NUMBERBYTES                                              NUMBERBLOCKSIZE                                          NUMBERMEMBERS                                            NUMBERARCHIVED                                           VARCHAR2(3)STATUS                                             VARCHAR2(16)FIRST_CHANGE#                                      NUMBERFIRST_TIME                                         DATENEXT_CHANGE#                                       NUMBERNEXT_TIME                                          DATECON_ID                                             NUMBERSQL> select GROUP#,MEMBERS,status from v$log;GROUP#    MEMBERS STATUS
---------- ---------- --------------------------------1          1 INACTIVE2          1 INACTIVE3          1 CURRENTSQL> select GROUP#,MEMBER,status from v$logfile;GROUP# MEMBER                                   STATUS
---------- ---------------------------------------- --------------3 D:\\ORACLE\\ORADATA\\ORCL\\REDO03.LOG2 D:\\ORACLE\\ORADATA\\ORCL\\REDO02.LOG1 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 NUMBERINITIAL_EXTENT                                     NUMBERNEXT_EXTENT                                        NUMBERMIN_EXTENTS                               NOT NULL NUMBERMAX_EXTENTS                                        NUMBERMAX_SIZE                                           NUMBERPCT_INCREASE                                       NUMBERMIN_EXTLEN                                         NUMBERSTATUS                                             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                                                              8192SQL> desc v$tablespace # 查看表空间动态性能试图 名称                                      是否为空? 类型----------------------------------------- -------- ----------------------------TS#                                                NUMBERNAME                                               VARCHAR2(30)INCLUDED_IN_DATABASE_BACKUP                        VARCHAR2(3)BIGFILE                                            VARCHAR2(3)FLASHBACK_ON                                       VARCHAR2(3)ENCRYPT_IN_BACKUP                                  VARCHAR2(3)CON_ID                                             NUMBERSQL> select name from v$tablespace;NAME
------------------------------------------------------------
SYSAUX
SYSTEM
UNDOTBS1
USERS
TEMP
SYSTEM
SYSAUX
UNDOTBS1
TEMP
SYSTEM
SYSAUXNAME
------------------------------------------------------------
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                                        NUMBERHEADER_BLOCK                                       NUMBERBYTES                                              NUMBERBLOCKS                                             NUMBEREXTENTS                                            NUMBERINITIAL_EXTENT                                     NUMBERNEXT_EXTENT                                        NUMBERMIN_EXTENTS                                        NUMBERMAX_EXTENTS                                        NUMBERMAX_SIZE                                           NUMBERRETENTION                                          VARCHAR2(7)MINRETENTION                                       NUMBERPCT_INCREASE                                       NUMBERFREELISTS                                          NUMBERFREELIST_GROUPS                                    NUMBERRELATIVE_FNO                                       NUMBERBUFFER_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 <= 10OWNER      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                                          NUMBERFILE_ID                                            NUMBERBLOCK_ID                                           NUMBERBYTES                                              NUMBERBLOCKS                                             NUMBERRELATIVE_FNO                                       NUMBERSQL> select extent_id from dba_extents where owner='SYS'; # and rownum <= 10;EXTENT_ID
----------0012345678已选择 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                                          NUMBERDATA_OBJECT_ID                                     NUMBEROBJECT_TYPE                                        VARCHAR2(23)CREATED                                            DATELAST_DDL_TIME                                      DATETIMESTAMP                                          VARCHAR2(19)STATUS                                             VARCHAR2(7)TEMPORARY                                          VARCHAR2(1)GENERATED                                          VARCHAR2(1)SECONDARY                                          VARCHAR2(1)NAMESPACE                                          NUMBEREDITION_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                                      NUMBERCREATED_VSNID                                      NUMBERMODIFIED_APPID                                     NUMBERMODIFIED_VSNID                                     NUMBERSQL> select OBJECT_TYPE,OBJECT_NAME from user_objects;# where cownum <= 10OBJECT_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> exitSQL> 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