通常我们都是使用PL/SQL Developer来对Oracle中的数据对象和数据进行管理。如果我们想方便快速还原或者部署Oracle到新机器上,怎么进行数据库的备份、导入恢复呢?
这里我们必须要考虑的:如何创建Oracle表空间、创建Oracle数据库;如何把Oracle对象、表数据导出到sql脚本中。
1、数据库备份
(1)导出数据库对象
Tools-->ExportUser Objects,选择需要导出的数据库对象,包括:表、序列、存储过程、视图、函数等。
(2)导出表数据
Tools-->Export Tables,导出数据到PL/SQL数据库脚本中。
2、新建表空间和Oracle数据库
File-->New-->SQL Window,打开SQL窗口输入:
表空间、用户名都为IGSC。
create tablespace IGSC datafile ‘E:\IGSOracle\IGSC.dbf‘ size 10240M; --DROP TABLESPACE IGSC INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS; create user IGSC identified by IGSC default tablespace IGSC; grant connect,resource to IGSC; grant dba to IGSC; --Revoke dba from IGSC;
点击执行sql。此时,数据库表空间、表结构、表数据齐全,可以开始迁移出一个完整的数据库了。
3、导入数据库及对象
Tools-->Import Tables,先导入数据库对象,再导入表数据,此时,你的表数据文件可以分几个文件导入也是不会报错的,因为表结构已经存在。
执行过程中会出现如下界面:
到这,整个oracle数据库的迁移工作已完成。注意:我们导出的Oracle对象和数据库默认还是原来Oracle数据库的表空间和数据库用户名。如果想在新的数据库服务器中指定不同的表空间和数据库用户,则需要替换生成的sql脚本中的表空间和用户名的设置,并且第二步指定合理的表空间和数据库用户。
4、常见问题
(1)就是上面说的注意
我遇到的问题:新环境的数据库中存在IGS表空间,我导出的数据库文件IGSOracle.sql表空间默认也为IGS,结果在导入数据库对象到新表空间IGSC时,没有导入成功,却导入到了已存在的IGS表空间中。查看IGSOracle.sql:
发现导出的Oracle对象和数据库默认还是原来Oracle数据库的表空间和数据库用户名,我们要将表空间和用户名都改为IGSC,重新导入。
(2)ORACLE initialization or shutdown in progress
想删除不想要了的数据库和dbf文件,停掉服务后删除,重启服务启动数据库实例时报错。
解决:
开始-->输入,sqlplus /nolog
SQL> connect system/hope;
ERROR:
ORA-01033: ORACLE initialization or shutdown in progress【就是这个错误】
SQL> connect sys/hope as sysdba
已连接。
SQL> shutdown normal
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> start mount
SP2-0310: 无法打开文件 "mount.sql"
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1332348 bytes
Variable Size 183151492 bytes
Database Buffers 423624704 bytes
Redo Buffers 4259840 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 8: ‘C:\TYKM.DBF‘
SQL> alter database datafile 8 offline drop;【8是数据文件中的8】
数据库已更改。
SQL> alter database open;【一直循环这个语句,直至不再提示错误】
数据库已更改。
SQL> shutdown normal
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1332348 bytes
Variable Size 187345796 bytes
Database Buffers 419430400 bytes
Redo Buffers 4259840 bytes
数据库装载完毕。
数据库已经打开。
(3)ORA-1658 无法为表空间的段创建initial区
原因:表空间大小
解决:因为表数据比较大,我这里将步骤二中的size改为了10240M。