当前数据库里的数据文件都是8G,需要扩到32G,数据文件是建在裸设备上,lv的容量就只有8G,需要重建lv,再添加数据文件。
1.查询哪些数据文件没有数据,删除这些数据文件:
set pagesize 999
spool liu.sql
select 'alter tablespace '||tablespace_name||' drop datafile '|| file_name||';'
from dba_data_files where file_id not in (select distinct file_id from dba_extents) order by 1;
spool off;
生成的liu.sql 的内容如下: 给数据文件加单绰号
alter tablespace TBSKR_SL drop datafile /dev/rlv_data291;
alter tablespace TBSKR_SL drop datafile /dev/rlv_data293;
alter tablespace TBSKR_SL drop datafile /dev/rlv_data295;
alter tablespace TBSKR_SL drop datafile /dev/rlv_data296;
2.运行脚本删除数据文件
运行过程中出现了这样两个报错,那是因为表空间第一个数据文件不能删除,如果表空间只有一个数据文件,这个仅有的数据文件也不能删除
alter tablespace TBSKR_SL drop datafile '/dev/rlv_data291'
*
ERROR at line 1:
ORA-03263: cannot drop the first file of tablespace TBSKR_SL
alter tablespace TBS_MASA drop datafile '/dev/rlv_data480'
*
ERROR at line 1:
ORA-03261: the tablespace TBS_MASA has only one file
3.生成删除lv的脚本
cat liu.sql|awk -F"'" '{print $2}'|awk -F"/dev/r" '{print "rmlv "$2"<<EOF\ny\nEOF"}' > /liu/rmlv.sh
将脚本里的 /dev/rlv_data291 和 /dev/rlv_data480 去掉
4.将datavg里 closed状态的数据文件也加入删除lv的脚本:
lsvg -l datavg |grep closed | awk '{print "rmlv "$1"<<EOF\ny\nEOF"}' >> rmlv.sh
rmlv.sh脚本内容如下:
rmlv lv_data293<<EOF
y
EOF
rmlv lv_data295<<EOF
y
EOF
rmlv lv_data296<<EOF
y
EOF
5.脚本第一行加入魔法字节,改脚本的权限,执行脚本
执行时报错:
0516-1008 rmlv: Logical volume lv_data293 must be closed. If the logical
volume contains a filesystem, the umount command will close
the LV device.
运行下面这两条语句来关闭lv
fuser -cux /dev/lv_data293
fuser -kux /dev/lv_data293
再执行脚本
6.再创建32G的lv
seq 221 350 > num
cat num |awk '{print "mklv -t raw -e x -y lv_data"$1" datavg 128 updisk2 updisk3"}' > mklv.sh
改权限,加魔法字节,执行脚本,改rlv的权限和属主
7.生成增加数据文件的脚本,执行脚本添加数据文件,执行脚本
seq 72 90 > num
cat num| awk '{print "alter tablespace TBSKR_SL add datafile ''/dev/rlv_data"$0"'' size 32750m; "}'