数据表(表)的逻辑备份和恢复
备份分为逻辑备份和物理备份。 逻辑备份:指使用工具exprot将数据对象的结构和数据导出到文件的过程。逻辑恢复:使用工具import利用备份文件把数据对象导入到数据库的过程。逻辑备份和恢复只能在数据库open的状态下进行。物理备份和恢复也可以在close状态下进行。
导出
导出具体分三种:导出表、导出方案(包括所有的表、视图、触发器、存储过程等等)、导出数据库(包括所有的方案)。 导出使用exp命令来完成,常用命令的选项有: userid:用于指定执行导出操作的用户名、密码、连接字符串(oracle实例名)。 tables:用于指定执行导出操作的表。 owner:用于指定执行导出操作的方案。
韩顺平主讲
full=y:用于指定执行导出操作的数据库。 inctype:用于指定执行导出操作的增量类型。
rows:用于指定执行导出操作是否要要导出表中的数据。 file:用于指定导出文件名。
导出表
导出自己的表或则导出其它方案的表。 一 导出自己的表:
exp userid=scott/tiger@myoral tables=(emp,person) file=d:\\e1.dmp; userid:是用户名和密码
emp和person是要导出的表名
d:\\e1.dmp是导出到那个文件里,一般是以dmp为后缀名。
注意:进行导出时,必须要到oracle/bin目录里,才能执行exp命令。 二 导出其它方案的表:
要导出其它用户的包,则需要dba的权限或是exp_full_database的权限。比如system就可以导出scott的表。
exp userid=system/manager@myoral tables=
(scott.emp,scott.person) file=d:\\e1.dmp;
唯一不同就是在表名前加上方案名。 只导出表的结构,不导出表的数据
exp userid=scott/tiger@myoral tables=(emp) file=d:\\e1.dmp rows=n; 只是在后面加上rows=n就可以了。
使用直接导出的方式:
速度比较快,适合大表的导出。
exp userid=scott/tiger@myoral tables=(emp) file=d:\\e1.dmp direct=y; 导出方案
一 导出自己的方案:
exp scott/tiger@myoral owner=scott file=d:\\scott.dmp;
二 导出其它方案:
需要dba的权限或是exp_full_database的权限。
exp system/manager@myoral owner=(system,scott) file=d:\\scott.dmp (system,scott)导出system和scott两个方案。 导出数据库
必须具有dba或exp_full_database的权限。
exp userid=system/manager@myor1 full=y inctype=complete
file=d:\\x.dmp; 导入
要使用import工具将文件中的对象和数据导入到数据库中。也分为导入表、导入方案、导入数据库。 用imp命令,常用选项如下:
韩顺平主讲
导入表(将表结构和表数据同时导入)
imp userid=scott/m123@myora1 tables=(emp) file=d:\\emp.dmp; emp表导入到了scott方案里。这个emp表应该是scott用户导出的。
如果用system用户等导入scott用户导出的emp表吗?
imp userid=system/manager@myora1 tables=(emp) file=d:\\emp.dmp; 结果是导入失败的,为什么呢?因为emp表里有主外键关系,所有不能导入,如果要成功导入,则emp表不能有主外键关系。这样导入成功后,则system方案里就有emp表。这就意味着system方案里的emp表和scott方案里的emp表是一模一样的。
导入表和导出表结构的命令是一样的,只要你选对文件就可以了,如果emp.dmp是导出表结构的文件,那么这就是导入表结构。如果是导出表的文件,这就是导入表了。 导入表结构
imp userid=soctt/tiger@myor1 tables=(emp) file=d:\\xxx.dmp rows=n; 导入数据
如果对象(比如表)已经存在,就可以只导入表的数据
imp userid=scott/tiger@myor1 tables=(emp) file=d:\\xxx.dmp ignore=y; 导入方案
一 导入自身的方案
imp userid=scott/tiger file=d:\\xxx.dmp;
二 导入其它方案
需要有dba的权限。
imp userid=system/manager file=d:\\xxx.dmp
fromuser=system touser=scott; 导入数据库
默认情况下,当导入数据库时,会导入所有对象结构和数据。 imp userid=system/manager full=y file=d:\\xxx.dmp; 数据字典和动态性视图
数据字典是oracle数据库中最重要的组成部分,它提供了数据库的一些系统信息。
韩顺平主讲
动态性视图记载了例程启动后的相关信息。
约束
数据的完整性用于确保数据库数据遵循从一定的商业和逻辑规则。在oracle中数据完整性可以使用约束、触发器、应用程序(存储过程、函数)三种方法来实现。 约束作为确保数据完整性的首选,因为它效率高。 约束包括:not null(非空)、unique(唯一约束,不能重复,但可以为空,空值也要唯一)、primary key(主键约束,不能重复,不能为空值,一个表只能有一个主键)、foreign key(外键约束)、check(自定义约束) Foreign key(外键约束):用于定义主表和从表之间的关系。外键约束要定义在从表上,主表则必须具有主键约束或是unique约束。当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。 Check(自定义强制约束,很少用):用于强制行数据必须满足的条件,假定在sal列定义了check约束,并要求sal列值在1000-2000之间如果不再1000-2000之间就会提示出错。
商品表 create table goods(goodsId char(8) primary key,--主键 goodsName varchar2(30), unitprice number(10,2) check (unitprice > 0),--check约束 category varchar2(8), provider varchar2(30));
客户表 create table customer(customerId char(8) primary key,--主键 name varchar2(50) not null,--非空约束 addres varchar2(50), email varchar2(50) unique,--unique约束 sex char(2) default ?男? check(sex in(?男?,?女?)), cardId char(18)); 订单表 create table purchase( customerId char(8) references customer(customerId),--外键 goodsId char(8) references goods(goodsId),--外键 nums number(5) check(nums between 1 and 30)); 注意:外键字段的类型必须要和指向主键字段的类型相同。References customer(customerId)就是指向customer表中的customerId字段。
可以用alter table命令对约束进行修改或添加约束。Not null约束要用modify选项,其它约束用add选项。 Alter table goods modify goodsName not null; //对goodsname字段添加not null约束。 韩顺平主讲
Alter table customer add constraint carddunique unique(cardId); //对customer表的cardId字段添加unique约束 constraint是关键字,add constraint就是添加约束,carddunique我们创建的约束名,可以随便取。 Alter table customer add constraint addrescheck check(address in(?东城?,?西城?,?宣武?)); 删除约束:
Alter table 表名 drop constraint 约束名称;
删除主键约束:
Alter table 表名 drop primary key;
在删除主键约束时,可能有错误,如果主键被别的字段引用了,那么就不能删除这个主键了。
一定要删除怎么办呢?
Alter table 表名 drop primary key cascade; //强行删除主键并且把主外键关系也删除了。
查看某个表所有约束信息:
Select constraint_name,constraint_type,status,validated from User_constraints where table_name = ?表名?;
查看约束对应的列:
Select column_name,position from user_cons_columns
Where constraint_name = ?约束名?;
当然最简单的办法是用pl/sql developer工具查看。
上面创建表时在字段后面添加的约束是字段级约束,也可以添加表级约束。表级约束是在所列后面再定义约束。注意:not null约束只能在列级定义。
constraint 约束名:就是为约束取一个我们自定义的约束名,如果没有写oracle会自动为约束取一个约束名。 表级约束定义:
Create table employee2( Emp_id number(4), Name varchar2(15), Dept_id number(2), Constraint pk_emplyee primary key (emp_id),--主键约束 Constraint fk_department foreign key (dept_id) –外键约束 references depart (dept_id));--引用depart表dept_id字段 索引
索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o次数,从而提高数据访问性能。索引有很多种,我们主要介绍常用的几种。
韩顺平主讲
为什么添加了索引,会加快查询速度呢?(加快了查询速度,自然降低插入和修改数据的速度,这是以空间换时间,因为创建索引是占用空间) 单列索引:基于单个列所建立的索引。 Create index 索引名 on 表名(列名);
复合索引:基于两列或多列的索引(不是为两个字段分别创建索引,而是为两个列的组合创建索引,就是查询两个列的组合时速度提高速度)。一张表可以有多个索引,但必须要求列的组合唯一。
Create index emp_index on emp(ename,job);
使用索引的原则:
1 必须是大数据的表创建索引才有意义。
2 在where子句或连接条件上经常引用的列上建立索引。 3 索引的层次不要超过4层。
索引缺点:
1 建立索引,系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引。
2 更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性。
韩顺平主讲