Oracle DBCA 静默删除以及建库的脚本

No.1 背景

公司最近有一个测试环境需要重新备份恢复
但是里面有6个数据库实例 400多G的数据文件.
一般情况下 需要drop user xxx cascade ;
然后执行 drop tablespace xxx including content and datafile ;
因为表数量重大, 元数据较为复杂, 这几个命令实在是非常浪费时间.

为了提高效率 准备使用 dbca 建库的方式进行处理 来加快处理时间.

注意: 
此场景仅适用于测试环境. 
此场景仅适用于可以推倒重来的场景. 

No.2 处理过程

一定要确认数据库可以重新搭建.
处理之前IP地址与机器名服务名一定要确定好
可以通过 lsnrctl 查看服务名 进行确定.

第一步静默删除数据库

su - oracle 
# 必须切换到Oracle用户进行处理. 
dbca -silent -deleteDatabase -sourceDB orcl
# 注意这一步 需要输入 sys的账户密码. 
确认删除成功之后可以查看一下 datafile的文件目录
/data/orcl/app/oracle/oradata
里面的文件都已经被清理里. 速度比较快可能也就几分钟. 

第二步 静默创建数据库
dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname orcl -sid orcl -responseFile NO_VALUE -characterSet ZHS16GBK -datafileDestination /data/orcl/app/oracle/oradata  -memoryPercentage 30 -emConfiguration LOCAL 

# 注意 需要进行处理 注意字符集. 数据库数据文件目录. 
# 以及注意服务名以及其他, 尽量保持一致 .

No.3 异常问题处理

本次静默建库报了一个错误: 
ORA-27104: system-defined limits for shared memory was misconfigured

百度简单一搜发现里面是kernel的问题. 需要修改内核参数.

比较简单
vim /etc/sysctl.conf
根据内存情况进行添加, 一般的说法为至少为内存数量的一般进行计算
比如我这边是 96G内存的服务器 我设置如下, 服务器启动起来了:
kernel.shmmax = 68719476736
kernel.shmall = 33554432

注意 需要执行一下 sysctl -p 使之生效 即可. 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章