Oracle之课程实验二(数据字典)

课程名称:Oracle11g数据库应用简明教程  

实验题目:实验二数据字典

姓名:李日中 学号:2010324264班级:10计本3 实验日期:2013-4-11 

成绩:

 

一、 实验目的

1、学会如何使用常用的数据字典

   字典的结构侧面了解如何创建了数据库对象

2比较Oracle数据库中几个数据字典的相同点与不同点

3从整体上,区分不同前缀的视图的用途与区别

 

二、 实验环境

Oracle 11g,客户端工具sqlplus

 

三、 实验主要内容和主要操作步骤

  本实验使用system帐号登陆sqlplus客户端,密码为admin,如图:


(一)使用常用的数据字典

1、  使用数据字典dba_data_files查看表空间system所对应的数据文件的部分信息,如下:

col file_name format a50;

select file_name,tablespace_name,autoextensible from dba_data_files 

where tablespace_name=’SYSTEM’;

 

2、 v$datafiledba_data_files的区别,v$datafile记录了数据文件的动态信息

3、 使用v$datafile数据字典查看当前数据库的数据库文件动态信息,如下

col name format a70;

select file#,name,checkpoint_change# from v$datafile;

 

4、 查看当前是哪个数据库实例

方法一:select name from v$database

注意:列段值一般为大写,还有就是日期数据类型的。

 

方法二:select instance_name from v$instance;

注意:与上方法不同,这里查询出来的结果是小写的,为什么呢?答案在后面实验中。


5、 删除数据库实例方法

注意:该操作时在命令行环境下,而不是sqlplus环境下,命令如下:

oradim –delete –sid orcl   //orcl为数据库实例的唯一标识sid

6、使用数据字典v$controlfile,查看当前数据库的控制文件的名称与路径,具体如下:

select name from v$controlfile;

 

7、 使用数据字典v$log查看当前数据库实例的日志文件的信息,具体如下:

select group#,archived,members,status from v$log;

 

8、 使用数据字典v$logfile查看当前数据库实例的日志文件的名称与路径,具体如下:

select member from v$logfile;

 

9、 对已有数据库实例的日志文件进行镜像操作,具体如下:

Alter database add logfile member ‘e:\app\Administrator\oradata\orcl\redo01b.log’ to group 1;

Alter database add logfile member ‘e:\app\Administrator\oradata\orcl\redo02b.log’ to group2;

Alter database add logfile member ‘e:\app\Administrator\oradata\orcl\redo03b.log’ to group 3;

10、使用dba_direcories查看那备份文件的名称与路径,具体如下

col owner format a10;

col directory_name format a20;

col directory_path format a50;

Select * from dba_directories;


11、使用数据字典dba_tablespaces,查看当前数据库实例的所有表空间的名称,具体如下:

Select tablespace_name from dba_tablespaces;

 

12、查看当前用户的系统权限和表级权限

Select * from user_sys_privs;

 

13、使用dba_tables视图,查看用户scott用户所有表的信息,具体如下:

Select table_name,tablespace_name,owner from dba_tables where owner=’SCOTT’;

 

14、使用user_users查看当前用户的信息,具体如下:

Select username,default_tablespace,account_status from user_users;

 

15、使用user_role_privs查看当前用户的角色,具体如下:

Select * from user_role_privs;

 

16、查看当前用户的所有表,具体如下:

  Select  table_name  from user_tables;

 

17、查看当前会话具有的权限,具体如下:

Select * from session_privs;

 

18、使用v$session视图查看当前用户的会话信息,具体如下:

Select username,terminal from v$session where username is not null;

 

(二)比较Oracle数据库中几个数据字典的相同点与不同点

1v$logv$logfile

   首先通过desc查看查看其表(视图)结构,具体如下:

desc v$log;

desc v$logfile;

 

 

Select * from v$log

 

Select * from v$logfile;

 

 

通过比较,可知,

1. v$log详细说明了重做日志文件的结构、属性以及动态变化情况
  v$logfile说明了重做日志文件的物理地址和当前在线状态。

1)其中,v$logstatus取值范围为CURRENT,ACTIVE,INACTIVE,UNUSED

    CURRENT:  正在使用
ACTIVE:    刚切换完成,尚未发生检查点,实例恢复需要
INACTIVE:  没有使用
UNUSED:  尚未记录change的空白group

 

2)另外v$logfilestatus是指group(日志组)的状态,v$logstatus是指member的   状态,即日志文件的状态。

3v$logfiletype可为ONLINE(联机)或者OFFLINE(脱机),group#是日志文件组  的组编号,oracle至少有两个日志文件组,安装oracle默认为三个日志文件组。

4v$log中的thread#为日志线程ID,对应着一个数据库实例,这个差异只能在分布式环 境下才能测试,members表明该日志文件组下有多少个日志文件,sequence#表示序列,  这是概念是在切换日志文件并且归档的情况下,重用日志文件就会使用新的序列。

2、 v$datafiledba_data_files的区别

  desc v$datafile;

desc dba_data_files;


 

 

Select * from dba_data_files

 

Select * from v$datafile;

 

(1) 通过比较,可以知道,dba_data_files中的file_idfile_namev$datafile中的file#name是一一对应的,只是查询出来的结果顺序不一致而已

(2) 不过可以得出的结论是:v$datafiledba_data_files都是数据字典里的视图,都记录了数据文件的信息,只是v$datafile记录数据文件的动态信息,即数据文件有了修改,更新后,v$datafile中的记录也会动态的跟着改变,这有oracle系统后台进程维护,它记录的数据会随着数据库实例的关闭而丢失;而dba_data_files则记录数据文件的一些静态信息。

(3) 另外,v$datafile可以在数据库处于mount状态下就可以查询,而dba_data_files则需要在数据库实例处于open状态下才可以查询。

 

3、 v$databasev$instance;

要比较v$databasev$instance这两个视图,必须对oracle中的databaseinstance概念有一个清晰的了解。

首先,database对应着物理上的数据文件,可以永久存在的,无论关机重启与否,它都存在于物理硬盘等介质,而instance则是一段可执行代码加载到内存(启动一个软件,如oracle管理系统),该实例的启动会将需要的物理上的文件,如数据文件加载到内存中去,当关机或重启时,内存中的数据则丢失。

弄清楚了这两个概念,现在比较如下:

desc v$database

由于字段太多,这里写进了文件,不截图,如下:

SQL>spool d:\desc_database;

SQL> desc v$database;

 名称                                是否为空? 类型

 ----------------------------------- -------- ------------------------

 DBID                                         NUMBER

 NAME                                         VARCHAR2(9)

 CREATED                                      DATE

 RESETLOGS_CHANGE#                            NUMBER

 RESETLOGS_TIME                               DATE

 PRIOR_RESETLOGS_CHANGE#                      NUMBER

 PRIOR_RESETLOGS_TIME                         DATE

 LOG_MODE                                     VARCHAR2(12)

 CHECKPOINT_CHANGE#                           NUMBER

 ARCHIVE_CHANGE#                              NUMBER

 CONTROLFILE_TYPE                             VARCHAR2(7)

 CONTROLFILE_CREATED                          DATE

 CONTROLFILE_SEQUENCE#                        NUMBER

 CONTROLFILE_CHANGE#                          NUMBER

 CONTROLFILE_TIME                             DATE

 OPEN_RESETLOGS                               VARCHAR2(11)

 VERSION_TIME                                 DATE

 OPEN_MODE                                    VARCHAR2(20)

 PROTECTION_MODE                              VARCHAR2(20)

 PROTECTION_LEVEL                             VARCHAR2(20)

 REMOTE_ARCHIVE                               VARCHAR2(8)

 ACTIVATION#                                  NUMBER

 SWITCHOVER#                                  NUMBER

 DATABASE_ROLE                                VARCHAR2(16)

 ARCHIVELOG_CHANGE#                           NUMBER

 ARCHIVELOG_COMPRESSION                       VARCHAR2(8)

 SWITCHOVER_STATUS                            VARCHAR2(20)

 DATAGUARD_BROKER                             VARCHAR2(8)

 GUARD_STATUS                                 VARCHAR2(7)

 SUPPLEMENTAL_LOG_DATA_MIN                VARCHAR2(8)

 SUPPLEMENTAL_LOG_DATA_PK                     VARCHAR2(3)

 SUPPLEMENTAL_LOG_DATA_UI                     VARCHAR2(3)

 FORCE_LOGGING                                VARCHAR2(3)

 PLATFORM_ID                                  NUMBER

 PLATFORM_NAME                                VARCHAR2(101)

 RECOVERY_TARGET_INCARNATION#                 NUMBER

 LAST_OPEN_INCARNATION#                       NUMBER

 CURRENT_SCN                                  NUMBER

 FLASHBACK_ON                                 VARCHAR2(18)

 SUPPLEMENTAL_LOG_DATA_FK                     VARCHAR2(3)

 SUPPLEMENTAL_LOG_DATA_ALL                  VARCHAR2(3)

 DB_UNIQUE_NAME                               VARCHAR2(30)

 STANDBY_BECAME_PRIMARY_SCN                   NUMBER

 FS_FAILOVER_STATUS                           VARCHAR2(22)

 FS_FAILOVER_CURRENT_TARGET                  VARCHAR2(30)

 FS_FAILOVER_THRESHOLD                        NUMBER

 FS_FAILOVER_OBSERVER_PRESENT                 VARCHAR2(7)

 FS_FAILOVER_OBSERVER_HOST                 VARCHAR2(512)

 CONTROLFILE_CONVERTED                        VARCHAR2(3)

 PRIMARY_DB_UNIQUE_NAME                      VARCHAR2(30)

 SUPPLEMENTAL_LOG_DATA_PL                     VARCHAR2(3)

 MIN_REQUIRED_CAPTURE_CHANGE#                 NUMBER

SQL> spool off

 

desc v$instance

 

col name format a10 ;

Select dbid,name from v$database

 

Select instance_number,instance_name from v$instance

 

可以发现,v$database中的namev$instance中的instance_name是一样的,只是列值区分大小写,通过这个也可以侧面知道,以dba——开头的视图的列值一般大小,而以v$开头的大部分列值是小写,进一步推测,跟物理上的文件(特别是数据文件)相关的列值就是大写,跟逻辑相关的,比如实例,存在内存的量列值就小写。

 

从上面的实验数据可以发现,v$database记录的是数据库文件的一些信息,而v$instance记录的是数据实例的信息,包括配置、启动信息等等。

 

4user_tablesall_tables和dba_tables的区别

 

v$sqlv$sqltextv$sqlarea

 

v$sgav$sgastat

 

v$archived_logv$archiv_dest

 

v$tablespacedba_tablespaces

 

v$databasev$datafile

 

 

 

dba_data_files属于静态数据字典中的视图,静态数据字典有三种类型,分别为:user_*、 all_*、 dba_*,要想访问这些视图必须具有相关权限,像“dba_data_files”就必须有DBA权限才可以访问;而v$datafile是属于动态性能视图(动态数据字典),这类视图是有系统管理员如SYS维护的视图,这类视图在数据库运行时是会不断进行跟新的,所以我只能对其进行只读访问而不能修改它们。

 

数据库在mount状态下,从dba_data_files查不出数据的,必须在open下才行
v$datafilemount状态下可以

 

V$datafile DBA_DATA_FILES的区别:

1.        V$datafile是单数,DBA_DATA_FILES是复数。

2.        V$datafile中的数据在mount状态时可以访问,DBA_DATA_FILES中的数据在open状态时才能访问。

3.        V$datafile中的数据一般是小写,DBA_DATA_FILES中的数据一般是大写。

 

 

 V$视图和DBA_视图

 

  区别:

 

  1.        V$视图通常是单数,DBA视图通常是复数,例如V$DATAFILEDBA_DATA_FILES

 

  2.        当数据库处于Nomout或者Mount时,许多V$视图已经是可用的,而DBA视图必须在数据库处于Open时才可用;

 

  3.        V$视图查询出来的数据多小写,DBA视图查询出的数据通常大写,所以在写WHERE条件时需特别小心;

 

  4.        V$视图中包含的是自实例启动以来的动态数据,在数据库关闭后会消失,查询V$视图时必须关注时效性,DBA视图中包含的是静态数据;

 

  5.        V$视图的基表是X$表,X$表是存在于内存中的虚表,DBA视图的基表是数据字典表,如SYS.OBJ$, SYS.FILE$等,这两种基表都很少有文档。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值