Oracle数据库备份、恢复及常见问题

时间:2024-02-17 09:00:29

通常我们都是使用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。

(4)PL/SQL导入表数据报错Error reading file

如果此文对您有帮助,微信打赏我一下吧~

当表数据文件很大时,选择Use Command Window方式导入报错。对大量数据的导入选择Use SQL*Plus,前者不能读取大文件,后者可以。