Oracle備份與恢復系列(四)複製資料庫 續 建立新的控制檔案
本次試驗採用用Create controlfile命令來建立控制檔案。
應用場合如下
1,丟失了所有的控制檔案
2,需要更改重做日誌成員或組的最大設定。
3,必須更改資料庫檔案或例項的最大序號。
4,希望更改資料庫檔案的名稱和位置(也可以在open狀態下用其他方法實現)
5,希望更改資料庫名。
注意事項
1,資料庫例項必須啟動,但沒有mount。如果執行成功create controlfile語句則載入新建立的控制檔案。
2,執行該命令的使用者必須被賦予osdba角色
3,當建立一個新的控制檔案時,會丟失所儲存的歷史資料,例如歸檔日誌歷史和rman備份。
實驗步驟如下
1 準備克隆資料庫
2 備份開啟的PRACTICE資料庫
3 配置控制檔案指令碼
4 執行控制檔案指令碼
5 恢復克隆的資料庫
6 開啟克隆的資料庫
step1 準備克隆資料庫
export ORACLE_SID=CLNE
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_DATA=/oradata/$ORACLE_SID
export ORACLE_ADMIN=$ORACLE_BASE/admin/$ORACLE_SID
mkdir -p $ORACLE_ADMIN/{b,c,u}dump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/create
mkdir /oradata
mkdir /archive
mkdir /backup
chown oracle:oinstall /oradata
chown oracle:oinstall /archive
chown oracle:oinstall /backup
create pfile from spfile;
scp $ORACLE_HOME/dbs/initPRACTICE.ora192168.1.21:$ORACLE_HOME/dbs/initCLNE.ora
vi $ORACLE_HOME/dbs/initCLNE.ora
db_name=CLNE <==修改克隆資料庫名
db_files = 80
db_file_multiblock_read_count = 8
#db_block_buffers = 100
#shared_pool_size = 3500000
log_checkpoint_interval = 10000
processes = 200
parallel_max_servers = 5
log_buffer = 32768
max_dump_file_size = 10240
global_names = FALSE
job_queue_processes=20
control_files = (/oradata/CLNE/control01.ctl,/oradata/CLNE/control02.ctl)
sga_max_size=300M
sga_target=300M
undo_management='AUTO'
CLNE.__db_cache_size=218103808
CLNE.__java_pool_size=4194304
CLNE.__large_pool_size=4194304
CLNE.__shared_pool_size=83886080
CLNE.__streams_pool_size=0
*.control_files='/oradata/CLNE/control01.ctl','/oradata/CLNE/control02.ctl'
*.db_file_multiblock_read_count=8
*.db_files=80
*.db_name='CLNE'
*.global_names=FALSE
*.job_queue_processes=20
*.log_archive_dest_1='location=/oradata/CLNE/archive'
*.log_archive_format='%t_%s_%r.arc'
*.log_buffer=32768
*.log_checkpoint_interval=10000
*.max_dump_file_size='10240'
*.parallel_max_servers=5
*.processes=200
*.sga_max_size=300M
*.sga_target=300M
*.undo_management='AUTO'
建立密碼檔案
orapwd file=$ORACLE_HOME/dbs/orapwCLNE password=oracle entries=30 force=y
step2 備份開啟的PRACTICE資料庫
該指令碼是在源資料庫open狀態下執行alter tablespace begin backup方式進行的。
@/backup/scripts/open_backup.sql
指令碼如下
vi /backup/scripts/open_backup.sql
set feedback off
set pagesize 0
set heading off
set verify off
set linesize 100
set trimspool on
define dir = '/backup/open_backup'
define fil = '/backup/scripts/open_backup_commands.sql'
define spo = '&dir/open_backup_output.lst'
set serveroutput on
spool &fil
prompt spool &spo
prompt archive log list;;
prompt alter system switch logfile;;
prompt alter system archive log all;;
DECLARE
rem不備份臨時表空間
CURSOR cur_tablespace IS
SELECT tablespace_name
FROM dba_tablespaces where tablespace_name<>'TEMP';
CURSOR cur_datafile (tn VARCHAR) IS
SELECT file_name
FROM dba_data_files
WHERE tablespace_name = tn;
BEGIN
FOR ct IN cur_tablespace LOOP
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' begin backup;');
FOR cd IN cur_datafile (ct.tablespace_name) LOOP
dbms_output.put_line ('host cp '||cd.file_name||' &dir');
END LOOP;
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' end backup;');
END LOOP;
END;
/
prompt alter system switch log file;;
rem 注意此處只備份了一個控制檔案,需要手工複製一份到快速恢復區/u01/app/oracle/fast_recovery_area/PRACTICE
prompt alter database backup controlfile to '&dir./control01.ctl' REUSE;;
prompt archive log list;;
prompt spool off
spool off;
@&fil
執行指令碼,複製PRACTICE資料庫檔案
@/backup/scripts/open_backup.sql
將備份檔案複製到例項目錄下
scp /backup/open_backup/* 192.168.1.21:/backup/
scp -r /archive/ 192.168.1.21:/
step3 配置控制檔案指令碼
執行backup 控制檔案命令
alter database backup controlfile to trace resetlogs;
檢視當前pid
!ps -ef|grep ora
oracle 3689 3688 0 12:35 ? 00:00:00 oraclePRACTICE (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
找到使用者dump目錄
show parameter user_dump_dest;
user_dump_dest string /u01/app/oracle/admin/PRACTICE/udump
開啟trace檔案
vi /u01/app/oracle/admin/PRACTICE/udump/practice_ora_3689.trc
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PRACTICE" RESETLOGS ARCHIVELOG
MAXLOGFILES 30
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/PRACTICE/redo01.log' SIZE 100M,
GROUP 2 '/oradata/PRACTICE/redo02.log' SIZE 100M,
GROUP 3 '/oradata/PRACTICE/redo03.log' SIZE 100M
-- STANDBY LOGFILE
DATAFILE
'/oradata/PRACTICE/system01.dbf',
'/oradata/PRACTICE/undotbs01.dbf',
'/oradata/PRACTICE/sysaux01.dbf',
'/oradata/PRACTICE/rbs01.dbf',
'/oradata/PRACTICE/users01.dbf',
'/oradata/PRACTICE/tools01.dbf',
'/oradata/PRACTICE/indx01.dbf',
'/oradata/PRACTICE/users02.dbf'
CHARACTER SET US7ASCII
;
建立一個控制檔案生成sql
vi /u01/app/oracle/admin/CLNE/create/create_control.sql
STARTUP NOMOUNT
CREATE CONTROLFILE set DATABASE "CLNE" RESETLOGS ARCHIVELOG
MAXLOGFILES 30
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/CLNE/redo01.log' SIZE 100M,
GROUP 2 '/oradata/CLNE/redo02.log' SIZE 100M,
GROUP 3 '/oradata/CLNE/redo03.log' SIZE 100M
-- STANDBY LOGFILE
DATAFILE
'/oradata/CLNE/system01.dbf',
'/oradata/CLNE/undotbs01.dbf',
'/oradata/CLNE/sysaux01.dbf',
'/oradata/CLNE/rbs01.dbf',
'/oradata/CLNE/users01.dbf',
'/oradata/CLNE/tools01.dbf',
'/oradata/CLNE/indx01.dbf',
'/oradata/CLNE/users02.dbf'
CHARACTER SET US7ASCII
;
step4 執行控制檔案指令碼
export ORACLE_SID=CLNE
sqlplus / as sysdba
@/u01/app/oracle/admin/CLNE/create/create_control.sql
step5 恢復克隆的資料庫
set logsource /archive;
recover database until cancel using backup controlfile;
step6 開啟克隆的資料庫
alter database open resetlogs;
應用場合如下
1,丟失了所有的控制檔案
2,需要更改重做日誌成員或組的最大設定。
3,必須更改資料庫檔案或例項的最大序號。
4,希望更改資料庫檔案的名稱和位置(也可以在open狀態下用其他方法實現)
5,希望更改資料庫名。
注意事項
1,資料庫例項必須啟動,但沒有mount。如果執行成功create controlfile語句則載入新建立的控制檔案。
2,執行該命令的使用者必須被賦予osdba角色
3,當建立一個新的控制檔案時,會丟失所儲存的歷史資料,例如歸檔日誌歷史和rman備份。
實驗步驟如下
1 準備克隆資料庫
2 備份開啟的PRACTICE資料庫
3 配置控制檔案指令碼
4 執行控制檔案指令碼
5 恢復克隆的資料庫
6 開啟克隆的資料庫
step1 準備克隆資料庫
export ORACLE_SID=CLNE
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_DATA=/oradata/$ORACLE_SID
export ORACLE_ADMIN=$ORACLE_BASE/admin/$ORACLE_SID
mkdir -p $ORACLE_ADMIN/{b,c,u}dump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/create
mkdir /oradata
mkdir /archive
mkdir /backup
chown oracle:oinstall /oradata
chown oracle:oinstall /archive
chown oracle:oinstall /backup
create pfile from spfile;
scp $ORACLE_HOME/dbs/initPRACTICE.ora192168.1.21:$ORACLE_HOME/dbs/initCLNE.ora
vi $ORACLE_HOME/dbs/initCLNE.ora
db_name=CLNE <==修改克隆資料庫名
db_files = 80
db_file_multiblock_read_count = 8
#db_block_buffers = 100
#shared_pool_size = 3500000
log_checkpoint_interval = 10000
processes = 200
parallel_max_servers = 5
log_buffer = 32768
max_dump_file_size = 10240
global_names = FALSE
job_queue_processes=20
control_files = (/oradata/CLNE/control01.ctl,/oradata/CLNE/control02.ctl)
sga_max_size=300M
sga_target=300M
undo_management='AUTO'
CLNE.__db_cache_size=218103808
CLNE.__java_pool_size=4194304
CLNE.__large_pool_size=4194304
CLNE.__shared_pool_size=83886080
CLNE.__streams_pool_size=0
*.control_files='/oradata/CLNE/control01.ctl','/oradata/CLNE/control02.ctl'
*.db_file_multiblock_read_count=8
*.db_files=80
*.db_name='CLNE'
*.global_names=FALSE
*.job_queue_processes=20
*.log_archive_dest_1='location=/oradata/CLNE/archive'
*.log_archive_format='%t_%s_%r.arc'
*.log_buffer=32768
*.log_checkpoint_interval=10000
*.max_dump_file_size='10240'
*.parallel_max_servers=5
*.processes=200
*.sga_max_size=300M
*.sga_target=300M
*.undo_management='AUTO'
建立密碼檔案
orapwd file=$ORACLE_HOME/dbs/orapwCLNE password=oracle entries=30 force=y
step2 備份開啟的PRACTICE資料庫
該指令碼是在源資料庫open狀態下執行alter tablespace begin backup方式進行的。
@/backup/scripts/open_backup.sql
指令碼如下
vi /backup/scripts/open_backup.sql
set feedback off
set pagesize 0
set heading off
set verify off
set linesize 100
set trimspool on
define dir = '/backup/open_backup'
define fil = '/backup/scripts/open_backup_commands.sql'
define spo = '&dir/open_backup_output.lst'
set serveroutput on
spool &fil
prompt spool &spo
prompt archive log list;;
prompt alter system switch logfile;;
prompt alter system archive log all;;
DECLARE
rem不備份臨時表空間
CURSOR cur_tablespace IS
SELECT tablespace_name
FROM dba_tablespaces where tablespace_name<>'TEMP';
CURSOR cur_datafile (tn VARCHAR) IS
SELECT file_name
FROM dba_data_files
WHERE tablespace_name = tn;
BEGIN
FOR ct IN cur_tablespace LOOP
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' begin backup;');
FOR cd IN cur_datafile (ct.tablespace_name) LOOP
dbms_output.put_line ('host cp '||cd.file_name||' &dir');
END LOOP;
dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' end backup;');
END LOOP;
END;
/
prompt alter system switch log file;;
rem 注意此處只備份了一個控制檔案,需要手工複製一份到快速恢復區/u01/app/oracle/fast_recovery_area/PRACTICE
prompt alter database backup controlfile to '&dir./control01.ctl' REUSE;;
prompt archive log list;;
prompt spool off
spool off;
@&fil
執行指令碼,複製PRACTICE資料庫檔案
@/backup/scripts/open_backup.sql
將備份檔案複製到例項目錄下
scp /backup/open_backup/* 192.168.1.21:/backup/
scp -r /archive/ 192.168.1.21:/
step3 配置控制檔案指令碼
執行backup 控制檔案命令
alter database backup controlfile to trace resetlogs;
檢視當前pid
!ps -ef|grep ora
oracle 3689 3688 0 12:35 ? 00:00:00 oraclePRACTICE (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
找到使用者dump目錄
show parameter user_dump_dest;
user_dump_dest string /u01/app/oracle/admin/PRACTICE/udump
開啟trace檔案
vi /u01/app/oracle/admin/PRACTICE/udump/practice_ora_3689.trc
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PRACTICE" RESETLOGS ARCHIVELOG
MAXLOGFILES 30
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/PRACTICE/redo01.log' SIZE 100M,
GROUP 2 '/oradata/PRACTICE/redo02.log' SIZE 100M,
GROUP 3 '/oradata/PRACTICE/redo03.log' SIZE 100M
-- STANDBY LOGFILE
DATAFILE
'/oradata/PRACTICE/system01.dbf',
'/oradata/PRACTICE/undotbs01.dbf',
'/oradata/PRACTICE/sysaux01.dbf',
'/oradata/PRACTICE/rbs01.dbf',
'/oradata/PRACTICE/users01.dbf',
'/oradata/PRACTICE/tools01.dbf',
'/oradata/PRACTICE/indx01.dbf',
'/oradata/PRACTICE/users02.dbf'
CHARACTER SET US7ASCII
;
建立一個控制檔案生成sql
vi /u01/app/oracle/admin/CLNE/create/create_control.sql
STARTUP NOMOUNT
CREATE CONTROLFILE set DATABASE "CLNE" RESETLOGS ARCHIVELOG
MAXLOGFILES 30
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/CLNE/redo01.log' SIZE 100M,
GROUP 2 '/oradata/CLNE/redo02.log' SIZE 100M,
GROUP 3 '/oradata/CLNE/redo03.log' SIZE 100M
-- STANDBY LOGFILE
DATAFILE
'/oradata/CLNE/system01.dbf',
'/oradata/CLNE/undotbs01.dbf',
'/oradata/CLNE/sysaux01.dbf',
'/oradata/CLNE/rbs01.dbf',
'/oradata/CLNE/users01.dbf',
'/oradata/CLNE/tools01.dbf',
'/oradata/CLNE/indx01.dbf',
'/oradata/CLNE/users02.dbf'
CHARACTER SET US7ASCII
;
step4 執行控制檔案指令碼
export ORACLE_SID=CLNE
sqlplus / as sysdba
@/u01/app/oracle/admin/CLNE/create/create_control.sql
step5 恢復克隆的資料庫
set logsource /archive;
recover database until cancel using backup controlfile;
step6 開啟克隆的資料庫
alter database open resetlogs;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29047826/viewspace-1244346/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle備份與恢復系列(四)複製資料庫 使用原有的控制檔案Oracle資料庫
- Oracle備份與恢復系列(四)續 RMAN Duplicate複製資料庫Oracle資料庫
- Oracle備份與恢復系列(四)複製資料庫 續 手工複製資料庫的最簡操作Oracle資料庫
- Oracle備份與恢復系列 五 續 EXP/IMP遷移、複製資料庫Oracle資料庫
- 備份與恢復系列 十一 控制檔案的備份與恢復
- 使用備份的控制檔案恢復資料庫資料庫
- Oracle資料庫控制檔案在備份恢復中的作用Oracle資料庫
- 【備份與恢復】恢復受損的複用控制檔案
- 備份與恢復--利用備份的控制檔案恢復
- Oracle備份與恢復【丟失控制檔案的恢復】Oracle
- rman恢復資料庫--用備份的控制檔案資料庫
- Oracle備份與恢復【丟失資料檔案的恢復】Oracle
- 備份與恢復--重建控制檔案後資料檔案損壞的恢復
- oracle資料庫的備份與恢復Oracle資料庫
- ORACLE 只讀資料檔案備份與恢復Oracle
- 備份與恢復--重建控制檔案
- 備份與恢復系列 十 引數檔案spfile的備份與恢復
- Oracle資料庫的備份與恢復(轉)Oracle資料庫
- Oracle 資料庫的備份與恢復(轉)Oracle資料庫
- 備份與恢復--重新控制檔案資料字典和控制檔案不一致的恢復
- 【備份與恢復】控制檔案的恢復(不完全恢復)
- 【備份恢復】利用 備份控制檔案到指定目錄下的控制檔案 恢復控制檔案
- 備份與恢復系列 八 丟失所有資料檔案的還原與恢復
- 備份與恢復:polardb資料庫備份與恢復資料庫
- rman備份-(1) 利用備份級恢復資料檔案和控制檔案
- 【技術分享】Oracle控制檔案的備份、恢復以及多路複用Oracle
- Oracle12c多租戶資料庫備份與恢復 - PDB中資料檔案的恢復Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(6)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(5)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(4)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(3)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(2)Oracle資料庫
- ORACLE RAC資料庫的備份與恢復(1)Oracle資料庫
- Oracle資料庫備份與恢復之三:OS備份/使用者管理的備份與恢復Oracle資料庫
- 資料庫的備份與恢復資料庫
- 利用備份的控制檔案恢復
- 控制檔案的備份和恢復
- Oracle資料庫備份與恢復之RMANOracle資料庫