ORACLE备份和恢复
<1>逻辑备份
不用去拷贝数据库的物理文件
备份逻辑上的结构
外部的工具:导出和导入的工具
DOS下的命令 cmd下执行
导出exp export缩写形式
查看帮助 exp help=y
使用参数文件导出
exp parfile=c:/abc.par
>>>abc.par的内容
a)scott用户连接导出自己的所有对象
userid=scott/tiger --连接的用户scott
file=c:/a1.dmp --导出的文件的名字a1.dmp
--导出了scott用户的所有对象
b)用system连接来导出scott下的所有对象
exp parfile=c:/sys.par
>>>>sys.par的内容
userid=system/manager
file=c:/b1.dmp
owner=(scott) --导出scott用户的所有对象
导出多个用户的数据
建立一个测试用户 test
grant connect,resource
to test identified by t123;
alter user test
default tablespace users
temporary tablespace temp;
create table student(
stu_id number(4) primary key,
stu_name varchar2(20),
stu_score number(2)
);
insert into student values (1000,
'Mike',95);
insert into student values (1001,
'John',90);
导出scott和test下的所有对象????
>>>userid=system/manager
file=c:/st.dmp
owner=(scott,test)
导出scott下的emp,dept表????
>>>userid=system/manager
file=c:/st.dmp
tables=(scott.emp,scott.dept,test.student)
导出整个数据库(备份整个数据库)
必须用超级用户 system ,sys
exp system/manager file=c:/system.dmp full=y feedback=1000
或者
exp parfile=c:/sys.par
>>>sys.par
userid=system/manager
file=c:/system.dmp
full=y
比较全的一个导出的参数文件
>>>sys.par
userid=system/manager
file=c:/aa.dmp
buffer=1024000 --缓冲
rows=y --是否导出记录
compress=y --extent是否压缩
grants=y --grant语句是否导出
indexes=y --导出索引
full=y --全库导出
feedback=3 --显示导出进度每3行
导出表scott.dept中部门编号是40的记录
>>>sys.par
userid=system/manager
file=c:/sys.dmp
tables=(scott.emp)
query="where deptno=10"
导出表scott.emp中的记录
>>>sys.par
userid=system/manager
file=c:/sys.dmp
tables=(scott.emp)
feedback=3 --每3行记录显示一个点进度
如何把导出的数据导入到数据库中进行恢复??
imp import缩写形式
dos命令
imp help=y 查看帮助
<1>把scott下的表emp导出 ,
然后删除表中的内容(truncate table emp),
利用导出的文件来恢复??
a)导出
exp parfile=c:/sys.par
>>> sys.par
userid=system/manager
file=c:/emp.dmp
tables=(scott.emp)
b)删除
truncate table emp; --删数据
或者
drop table emp; --删除结构
( delete from emp; --删数据可以恢复)
c)恢复
imp prafile=c:/im.par;
>>>im.par
userid=system/manager
file=c:/emp.dmp
fromuser=scott --从哪个用户来恢复
show=y --显示导入文件中的SQL语句
<2>scott下的对象全部复制到test用户下
(克隆用户scott)
a)导出scott用户
exp parfile=c:/sys.par
>>>sys.par
userid=system/manager
file=c:/scott.dmp
owner=(scott)
b)导入scott.dmp文件中的内容到test用户下
imp parfile=c:/im.par
>>>im.par
userid=system/manager
file=c:/scott.dmp
fromuser=scott
touser=test
<3>scott用户导出数据后
用户scott被删除了
怎么来恢复??????
a)导出scott用户
exp parfile=c:/sys.par
>>>sys.par
userid=system/manager
file=c:/scott.dmp
owner=(scott)
b)删除scott用户
drop user scott cascade;
c)恢复
先建立用户scott
grant connect,resource to scott
identified by tiger;
alter user scott
default tablespace users
temporary tablespace temp;
然后导入
imp parfile=c:/im.par
>>im.par
userid=system/manager
file=c:/scott.dmp
fromuser=scott
<4>如何进行全库导入
imp system/manager
file=c:/all.dmp full=y ignore=y
full ---全库
ignore ---忽略导入过程中的错误
如何建立一个新的数据库 ?????
使用DATABASE CONFIGURATION ASSISTANT
备份的第二种模式 物理备份
拷贝数据文件
数据文件 + 归档日志文件 = 整个数据库
在数据库不关闭的情况下备份(热备份)
<1>数据库可以关闭的物理备份(冷备份)
a)关闭数据库
b)拷贝数据文件
c)打开数据库
数据库工作在归档和非归档模式都可以
a)关闭数据库
connect system/manager
shutdown immediate;
b)拷贝文件
数据文件 v$DATAFILE
控制文件 v$controlfile
日志文件 v$
临时数据文件
c)打开数据库
startup;
写一个脚本文件 执行上述功能
cold_back.txt
如何用冷备份来恢复数据库
用备份的文件来覆盖原来的文件,就OK
<2>数据库不能关闭的情况下作热备份
(24x7运行的系统)
a)设置数据库工作在归档模式下
b)备份表空间
c)作一次日志切换 (把在热备份过程中产生的数据写到归档日志中)
d)备份归档日志文件
--数据库有哪些表空间
select tablespace_name from dba_tablespaces
where status <> 'READ ONLY';
--每个表空间对应的数据文件
select file_name from dba_data_files
where tablespace_name='SYSTEM';
--要拷贝SYSTEM表空间所对应的数据文件
--使表空间system处于热备份状态
alter tablespace system begin backup;
--拷数据文件
host copy D:/ORACLE/ORADATA/ACCP/SYSTEM01.DBF c:/backup
--关闭热备份状态
alter tablespace system end backup;
--
recover database;
--数据库损坏的情况下来恢复
recover database datafile 4;
恢复第4个数据文件