用重做控制文件方法修改oracle文件路径
1、这里第一步,当然是查到数据在哪了
sql>col file_name format a55
sql>set line 120 pagesize 2000 ——设置输出格式
sql>select file_name,tablespace_name from dba_data_files;
2、这里我们知道数据文件在哪里了,现在就可以开始迁移数据文件了(当然这里我们需要先进行关机,不然会有数据文件在运行,造成不必要的麻烦)
sql>shutdown immediate 关闭数据库
sql>!mv /disk/* /u02/app/oracle/oradata/test/ 这里我所有的控制文件都放在/disk目录,当然是可以直接用*号代替
3、做一下控制文件的备份(产生track文件)
做控制文件的备份,这里我们要先进入mount状态
sql>startup mount
sql>alter database backup controlfile to trace
当然这里track文件已经产生,每个人的track文件路径不同,所以我们可以用如下命令进行查看track文件路径
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'user_dump_dest';
4、重建控制文件
这里,如果我们是重建控制文件,肯定是不能再mount状态下的,所以我们又需要关机,进入nomount状态
sql>shutdown immediate 关闭数据库转换为nomount状态
sql>startup no mount nomount
下面开始重建控制文件:
CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS ARCHIVELOG (这两句是归档,如果没开切记换成NORESETLOGS NOARCHIVELOG)
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u02/app/oracle/oradata/orcl/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u02/app/oracle/oradata/orcl/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/u02/app/oracle/oradata/orcl/redo03.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/disk/system01.dbf',
'/disk/sysaux01.dbf',
'/disk/undotbs01.dbf',
'/disk/users01.dbf'
CHARACTER SET ZHS16GBK (字符集,这里也不要弄错了,当然这所有的,你可以进入3中备份的track查看到这所有的)
如上执行控制文件创建成功
5、启动数据库
sql>alter database open resetlogs 将nomount状体转换为open状态,启动数据库
这一步很有可能会报如下错误,这里日子文件时间产生差异,会报错
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
解决办法(进行介质恢复):
sql>recover database using backup controlfile
如下,第一种/disk/redo02.log,这里说明redo02.log是对的,而erdo01.log完成介质恢复,说明redo01.log在重建控制文件时是当前日志文件,恢复时产生了时间差异
sql>alter database open resetlogs 这时我们启动数据库,可以看到启动成功
6、查看修改后的数据文件的路径和状态:
SQL> select file_name,tablespace_name,status from dba_data_files;
至此,/opt/oracle/db02/oradata/ORCL目录下的数据文件路径全部修改成功
RMAN 控制文件的备份与恢复
rman target /
RMAN> show all 这里第一步,看一下当前控制文件保存的路径
db_unique_name 为 TEST 的数据库的 RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/orabackup/%F'; 这里/代表oracle的家目录
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u02/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_test.f'; # default
上面我们可以看到控制文件备份的路径
这里也可以修改控制文件为自动备份(当数据文件备份时,会自带备份一份控制文件)
configure controlfile autobackup on;启动控制文件自动备份
configure controlfile autobackup format for device type disk to '/orabackup/%F';修改控制文件备份路径
这时候,我们就可以进行备份了
backup current controlfile 就可以备份了,当然如果你想另指路径,可以在后面加上format和路径
list backup of controlfile; 查看备份后的控制文件
RMAN> RESTORE CONTROLFILE FROM '/u01/oracle/fast_recovery_area/JUSTDB/backupset/2013_12_11/o1_mf_ncsnf_TAG20131211T162913_9bj8m1gt_.bkp'; 还原