您的位置:首页 > 数据库 > Oracle

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

2013-10-22 22:15 267 查看
课程名称: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$datafile与dba_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数据库中几个数据字典的相同点与不同点

1、v$log和v$logfile

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

desc v$log;

desc v$logfile;





Select * from v$log



Select * from v$logfile;



通过比较,可知,

1. v$log详细说明了重做日志文件的结构、属性以及动态变化情况,

v$logfile说明了重做日志文件的物理地址和当前在线状态。

(1)其中,v$log的status取值范围为CURRENT,ACTIVE,INACTIVE,UNUSED

CURRENT: 正在使用

ACTIVE: 刚切换完成,尚未发生检查点,实例恢复需要

INACTIVE: 没有使用

UNUSED: 尚未记录change的空白group

(2)另外,v$logfile中status是指group(日志组)的状态,v$log中status是指member的
状态,即日志文件的状态。

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

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

2、 v$datafile与dba_data_files的区别

desc v$datafile;

desc dba_data_files;





Select * from dba_data_files



Select * from v$datafile;



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

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

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

3、 v$database和v$instance;

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

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

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

4、user_tables、all_tables和dba_tables的区别

v$sql、v$sqltext和v$sqlarea

v$sga和v$sgastat

v$archived_log和v$archiv_dest

v$tablespace和dba_tablespaces

v$database和v$datafile

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

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

而v$datafile在mount状态下可以

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$DATAFILE与DBA_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$等,这两种基表都很少有文档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: