数据库管理
1.数据库管理员(dba)
Ⅰ.职责:①安装和升级Oracle数据库
②建库,表空间,表,视图,索引。。。
③制定并实施备份与恢复计划
④数据库权限管理,调优,故障排除
⑤对于高级dba,要求能参与项目开发,
会编写sql语言、存储过程、触发器、规范、约束和包
Ⅱ.管理数据库的用户主要是sys和system,这两个用户的主要区别是:
①最主要的区别:存储的数据的重要性不同
sys:所有Oracle的数据词典的基表和视图都存放在sys用户中,这些基表
和视图对于Oracle的运行是至关重要的,由数据库自己维护,任何用户
都不能手动更改。sys用户拥有dba、sysdba和sysoper角色或权限,
是Oracle权限最高的用户。
system:用于存放次一级的内部数据,如Oracle的一些特性或工具的管理信息,
system用户拥有dba,sysdba角色或权限
②其次的区别,权限的不同
sys用户必须以as sysdba或 as sysoper形式登录,不能以normal方式登录数据库。
也就是说不能用conn sys/change_on_install;方式登录,必须使用as指明角色,即
conn sys/change_on_install as sysdba [或者as sysoper};
system如果正常登录conn system/manager,它其实是一个普通的dba用户,
但是如果以as sysdba登录,其结果实际上作为sys用户登录的,
从登录信息里面我们可以看出来。
Ⅲ.sysdba和sysoper具体权限
sysdba的具体权限:
①Startup/Shutdown 启动数据库/关闭数据库
②alter database open/mount/backup
③改变字符集
④create database/drop database 创建数据库/删除数据库
⑤create spfile
⑥alter database archivelog 归档日志
⑦alter database recover 恢复数据库
⑧拥有restricted session 会话限制权限
⑨可以让sys用户连接
⑩登录之后用户是sys
sysdba的具体权限:
①Startup/Shutdown 启动数据库/关闭数据库
②alter database open/mount/backup
③不能改变字符集 (与sysdba不同)
④不能创建数据库/删除数据库 (与sysdba不同)
⑤create spfile
⑥alter database archivelog 归档日志
⑦只能完全恢复,不能执行不完全恢复 (与sysdba不同)
⑧拥有restricted session 会话限制权限
⑨可以进行一些基本操作,但不能查看用户数据 (与sysdba不同)
⑩登录之后用户是public (与sysdba不同)
补充dba用户权限:只有在启动数据库后,才能执行各种管理工作
Ⅳ.管理初始化参数
初始化参数用于设置实例或是数据库的特征。
①显示初始化
show parameter;
②修改参数
如果需要修改初始化参数,可以到文件..\oracle\admin\myoral\pfile\init.ora
中去修改,比如说修稿实例的名字
2.数据库(表)的逻辑备份与恢复
备份:使用工具export将数据对象的结构和数据导出到文件的过程
逻辑恢复:实用工具import将备份的文件中数据对象导入数据库的过程
注意:物理备份在数据库open/close的状态下都可以进行
逻辑备份和恢复这能在open的状态下进行。
Ⅰ.导出
导出分为三种方式: 导出表、导出方案和导出数据库
导出使用exp命令来完成,该命令的常用选项有:
userid:导出执行该操作的用户名、口令和连接字符串
tables:导出操作的表
owner:导出操作的方案
fully = y:导出操作的数据库
imctype:导出操作的增量类型
rows:是否导出表中的数据
file: 导出文件名
direct = y:导出表的结构
①导出表
导出自己的表:
exp userid = scott/scott@ORCL table = (emp,dept) file = d:\e1.dmp;
导出其他方案的表:
如果用户要导出其他方案的表,则需要dba权限或是exp_full_database的权限,
比如system就可以导出scott的表
exp userid = system/manager@ORCL table = (scott.emp) file = d:\e2.dmp
导出表的结构:
exp userid = scott/scott@ORCL table = (emp,dept) file = d:\e3.dmp rows = n;
使用直接导出方式:
exp userid = scott/scott@ORCL tables = (emp) file = d:\e3.demp direct =y;
这时需要数据库的字符集与客户端的一致,否则会报错
②导出方案
导出方案指使用export工具导出一个或多个方案中所有的对象和数据,并存在文件中。
导出自己的方案:
exp scott/scott@ORCL owner = scott file = d:\scott.dmp;
导出其它方案:
如果用户要导出其他方案,则需要dba的权限或是exp_full_database的权限
system用户可以导出任何方案
exp system/manager@ORCL owner = (system,scott) file = d:\system.dmp;
③导出数据库
导出数据库是指利用export导出所有数据库中的对象及数据,要求该用户具有dba的权限,
或是exp_full_database的权限
exp userid = system/manager@ORCL full = y inctype = complete file = x.dmp;
Ⅱ.导入
使用工具import将文件中的对象和数据导入到数据库中,导入的文件一定要是export导出的文件。
分为三种:导入表、导入方案和导入数据库
imp常用的选项有:
userid: 用于选定执行导入操作的用户名,口令和连接字符串
tables: 指定执行导入操作的表
formuser:指定源用户
touser:用于指定目标用户
file:用于指定导入文件名
fully = y:用于指定执行导入整个文件
inctype:用于指定执行导入操作的增量类型
rows:指定是否要导入表行(数据)
ignore:如果表存在,则只导入数据
①导入表
导入自己的表
imp userid = scott/scott@ORCL table = (emp) file = d:\xx.dmp
导入表到其他用户
要求该用户具有dba的权限,或是imp_full_database
imp userid = system/manager@ORCL tables = (emp) file = d:\xx.dmp touser = scott;
导入表的结构
只导入表的结构,不导入数据
imp userid = scott/scott@ORCL tables = (emp) file = d:\xxx.dmp rows= n;
②导入数据
如果对象(比如表)已经存在可以只导入表的数据
imp userid = scott/scott@ORCL tables = (emp) file = d:\xxx.dmp ignore =y;
--有外键的表不能导入别的方案里去
③导入方案
使用import将文件的对象和数据导入到一个或是多个方案中。
如果要导入其他方案,要求该用户具有dba权限,或是imp_full_database
导入自身的方案
imp userid = scott/scott file = d:\xxx.dmp;
导入其他方案
imp userid = system/manager file = d:\xxx.dmp formuser = scott;
导入数据库
默认情况下,导入数据库时,会导入所有对象结构和数据
imp userid = system/manager full =y file = d:\xxx.dmp;
DOS中dir命名: 查看目录
3.数据字典和动态性能视图
数据字典是oracle数据库中最重要的组成部分,
它提供了数据库的一些系统信息。(静态的信息)
动态性能视图记载了例程启动后的相关信息。(动态的信息)
Ⅰ.数据字典
数据字典记录了数据库的系统信息,它是只读表和视图的集合,
数据字典的所有者为sys用户。
用户只能在数据字典上执行select操作,而其维护和修改是由系统自动完成的。
数据字典包括:数据字典基表和数据字典视图
基表存储数据库的基本信息,普通用户不能直接访问
数据字典视图是基于数据字典基表建立的视图,普通用户可以查询它而取得系统信息
①数据字典视图主要包括三种类型:user_xxx,all_xxx和dba_xxx.
user_tables
显示当前用户所拥有的表,只返回用户所对应的方案的所有表。
select table_name from user_tables;
all_tables
用于显示当前用户可以访问的所有的表
select table_name from all_tables;
dba_tables
显示所有方案拥有的数据库表,但要求用户必须是dba角色或select any table系统权限。
②用户名,权限,角色
建立用户时,oracle会把用户的信息存放到数据字典中,
当给用户授予权限或是角色时,oracle会将权限和角色的信息存放到数据字典
通过查询dba_users可以显示所有数据库用户所具有的系统权限;
通过查询数据字典视图dba_sys_privs,可以显示用户所具有的系统权限
通过查询数据字典视图dba_tab_privs, 可以显示用户具有的对象权限
通过查询数据字典视图dba_col_privs,可以显示用户具有的列权限
通过查询数据字典视图dba_role_privs,可以显示用户所具有的角色
例:select * from dba_role_privs where GRANTEE = 'SCOTT';
--查看用户具有怎样的角色
查询oracle中所有的系统权限,一般是dba
select * from system_privilege order by name;
查询oracle中所有的角色,一般是dba
select * from dba_roles;
查询oracle中所有对象权限,一般是dba
select distinct privilege from dba_tab_privs;
查询数据库的表空间
select tablespace_name from dba_tablespaces;
查询角色具有哪些系统权限
select *from dba_sys_privs where grantee ='DBA';
或者
select *from dba_sys_privs where role ='DBA';
查询某个角色包括的对象权限
select * from dba_tab_privs where grantee = '角色名';
显示当前用户可以访问的所有数据字典的视图
select * from dict where comments like '%grant%';
显示当前数据库的全称
select * from global_name;
Ⅱ.动态性能视图
用于记录当前历程的活动信息
当启动oracle server时,系统会建立动态性能视图
当停止oracle server时,系统会删除动态性能视图
oracle所有动态性能视图都是以v_$开始的,并且oracle为每个动态性能视图
提供了相应的同义词,并且其同义词是以V$datafile;动态性能视图的所有者为sys,
一般情况下,由dba或是特权用户来查询动态性能视图。
Ⅲ.管理表空间和数据文件
表空间是数据库的逻辑组成部分。
从物理上讲,数据库数据存放在数据文件中
从逻辑上讲,数据库则是存放在表空间中,表空间由一个或是多个数据文件组成。
①数据库的逻辑结构
oracle中逻辑结构包括表空间、段、区和块。
块→区→段→表空间→数据库
这种结构可以提高数据库的效率
②表空间
表空间用于从逻辑上组织数据库的数据。
数据库逻辑上是由一个或多个表空间组成。
表空间可以达到以下作用:
a.控制数据库占用的磁盘空间
b.dba可以将不同的数据类型部署到不同的位置,
这样有利于提高i/o性能,同时利于备份和恢复等管理操作。
建立表空间
create tablespace 需要特权用户或是dba来执行,如果用其它用户来
创建表空间,则需要具有create tablespace系统权限
建立数据表空间
建立名称为data1的表空间,并为该表空间建立名称为data1.dbf的数据文件
区的大小为128k
create tablespace data01 datafile ‘d:\test\data1.dbf’
size 20m uniform size 128k
使用数据表空间
create table mypart (deptno, number(4),dname varchar2(14),
loc varchar2(13)) tablespace data1;
--如果不指定表空间,则默认在system目录下
改变表空间的状态
表空间在联机状态,此时是可以访问和读写的,
有时为了维护(数据维护或系统维护)可以改变表空间状态,但一般情况下,
由特权用户或是dba来操作。
a.使表空间脱机
alter tablespace 表空间名 offline;
b.使表空间联机
alter tablespace 表空间名 online;
c.只读表空间
alter tablespace 表空间名 read only;
补充:恢复可写
alter tablespace 表空间名 read write;
只读特性:
知道表空间名,显示该表空间包括的所有表
select * from all_tables where tablespace_name = '表空间名';
知道表名,查看该表属于哪个表空间
select tablespace_name,table_name from user_tables
where table_name = 'emp';
删除表空间
一般情况下,由特权用户或是 dba 来操作,如果是其它用户操作,
那么要求用户具drop tablespace 系统权限。
drop tablespace‘表空间’including contents and datafiles;
说明:including contents 表示删除表空间时,删除该空间的所有数据库对象,
而 datafiles 表示将数据库文件也删除。
扩展表空间
表空间溢出,需要为其拓展表空间,会报错“表。。无法通过32(在表空间。。。中)扩展”
为其增加更多的存储空间,有三种方法:
a.增加数据文件
alter tablespace spo1 add datafile 'd:\test\sp01.dbf' size 20m;
b.增加数据文件的大小
alter tablespace datafile 'd:\test\sp01.dbf' resize 20m;
注意数据文件大小不要超过500m
c.设置文件的自动增长
alter tablespace datafile 'd:\test\sp01.dbf' autoextend on next 10m maxsize 500;
移动数据文件
有时,如果数据文件所在磁盘损坏时,该数据文件将不能再使用,为了能够重新使用,
需要将这些文件的副本移动到其它的磁盘,然后恢复。
例:移动数据文件sp001.dbf为例
a.确定数据文件所在的表空间
select tablespace_name from dba_data_files where
file_name = 'd:\sp001.dbf';
b.使表文件脱机
alter tablespace sp001 offline;
c.使用命令移动数据文件到指定的目标位置
host move d:\sp001.dbf c:\sp01.dbf;
d.执行alter tablespace 命令
物理移动后,还需要对数据库文件进行逻辑修改
alter tablespace sp001 rename datafile
'd:\sp001.dbf' to 'c:\sp001.dbf';
e.表空间联机
为了使用户能够访问该表空间,必须将其转为online状态:
alter tablespace data01 online;
显示表空间信息
select tablespace_name from dba_tablespaces;
显示表空间所包含的数据文件
select file_name,bytes from dba_data_files
where tablespace_name = '表空间名';
其它表空间
除了最常用的数据表空间外,还有其它类型表空间:
a.索引表空间 --单建索引表空间可以提高速度
b.undo 表空间
c.临时表空间
d.非标准块的表空间