Suppose we have large, complex system with large amount of data and complicated business logic.
How to manage test data (Oracle DB) to have fast, reliable acceptance (Selenium etc.) tests starting from known state?
Because of scale and complexity, tests should:
INSERTS
to database - risky duplication of business logic)What you're describing is called a Sandbox DB. For every new deploy you'll have to provide/populate this DB with the data you need and after tests are done, to drop it.
have several versions/snapshots of DB state
This is what a Fresh Fixture pattern and Prebuilt Fixture pattern will help you with. Also you could look at the Fixture Teardown patterns.
Here you can find some considerations when dealing with such big-data-sandbox-strategies. Like scheduling, master data repository and monitoring.
To successfully manage all that - a CI server have to be put to work. Since you've tagged JAVA, a good options are: