Permissions required to use Schema Compare for Oracle
Published 24 February 2022
Selecting schemas to compare
On the Project Configuration dialog box, all schemas in a database are available to select from the Schemas list:
You don't require any privileges to select schemas for comparison.
Comparing schemas
If possible, the owner of the schema has all the privileges needed to compare everything.
If you are not the owner of the schemas you want to compare, the following privileges are required to compare objects:
- Ideally system or sysdba privileges provide the best option as provides access to all the dba_dictionaries/views.
- If system or sysdba user is not an option, the SELECT_CATALOG_ROLE provides all the permissions needed for the comparison and does not grant any access to the data, so very secure.
- SELECT ANY DICTIONARY permissions, similar to SELECT_CATALOG_ROLE. However in testing we found being granted the SELECT_CATALOG_ROLE the better option.
- Non-PL/SQL objects (for example TABLES, VIEWS, SYNONYMS) require the
SELECT
privilege - PL/SQL objects (for example PROCEDURES, FUNCTIONS, PACKAGES) require the
EXECUTE
privilege
If you have insufficient privileges to compare an object, it isn't displayed in the comparison results.
Deployment
To run a deployment script created by Schema Compare for Oracle, the following system privileges may be required:
ALTER <OBJECT TYPE>
orALTER ANY <OBJECT TYPE>
to alter objects
For example,ALTER ANY PROCEDURE
CREATE <OBJECT TYPE>
orCREATE ANY <OBJECT TYPE>
to create objects
For example,CREATE INDEX
DROP <OBJECT TYPE>
orDROP ANY <OBJECT TYPE>
to drop objects
For example,DROP TABLE
GRANT GRANT ANY OBJECT PRIVILEGE
- If you have insufficient privileges to perform the actions in the deployment script, the script will fail.
- To deploy using Schema Compare for Oracle, we recommended you have DBA privileges.
- If you create a deployment script to run later, we recommended you run the script as the schema owner.
Further Information
Users may experience an Oracle error ORA-00942 when attempting to perform a comparison that informs that a Table or View does not exist. This may indicate that the user account specified to connect to the Oracle database does not have security permissions to read the Oracle Data Dictionary and other system objects.
When performing a comparison, the comparison engine queries Oracle Data Dictionaries. It will first attempt to connect using dba_<data dictionary name>, for example dba_tables. If this fails, the comparison engine automatically switches to use the all_<data dictionary name>, for example all_tables.
Below is a list off all data dictionary views (or their all_ equivalents) that the comparison engine requires security privileges to (grouped by type, to be able to compare for example Tables comparison engine needs access to more "dba_" dictionary views than just "dba_tables"):
Table
dba_tables
dba_mviews
dba_mview_logs
dba_part_tables
dba_external_tables
dba_external_locations
Columns permissions
Indexes permissions
If option "lobs and varrays" is selected:
dba_lob_subpartitions
dba_lob_partitions
dba_lobs
If option "tablespace and partitioning" is selected:
dba_ind_partitions
dba_ind_subpartitions
dba_tab_partitions
dba_tab_subpartitions
dba_part_key_columns
dba_subpart_key_columns
dba_subpartition_templates
If clustering is available and database version is 12c or higher:
dba_clustering_tables
dba_clustering_keys
dba_clustering_dimensions
dba_clustering_joins
If queues tables are available:
dba_queue_tables
dba_queue_subscribers
dba_queues
If database version is 9i:
dba_tab_comments
Column
dba_tab_cols
dba_nested_tables
dba_varrays
dba_types
dba_col_comments
If identity columns are available and database version is 12c or higher :
dba_sequences
dba_tab_identity_cols
dba_users
If database version is 9i:
dba_obj_colattrs
dba_cons_obj_columns
Index
dba_indexes
dba_ind_columns
dba_part_indexes
dba_constraints
dba_refs
dba_cons_columns
Tables permissions
Columns permissions
Index types
dba_indextypes
dba_indextype_operators
dba_indextype_comments
Index joined columns
dba_join_ind_columns
Dependencies
dba_dependencies
View
dba_views
dba_objects
dba_tab_comments
Tables permissions
Columns permissions
Indexes permissions
Materialized View
dba_snapshots
dba_mview_comments
Tables permissions
Columns permissions
Indexes permissions
Materialized View Logs
dba_mview_logs
Tables permissions
Columns permissions
Indexes permissions
Type
dba_objects
dba_types
dba_source
PL/SQL objects (function, procedure, package, package body)
dba_objects
dba_source
Trigger
dba_triggers
dba_objects
dba_source
Sequence
dba_sequences
Synonym and public synonym
dba_synonyms
dba_objects
Object privileges
dba_tab_privs
dba_objects
dba_col_privs
Role
dba_role_privs
System privileges
dba_sys_privs
Cluster
dba_clusters
dba_cluster_hash_expressions
dba_clu_columns
Database links
dba_db_links
Operator
dba_operators
dba_opbindings
dba_oparguments
dba_opancillary
dba_operator_comments
Transformation
dba_attribute_transformations
Log group
dba_log_groups
dba_log_group_columns
The comparison engine will query the following system tables, for example the sys.snap$ table is used to obtain information on the Materialized Views Reduced Precisions:
all_users | m_owners |
sys_ilm$ | sys_ilmobjects |
sys.objects$ | sys.snap$ |
sys.sys_fba_period | sys.tab$ |
sys.obj$ |
If after granting select on all_objects to your user or signing in as a different (perhaps dba) user you still get the same problem you may have to check your user’s access to each of these.