当时想让数据文件offline 之后 复制文件系统数据文件到罗裸设备上,之后online操作。后来发现时非归档模式。
当时操作:OFFLINE FOR DROP;
SQL> alter database datafile '/u01/app/oracle/product/11.2.0/oracle/dbs/data039.dbf' OFFLINE FOR DROP;
Database altered.
SQL> alter database datafile '/u01/app/oracle/product/11.2.0/oracle/dbs/data040.dbf' OFFLINE FOR DROP;
Database altered.
处理方式 redolog (在还没有切换一圈的情况下)
SELECT file_id,file_name,status,bytes/1024/1024 mb FROM dba_data_files ORDER BY 1 ;
549 /u01/app/oracle/product/11.2.0/oracle/dbs/data039.dbf AVAILABLE 16382
550 /u01/app/oracle/product/11.2.0/oracle/dbs/data040.dbf AVAILABLE 16382
SELECT file#,name,status FROM v$datafile;
549 /dev/rdata039.dbf RECOVERY
550 /dev/rdata040.dbf RECOVERY
alter database create datafile 549 as '/dev/rdata039.dbf'
alter database create datafile 550 as '/dev/rdata040.dbf'
ALTER DATABASE RECOVER datafile 549
ALTER DATABASE RECOVER datafile 550
#################################
常规操作
通知业务部门停止应用,停止数据库
shudown immdiate;
dd if=/u01/app/oracle/product/11.2.0/oracle/dbs/data039.dbf of=/dev/rdata039.dbf bs=4k seek=1
alter database rename '/u01/app/oracle/product/11.2.0/oracle/dbs/data039.dbf' to '/dev/rdata039.dbf';
startup ;
######################
当时在数据库中想将USERS表空间脱机(alter database datafile '/u01/app/oracle/oradata/orcl/users01.dbf' offline),
但是报了ORA-01145: offline immediate disallowed unless media recovery enabled 错误。后来才发现,要想对数据文件脱机,必须在归档模式下,
这是ORACLE自动保护的一种措施,防止在非归档模式下对数据文件脱机,造成数据丢失。
解决办法:
可以在非归档模式下,使用alter database datafile '/u01/app/oracle/oradata/orcl/users01.dbf' offline for drop;语句将数据文件脱机,drop并不会删除物理文件。
如果没有使用alter system switch logfile;切换日志文件组,那么可以采用recover datafile name;来恢复,并联机。
如果已切换日志文件组并清空了里面的内容,这个数据文件就不能再恢复联机,永远处于recover状态(可以通过v$datafile视图查看).
所以如果在实际的生产环境中,尽量在归档模式下做脱机数据文件操作。
#####以下信息转载
裸设备文件系统之间数据库转换
1,裸设备的可用空间
不同的UNIX对裸设备的管理不完全相同,特别要注意的是某些UNIX在每个裸设备的头部要保留一定的空间,应用程序在使用裸设备时不可以覆盖这一部分,
否则会对裸设备造成损坏。所以一个裸设备的实际可用空间是分配给裸设备的空间再减去这部分操作系统保留空间。
下面是常用UNIX的OS Reserved Size列表:
UNIXOS Reserved Size
----------------------------
SUN Solaris 0
HP-UX 0
IBM AIX 4k
Tru64 UNIX 64k
Linux 0
2、dd命令
dd [ operand=value ... ]
if=file 指定输入文件,缺省值是标准输入
of=file 指定输出文件,缺省值是标准输出
bs=n 设置输入和输出的块大小为n字节,也可以用“k”作单位
skip=n 在拷贝之前跳过n个输入块,缺省值是0
seek=n 在拷贝之前从输出文件首部跳过n块,缺省值是0
count=n 指定拷贝的块数,缺省拷贝到输入文件结束
3、在裸设备上建立数据文件
SQL> CREATE TABLESPACE ts_test DATAFILE '/dev/rlv_data' SIZE 8180k;
SIZE指定的数值必须小于或等于8180k,否则语句将会失败:
ORA-01119: error in creating database file '/dev/rlv_data'
ORA-27042: not enough space on raw partition to fullfill request
这个最大值的计算方法如下:
8192k(RAW DEVICE SIZE) - 4k (OS_RESERVED_SIZE) - 8k (DB_BLOCK_SIZE) = 8180k
为什么还要减去一个DB_BLOCK_SIZE呢?这是因为ORACLE建立DATAFILE时,在命令中SIZE指定的大小之外,还要在文件头另加一个BLOCK,叫作“Oracle OS Header Block”,里面保存有这个文件的逻辑块大小和文件块数等信息。
这一点并不是在RAW DEVICE上建DATAFILE特有的,如果你在文件系统上建一个DATAFILE,指定SIZE 1000k的话,你用ls -l或dir命令看到的文件大小将是1008k (DB_BLOCK_SIZE=8K)。
4、文件系统上建立数据文件
SQL> CREATE TABLESPACE test DATAFILE '/oradata/test.dbf' SIZE 4M;
b. 查看一下这个新建的DATAFILE的大小 (注:4202496 = 4M + 8K)
$ ls -l /oradata/test.dbf
-rw-r----- 1 oracle dba 4202496 Aug 29 15:01 /oradata/test.dbf
5. 在数据库没有OPEN的状态下,用dd进行拷贝
AIX$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=4k seek=1
1026+0 records in
1026+0 records out
Tru64$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=64k seek=1
64+1 records in
64+1 records out
Other$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=1024k
4+1 records in
4+1 records out
当时操作:OFFLINE FOR DROP;
SQL> alter database datafile '/u01/app/oracle/product/11.2.0/oracle/dbs/data039.dbf' OFFLINE FOR DROP;
Database altered.
SQL> alter database datafile '/u01/app/oracle/product/11.2.0/oracle/dbs/data040.dbf' OFFLINE FOR DROP;
Database altered.
处理方式 redolog (在还没有切换一圈的情况下)
SELECT file_id,file_name,status,bytes/1024/1024 mb FROM dba_data_files ORDER BY 1 ;
549 /u01/app/oracle/product/11.2.0/oracle/dbs/data039.dbf AVAILABLE 16382
550 /u01/app/oracle/product/11.2.0/oracle/dbs/data040.dbf AVAILABLE 16382
SELECT file#,name,status FROM v$datafile;
549 /dev/rdata039.dbf RECOVERY
550 /dev/rdata040.dbf RECOVERY
alter database create datafile 549 as '/dev/rdata039.dbf'
alter database create datafile 550 as '/dev/rdata040.dbf'
ALTER DATABASE RECOVER datafile 549
ALTER DATABASE RECOVER datafile 550
#################################
常规操作
通知业务部门停止应用,停止数据库
shudown immdiate;
dd if=/u01/app/oracle/product/11.2.0/oracle/dbs/data039.dbf of=/dev/rdata039.dbf bs=4k seek=1
alter database rename '/u01/app/oracle/product/11.2.0/oracle/dbs/data039.dbf' to '/dev/rdata039.dbf';
startup ;
######################
当时在数据库中想将USERS表空间脱机(alter database datafile '/u01/app/oracle/oradata/orcl/users01.dbf' offline),
但是报了ORA-01145: offline immediate disallowed unless media recovery enabled 错误。后来才发现,要想对数据文件脱机,必须在归档模式下,
这是ORACLE自动保护的一种措施,防止在非归档模式下对数据文件脱机,造成数据丢失。
解决办法:
可以在非归档模式下,使用alter database datafile '/u01/app/oracle/oradata/orcl/users01.dbf' offline for drop;语句将数据文件脱机,drop并不会删除物理文件。
如果没有使用alter system switch logfile;切换日志文件组,那么可以采用recover datafile name;来恢复,并联机。
如果已切换日志文件组并清空了里面的内容,这个数据文件就不能再恢复联机,永远处于recover状态(可以通过v$datafile视图查看).
所以如果在实际的生产环境中,尽量在归档模式下做脱机数据文件操作。
#####以下信息转载
裸设备文件系统之间数据库转换
1,裸设备的可用空间
不同的UNIX对裸设备的管理不完全相同,特别要注意的是某些UNIX在每个裸设备的头部要保留一定的空间,应用程序在使用裸设备时不可以覆盖这一部分,
否则会对裸设备造成损坏。所以一个裸设备的实际可用空间是分配给裸设备的空间再减去这部分操作系统保留空间。
下面是常用UNIX的OS Reserved Size列表:
UNIXOS Reserved Size
----------------------------
SUN Solaris 0
HP-UX 0
IBM AIX 4k
Tru64 UNIX 64k
Linux 0
2、dd命令
dd [ operand=value ... ]
if=file 指定输入文件,缺省值是标准输入
of=file 指定输出文件,缺省值是标准输出
bs=n 设置输入和输出的块大小为n字节,也可以用“k”作单位
skip=n 在拷贝之前跳过n个输入块,缺省值是0
seek=n 在拷贝之前从输出文件首部跳过n块,缺省值是0
count=n 指定拷贝的块数,缺省拷贝到输入文件结束
3、在裸设备上建立数据文件
SQL> CREATE TABLESPACE ts_test DATAFILE '/dev/rlv_data' SIZE 8180k;
SIZE指定的数值必须小于或等于8180k,否则语句将会失败:
ORA-01119: error in creating database file '/dev/rlv_data'
ORA-27042: not enough space on raw partition to fullfill request
这个最大值的计算方法如下:
8192k(RAW DEVICE SIZE) - 4k (OS_RESERVED_SIZE) - 8k (DB_BLOCK_SIZE) = 8180k
为什么还要减去一个DB_BLOCK_SIZE呢?这是因为ORACLE建立DATAFILE时,在命令中SIZE指定的大小之外,还要在文件头另加一个BLOCK,叫作“Oracle OS Header Block”,里面保存有这个文件的逻辑块大小和文件块数等信息。
这一点并不是在RAW DEVICE上建DATAFILE特有的,如果你在文件系统上建一个DATAFILE,指定SIZE 1000k的话,你用ls -l或dir命令看到的文件大小将是1008k (DB_BLOCK_SIZE=8K)。
4、文件系统上建立数据文件
SQL> CREATE TABLESPACE test DATAFILE '/oradata/test.dbf' SIZE 4M;
b. 查看一下这个新建的DATAFILE的大小 (注:4202496 = 4M + 8K)
$ ls -l /oradata/test.dbf
-rw-r----- 1 oracle dba 4202496 Aug 29 15:01 /oradata/test.dbf
5. 在数据库没有OPEN的状态下,用dd进行拷贝
AIX$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=4k seek=1
1026+0 records in
1026+0 records out
Tru64$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=64k seek=1
64+1 records in
64+1 records out
Other$ dd if=/oradata/test.dbf of=/dev/rlv_data bs=1024k
4+1 records in
4+1 records out
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26179376/viewspace-1984225/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26179376/viewspace-1984225/