web-dev-qa-db-ja.com

RMANを使用して、完全復旧バックアップデータセットからテストデータベースを作成するにはどうすればよいですか?

DBAの役割が3番目または7番目の帽子であり、Oracleに触れる必要がほとんどない人のための平易な英語で、RMANを使用して完全復旧バックアップデータセットからテストデータベースを作成するにはどうすればよいですか?

質問の終わりに私は愚痴を続けた...

シナリオ:

フラッシュリカバリディレクトリのコピーとして作成された、運用データベースの完全なRMANバックアップセットがあり、そこからテストデータベースを構築します。

私はこの投稿から何をする必要があるかについての理解を集め始めました: Oracle 11 rman db復元ファイルの破損

私が得ていないのは、彼のサンプルスクリプトの「アルファベットスープ」の一部の由来です。

スクリプト例(注釈付き):

rman target /
set DBID ...    // Where does this come from?  The existind DB I plan to overlay, or some magic spot in the RMAN backup set?
startup nomount
RESTORE CONTROLFILE FROM 'file destination' // is this my flash recovery directory?
shutdown;
startup mount;

// Is it right to assume that this is the directory containing the backup?
// Or should I list every single backup file from the flash recovery area (ugh!)?
catalog backuppiece 'C:/BKUP/AL_2851492942_20151016_893271615_PGQJSFHV_1_1';

rman:crosscheck backup; Run{
SET UNTIL SEQUENCE 50511;    // Where did this number come from?  Is it important?  Can I ignore this line since I have a complete recovery set?
RESTORE DATABASE;
SWITCH DATAFILE ALL;
RECOVER DATABASE; 
}


sqlplus sys/sys as sysdba

shutdown immediate; startup mount;
alter database noarchivelog; // I see this is considered a bad practice elsewhere??

ALTER DATABASE OPEN;
ALTER TABLESPACE mytempspace // what's this line about?  I just want to take a clone of the DB that was backed up elsewhere
ADD TEMPFILE 'c:\Oracle............dbf' SIZE 1G REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

ウィーニング:

これはまた別のnoobの質問であることを知っています。OracleDBAの経験を積んだ人の中には目を見張って「RTFM」を考えている人もいます。残念ながら、SQLサーバーの管理の容易さは業界の期待を変えており、マウスを使用できるユーザーは誰でもすぐにDBAになることが期待されています。これはSQLServerでは機能しますが、Oracleでは機能しません。

SQLサーバーでは、これは、ソースバックアップセットを選択し、ターゲットデータベースを選択し、[バックアップからデータベースを置き換える]をクリックし、[移動]をクリックして、コーヒーに行くという簡単なタスクです。

Rmanを使用したOracleでは、これも単純なタスクであるように見えますが、私が見つけたすべてのドキュメントは、Oracle DBAの役割は、正しい方向のナッジが必要なOracleの専任スペシャリストによって満たされていると想定しているようです。トム・カイトは本当に良いですが、この正確な問題に関する彼のページは、可搬スペースなどについて多くの時間を費やし、読者の知識の深さの仮定のためにすぐに判読できなくなります。

4
pojo-guy

最初に確認する場所は、Oracleの公式ドキュメントです。例 http://docs.Oracle.com/cd/E36909_01/backup.1111/e10642/rcmdupdb.htm#autoId データベースのバージョンによって異なります(10g、11g、12c ...)。重複データベースのドキュメントを検索してください。少し混乱するだけなので、スクリプトからのすべての質問については説明しません。

製品データベースのサイズに応じて、たとえばデータポンプのエクスポートとインポート、またはトランスポータブルテーブルスペースなどを使用してRMANを試すことができます。 rmanコマンドは次のようになります。

-- scripts for restore using RMAN, 
-- This script is usable when the Oracle versions are the same, 
-- or a direct upgrade is supported
--
-- prep database for rman import
rman target /
shutdown immediate
startup nomount
exit


-- duplicate the database
rman auxiliary /
duplicate database to newdb
  backup location 'E:\Backup\Oracle\flash_recovery_area\olddb\BACKUPSET\2016_07_29' nofilenamecheck 
  DB_FILE_NAME_CONVERT ('E:\app\Oracle\oradata\olddb','E:\Oracle\oradata\newdb')
  LOGFILE
    'E:\Oracle\oradata\newdb\redo01.log' SIZE 2G,
    'E:\Oracle\oradata\newdb\redo02.log' SIZE 2G,
    'E:\Oracle\oradata\newdb\redo03.log' SIZE 2G;

duplicate database to testdb spfile backup location 'backup_path' nofilenamecheck;

データベースのバージョンが異なる場合は、expdp/impdpを使用します。

-- Alternate procedure using using expdp / impdp
--
-- Export on source database
sqlplus: create or replace directory data_pump_directory as 'f:\dp';

cmd: expdp user/password@olddb schemas=SchemaToMigrate directory=data_pump_directory dumpfile=dbname.dmp logfile=expdp_dbname.log

-- generate script for generating user from old database
-- see http://www.Oracle-scripts.net/generate-user-ddl/
--
-- copy output files from source system to destination system
--
-- Prep destination database for the import
-- use script generated above to create user/schema on destination database
sqlplus: create or replace directory data_pump_directory as 'f:\dp';

-- From bitter experience, this will not necessarily work with the user/password@newdb 
-- on the command line.  
-- If impdp chokes with ORA-39087:
-- 1. Confirm database is open (alter databaase open)
-- 2. Confirm the directory reference is created in the database
-- 3. Confirm the system and schema users are granted read and write on the directory reference
-- 4. Confirm the Oracle service (OS) user has authority on the OS directory
-- 5. then try not supplying credentials until impdp asks for them (yeah,  a possible bug somewhere)
cmd: impdp user/password@newdb schemas=SchemaToMigrate directory=data_pump_directory dumpfile=dbname.dmp logfile=impdp_dbname.log table_exists_action=replace  remap_tablespace=oldts1:newts1,oldts2:newts2

このスクリプトは、特定の日時、特定のSCNに回復するかどうか、同じ構造(データと他のファイルの同じパス)かどうか、同じオペレーティングシステムかどうかに応じて、さまざまな方法で記述できます。一部の初期化パラメータを変更する必要があるかどうかなど。

2
mutap