Just a quick note on refreshing vs cloning, what each of them means and when you should perform them.
What is Refreshing?
A refresh is where the data in the target environment has been synchronized with a copy of production. This is done by taking a copy of the production database and restoring it to the target environment.
What is Cloning?
Cloning means that an identical copy of production has been taken and restore to the target environment. This is done by taking both a copy of the production database as well as all of the application files.
When should you Clone or Refresh?
There are a couple of scenarios when cloning should be performed:
1. Building a new environment.
2. Patches or other configuration changes have been made to the target environment so that they are now out of sync.
3. Beginning of development cycles. Before major development efforts take place, its wise to re-clone dev, test environments so that your 100% positive that the environments are in sync.
There is only one scenario in which you should refresh an environment:
1. Your 100% confident that the environments are in sync and need an updated copy of the production data in order to reproduce issues.
Technically, if proper change control processes are being followed, test and production environments should be identical. So in the case of test, you should be able to get away with performing refreshes. However, to ease concerns and for comfort levels, test environments are usually re-cloned at the beginning of new development cycles as well.
If I have missed any scenarios, feel free to comment.
R12 Cloning with RMAN