迁移时ASM环境下自动创建表空间
我是本际云服务器推荐网的小编小本本。最近要迁移客户的一套数据库,数据量比较大,源端表空间也比较多,建库完成后,创建表空间也是个花时间的活,就想着偷点懒,写个简单的脚本实现,反正ASM环境,最麻烦的文件路径问题也不是事儿嘛~

思路梳理
因为ASM环境路径只需指定到磁盘组即可,所以只需要一个简单的判断循环,就可以后台跑脚本来自动创建表空间,添加数据文件了。这边现场的数据库文件大小一般为32764m,我们根据源端表空间的大小和使用率,得出所需的数据文件个数作为参数文件就可以了。
实现方法
1. 根据表空间使用大小或总大小编辑配置文件(去除系统表空间)
set line 300 pages 99
select a.tablespace_name, ceil(round(total,1)/32764) total_count,
ceil(round(total-free,1)/32764) used_count
from (select tablespace_name, sum(bytes)/(1024*1024) total
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(bytes)/(1024*1024) free
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name(+)
and a.tablespace_name not in ('SYSTEM', 'SYSAUX', 'USER')
and a.tablespace_name not like 'UNDO%'
order by 3 desc;
2. 修改脚本环境变量后执行
vi create_tbs.sh
source ~/.bash_profile
export ORACLE_SID=orcl # 防止多实例数据库的情况
echo $ORACLE_SID
cat cfg_tablespace.txt | while read space_name TOTAL_COUNT USED_COUNT
do
if [$USED_COUNT = "1"]; then
sqlplus / as sysdba > create_tbs.log
create tablespace $space_name datafile +DATA_DG1 size 32764m autoextend off;
disconnect
exit EOF
else
sqlplus / as sysdba > create_tbs.log
create tablespace $space_name datafile +DATA_DG1 size 32764m autoextend off;
disconnect
exit EOF
USED_COUNT=`expr $USED_COUNT - 1`
echo $USED_COUNT
for i in `seq 1 $USED_COUNT`
do
sqlplus / as sysdba > add_tbs_file.log
alter tablespace $space_name add datafile +DATA_DG1 size 32764m autoextend off;
disconnect
exit EOF
done
fi
done
fi
因为环境很干净,所以没有考虑更多的复杂情况,实现的逻辑就是如果仅需一个数据文件,那就使用创建表空间指定一个数据文件的语句,如果需要多个表空间,就先创建表空间并指定一个数据文件,然后把count数减一,作为循环的次数往这个表空间里添加数据文件即可。好了,这么一个简单的功能就实现了,后台跑起来!我得抓紧时间去干迁移的其他活了~
归纳总结
运维被称为搬砖工作,主要也是有很多重复性的劳动,费时费力,还好我们有各种趁手的工具可以帮助我们减少这类工作。现在公司正在推进自动化运维,我个人感觉只要有好的思路,很多工作确实可以编辑脚本,最终由平台自动实现,而基础类的工作可以自动化之后,我们可以节省大量的时间在更多有意思的事情上面。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5974.html
