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 使之生效 即可.