日期:2014-05-16  浏览次数:20409 次

Oracle(六)管理

数据字典与动态性能视图:

?

?

数据字典提供了一些系统信息,静态信息

动态性能视图记载了例程启动后的相关信息,存储经常变化的信息

?

?

数据字典久记录了数据库的系统信息,只读表盒视图的集合。数据字典的所有者为sys的用户,用户只能在数据字典

进行查询,而其维护和修改由系统自动完成的。数据字典包括了字典基表和合数据字典视图。

基表存储了数据库的基本信息。数据字典视图时基于数据字典表所建立的视图。普通用户可查询

数据字典得到系统信息,主要有user_xxx,all_xxx,dba_xxx三种类型

select table_name from user_tables; 当前用户的创建所有表。

all_tables 显示当前用户可以访问的表(可能是拥有高级权限的人给的表权限)

dba_tables ?用户必须是dba角色或者拥有select any talbe系统权限

查出所有方案的表

?

用户名,权限和角色:

建立用户的时候,Oracle把用户的信息存放到数据字典里,给用户赋予权限或者角色的

时候,Oracle会将赋予权限和角色的信息放到数据字典

dba_user 显示当前数据库总共有多少用户

desc dba_users; 看到有一个username 字典

select username from dba_users;

?

dba_sys_privs ?用户所拥有的系统权限

dba_tab_privs ?用户拥有的对象权限

dba_col_privs ?用户具有的列权限

dba_role_privs ?用户所具有的角色

?

如dba_role_privs 数据库基表派生的视图

查询SCOTT的角色

select GRANTEEfrom dba_role_privs where GRANTEE='SCOTT';

一个用户可以拥可能有多种角色如sys有dba,sysoper,一个角色可能有多种权限

,权限分为对象权限和系统权限。

?

?

?

查询一个角色包括的权限,

a:一个角色有用的系统权限

select * from dba_sys_privs where grantee = 'CONNECT'; // 连接数据库的角色

也可以select * from role_sys_privs where role = 'CONNECT';

b:一个角色拥有的对象权限

select * from dba_tab_privs where grantee = 'DBA';// DBA 角色拥有的对象权限

?

?

?

Oracle 有多少角色,一般是dba

select * from dba_roles; Oracle 预定义角色

?

查询Oracle所有的对象权限,一般是dba

select distinct privilege from dba_tab_privs;

?

查询数据库的表空间

select table_space_name from dba_tablespaces;

?

一个用户具有什么角色

select * from dba_role_privs where grantee= 'SCOTT';

?

显示当前用户可以访问的所有数据字典视图

select * from dict where comments like '%grant%';

?

显示当前数据库全程

select * from global_name; global_name也是一个视图

?

?

?

?

查询Oracle中的系统权限,一般是dba

select * from system_privilege_map order by name;一共140 中左右

?

?

?

动态性能视图记载了例程启动后的相关信息,都是以v_$ 开始的

?

?

管理表空间和数据文件

?

表空间是数据库逻辑组成部分,物理上讲,数据库数据存放在数据文件中。

从逻辑上讲,数据库则是存放在表空间中,表空间由一个或者多个文件组成。

表空间可以自己创建,也可以使用默认的。

?

Oracle逻辑组成部分,表空间,段,区,块

表空间由段组成,段由区组成,区有好多块组成

表空间由数据文件组成,表空间从逻辑上组织数据库的数据。

数据库逻辑上是由一个或者多个表空间组成,通过表空间可以控制

数据库占用磁盘空间,dba还可以可以将不同数据类型部署到

不同的位置,这样有利于i/o性能,同时利于备份和恢复等管理操作。

(索引单纯建立一个表空间,触发器单独建立一个表空间)

?

?

建立表空间为了更好管理表 create tablespace 一般是dba执行,如果其他用户

要创建表空间,则必须要具有create table space的系统权限

?

create tablespace 表空间名字 datafile 'D:\test.dbf' size 20m uniform size 128k

注意size 分配表空间多少兆,nuiform size 区的大小

?

创建表制定表空间 ?create table xxx (...) tablespace 空间名称;

如果不制定空间则默认到system空

?

改变表空间状态(特权用户或dba)

1 使表空间脱机 alter tablespace 表空间名字 offline ;

2 使表空间联机 alter tablespace 表空间名字 online ;

?

只读表空间

alter tablespace 表空间名字 read only;

可读 ?read write;

显示表空间的所有表

select * from all_tables where tablespace_name = '表空间名';

查询scott的表emp的所在的表空间

select tablespace_name,table_name from user_tables where table_name = 'EMP';

system表空间的表scott不可以改变其状态

?

删除表空间

?

drop tablespace 表空间名字 including contents and datafiles ?级联删除表数据

?

扩展表空间,为其增加更多的表空间

1: 增加数据文件

alter tablespace 表空间名字 ?add datafile 'D:\other.dbf' size 20m

2: 增加数据文件的大小

alter tablespace 表空间名字 ? 'D:\表空间文件.dbf' resize 20m

3:设置文件的自动增长

alter table_space 表空间名字 'D:\表空间文件.dbf' aotuextend on next?

10m maxsize 500m

?

?

故障的处理

如果磁盘毁坏了,数据文件不能再使用,磁盘损坏可能是局部损坏,还想用可以用的数据如何办?

如果数据文件不在坏的磁道的话,可以迁移表空间。

?

需要将文件的副本移动到其他磁盘

?

1 确定数据文件所在的表空间