昨天用了这样一个语句来导出数据库文件。。导了一会儿就卡死了。
full=y是导出整个数据库,不加full=y是导出当前连接数据库的用户下的数据,trainee这个用户没有DBA权限,应该是不能导出整个数据库的。
奇怪为什么没有先报错。
exp trainee/123456@orcl file=C:\Users\Administrator\Desktop\OracleTask\practice\trainee.dmp full=y
整理一下数据迁移的相关知识。
参考书:《Oracle DBA 高可用、备份恢复与性能优化》清华大学出版社
(1)关于几个备份
1.逻辑备份与物理备份
逻辑备份:备份数据库的结构和数据。使用数据泵和EXP/IMP是逻辑备份。
物理备份:备份数据库的数据文件、控制文件、归档日志文件等。
2.脱机备份和联机备份
脱机备份:冷备份。在数据库关闭的情况下实现备份,要备份所有的数据库文件。
联机备份:热备份。运行时备份,必须处于归档模式,可以备份某个表空间的所有数据文件、也可以备份某个表空间的一个数据文件。相当复杂。
3.一致备份和非一致备份
SCN:system change number,Oracle为每个事务都设置了唯一的SCN,每次事务提交时都自动增加SCN。
恢复:数据文件和控制文件中系统SCN不一致时,恢复进程要使用归档日志文件和联机重做日志文件中的数据更新数据文件中的内容。即将重做日志文件中用户提交的数据重新写入数据文件。
一致:数据文件和控制文件中的SCN一致。
一致备份与不一致备份的区别:是否进行“恢复”。
(2)exp
exp要在DOS窗口命令行执行。
1.exp导出整个数据库,用户要有DBA权限才可以
exp system/123456@orcl file=C:\Users\Administrator\Desktop\OracleTask\practice\wholeDB.dmp full=y
2.导出指定表
导出其他用户的表
exp system/123456@orcl tables = trainee.namex,u_j121.stud
file=C:\Users\Administrator\Desktop\OracleTask\practice\tables.dmp
导出当前用户的表
exp trainee/123456@orcl tables= namex,classes
file=C:\Users\Administrator\Desktop\OracleTask\practice\trainee_tables.dmp
3.导出指定用户的所有数据库对象
/*使用有DBA权限的system导出scott用户的所有数据库对象*/
exp system/123456@orcl owner=scott
file=C:\Users\Administrator\Desktop\OracleTask\practice\scott.dmp
/*登录scott导出自己的数据库对象*/
exp scott/123456@orcl owner=scott
file=C:\Users\Administrator\Desktop\OracleTask\practice\scott.dmp
4.导出特定的表空间
exp system/123456@orcl tablespace=users
file=C:\Users\Administrator\Desktop\OracleTask\practice\users.dmp
(3)imp
1.imp导入整个数据库
imp system/123456@orcl full=y file=wholeDB.dmp ignore=y
ignore=y可以忽略创建数据库对象时对象已经存在等错误
2.恢复trainee的namex表
drop table namex;
desc namex;
imp system/123456@orcl tables=namex file=tables.dmp
desc namex;
3.恢复指定用户
/*恢复scott用户的所有数据库对象*/
imp system/123456@orcl full=y file=scott.dmp
/*将特定的表导入指定用户*/
imp system/123456@orcl tables=emp fromuser=scott touser=system
file=scott.dmp
PS:导出导入好像很容易报错,但是不影响使用就没事。