commit 8ccc545e79ec8b3357f75e2b2b8d70524be1ad5b Author: SupraJames Date: Fri Nov 14 17:34:12 2025 +0000 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..b18db3b --- /dev/null +++ b/README.md @@ -0,0 +1,135 @@ +# Python Oracle Scripts for Rubrik Security Cloud + +This directory contains Python scripts that replicate the functionality of the shell scripts for managing Oracle databases in Rubrik Security Cloud (RSC). + +## Setup + +1. Create and activate virtual environment: + ```bash + python3 -m venv venv + source venv/bin/activate + ``` + +2. Install dependencies: + ```bash + pip install -r requirements.txt + ``` + +3. Copy and configure credentials: + ```bash + cp rsc.json.example rsc.json + # Edit rsc.json with your actual client_id, client_secret, and access_token_uri + ``` + +## Scripts + +### clone_oracle_database.py + +Clones an Oracle database to a target host using Rubrik Security Cloud. This replicates the functionality of `rsc_clone.sh`. + +**Usage:** +```bash +python clone_oracle_database.py -n -o --targethost [options] +``` + +**Required Arguments:** +- `-n, --newname`: Database name/SID of the new cloned or live mounted database +- `-o, --optionsfile`: Path to options file containing Oracle parameters +- `--targethost`: Target host where the database will be created +- ``: Source database name or RSC database ID + +**Optional Arguments:** +- `-s, --sourcehost`: Source host (when there are multiple databases with the same name) +- `-t, --timestamp`: Recovery point timestamp in format "YYYY-MM-DD HH:MM:SS" +- `-d, --dryrun`: Show configuration without executing the operation +- `--livemount`: Create a live mount instead of a clone +- `-c, --channels`: Number of RMAN channels for the operation +- `-p, --pfile`: Custom pfile path (must be absolute path) + +**Examples:** +```bash +# Basic clone with latest PIT +python clone_oracle_database.py -n NEWDB -o options.txt --targethost target-host SHED + +# Live mount instead of clone +python clone_oracle_database.py -n LIVEMOUNT -o options.txt --targethost target-host --livemount SHED + +# Clone with specific timestamp +python clone_oracle_database.py -n NEWDB -o options.txt --targethost target-host -t "2025-11-14 15:30:00" SHED + +# Clone with source host disambiguation +python clone_oracle_database.py -n NEWDB -o options.txt --targethost target-host -s source-host SHED + +# Dry run to see configuration +python clone_oracle_database.py -n NEWDB -o options.txt --targethost target-host --dryrun SHED + +# Clone with custom RMAN channels +python clone_oracle_database.py -n NEWDB -o options.txt --targethost target-host -c 4 SHED +``` + +**Options File Format:** +The options file contains Oracle initialization parameters. Example: +``` +CONTROL_FILES='/u01/app/oracle/oradata/NEWDB/control01.ctl, /u01/app/oracle/fast_recovery_area/NEWDB/control02.ctl' +DB_FILE_NAME_CONVERT='SHED','NEWDB' +DB_CREATE_FILE_DEST=/u01/app/oracle/oradata/NEWDB/ +AUDIT_FILE_DEST='/u01/app/oracle/admin/NEWDB/adump' +``` + +**Features:** +- **Clone or Live Mount**: Choose between creating a persistent clone or temporary live mount +- Automatic latest Point-in-Time (PIT) detection when no timestamp specified +- Host ID resolution for target hosts +- Comprehensive error handling and validation +- Job status monitoring with progress updates +- Dry-run mode for testing configurations + +### list_db_snapshots.py + +Lists snapshots and recovery ranges available for a specific Oracle database, including distribution across source, replicated, and archived locations. + +Usage: +```bash +python list_db_snapshots.py +``` + +Examples: +```bash +python list_db_snapshots.py SHED +python list_db_snapshots.py b4194205-b7d6-5f0b-8360-e6f349b9fd82 +``` + +This script will display: +- Database information (name, ID, cluster, host) +- Recoverable ranges (time periods when the database can be recovered) +- **Snapshot Distribution**: Shows where backups are stored: + - **Local (Source)**: Backups on the original cluster + - **Replicated**: Backups replicated to other clusters + - **Archived**: Backups stored in archival locations +- Missed recoverable ranges (gaps in coverage) + +**Note:** If multiple databases have the same name, the script will list them and ask you to specify the database ID instead. + +### introspect_schema.py + +Explores the GraphQL schema dynamically using GraphQL introspection. + +Usage: +```bash +# Explore Oracle-related types +python introspect_schema.py + +# Get detailed info about a specific type +python introspect_schema.py OracleDatabase +``` + +## Modules + +- `rsc_auth.py`: Handles authentication with RSC using OAuth2 client credentials +- `rsc_graphql.py`: Provides a client for making GraphQL queries to RSC, including schema introspection capabilities + +## Notes + +- Tokens are cached securely in `~/.rbkRscsession.*` files +- The scripts use the same GraphQL queries as the shell scripts +- Error handling includes GraphQL error checking \ No newline at end of file