windows下oracle数据的恢复
目的:只有E:/oracle/product/10.2.0/oradata/orcl下的数据:数据文件,控制文件,日志文件,如何恢复用户数据。
解决方法(我的oracle安装在了E盘):
1、 删除掉新建数据库/oracle/product/10.2.0/oradata/orcl下的所有数据文件、控制文件和日志文件。Copy原数据库的数据文件、控制文件和日志文件到对应目录下。
2、 连接sqlplus,
Conn system as sysdba
用户名:system as sysdba
密码:(此处密码为新创建数据库的密码),如下图(图咋贴不上去啊):
3、
Sql>shutdown immediate
Sql>startup nomount
Sql>alter database mount
看是否数据库能否mount?
有时会提示没有口令文件E:/oracle/product/10.2.0/db_1/database/PWDorcl.ora文件找不到。查看对应的目录(database下)会发现该文件是存在的。此时需要注意,该口令文件是新安装数据库后创建实例时生成的口令文件,不是以前所用数据库的口令文件,而现在,我们是用以前数据库的控制文件和数据文件来打开以前的数据库,所以此时需要重新创建一个口令文件。
Sql>shutdown immediate
Sql>host orapwd file=E:/oracle/product/10.2.0/db_1/database/PWDorcl.ora password=oracle
Entries=10 (放在database 目录下)
Sql>startup nomount
Sql>alter database mount
4、打开数据库。
Sql>alter database open
如果新数据库的安装目录和原有数据库的目录不一样,那么此时可以重建控制文件来打开数据库。因为原控制文件中记录的数据文件地址和现有的数据文件位置不一样。
重建控制文件步骤:
先执行 备份控制文件
SQL> alter database backup controlfile to trace;
Database altered.
然后去E:/oracle/product/10.2.0/admin/orcl/udump里找出最新的那个文件。
从中找出这段:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG' SIZE 50M,
GROUP 2 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG' SIZE 50M,
GROUP 3 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF',
'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF',
'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSAUX01.DBF',
'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USERS01.DBF',
'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/EXAMPLE01.DBF',
CHARACTER SET ZHS16GBK
;
RECOVER DATABASE
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/temp01.dbf'
SIZE 41943040 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
形成一个新的文件creatctl.sql,放在E:/ creatctl.sql.
执行此控制文件就OK了
SQL>@ E:/ creatctl.sql