ORA-00096 Invalid Value for Parameter - Parameter Configuration Guide
ORA-00096: Invalid Value for Parameter
Section titled “ORA-00096: Invalid Value for Parameter”Error Overview
Section titled “Error Overview”Error Text: ORA-00096: invalid value parameter_value for parameter parameter_name, must be from among: valid_values
This error occurs when attempting to set an Oracle initialization parameter to an invalid value. The parameter value doesn’t match the expected data type, range, or enumerated list of valid values for that specific parameter.
Understanding Parameter Validation
Section titled “Understanding Parameter Validation”Parameter Types
Section titled “Parameter Types”Oracle Parameter Types├── Boolean (TRUE/FALSE)├── Integer (with min/max ranges)├── String (with pattern validation)├── Enumerated (fixed list of values)├── Size (with unit suffixes: K, M, G)└── Time (with unit suffixes: s, m, h)
Parameter Scopes
Section titled “Parameter Scopes”- MEMORY - Current instance only (until restart)
- SPFILE - Persistent (survives restart)
- BOTH - Both memory and SPFILE
Common Causes
Section titled “Common Causes”Invalid Boolean Values
Section titled “Invalid Boolean Values”-- Incorrect boolean parameter valuesALTER SYSTEM SET recyclebin=YES; -- Should be TRUE/FALSEALTER SYSTEM SET audit_trail=ON; -- Should be TRUE/FALSE/EXTENDED/etc.
Out-of-Range Numeric Values
Section titled “Out-of-Range Numeric Values”-- Values outside acceptable rangesALTER SYSTEM SET processes=0; -- Below minimum (6)ALTER SYSTEM SET sessions=5; -- Too low for processes settingALTER SYSTEM SET sga_target=100; -- Too small for SGA
Invalid Enumerated Values
Section titled “Invalid Enumerated Values”-- Invalid options for enumerated parametersALTER SYSTEM SET optimizer_mode=BEST; -- Invalid modeALTER SYSTEM SET undo_management=MANUAL_AUTO; -- Invalid optionALTER SYSTEM SET audit_trail=EXTENDED_DB; -- Invalid combination
Incorrect Size Format
Section titled “Incorrect Size Format”-- Invalid size specificationsALTER SYSTEM SET sga_target='1GB'; -- Should be 1G (no 'B')ALTER SYSTEM SET pga_aggregate_target=256MB; -- Should be 256M
Diagnostic Queries
Section titled “Diagnostic Queries”Check Current Parameter Values
Section titled “Check Current Parameter Values”-- View current parameter settingsSELECT name, value, isdefault, ismodified, descriptionFROM v$parameterWHERE name = LOWER('¶meter_name') -- Replace with parameter nameORDER BY name;
Parameter Validation Information
Section titled “Parameter Validation Information”-- Check parameter constraints and valid valuesSELECT name, type, value, default_value, isdefault, ismodified, update_commentFROM v$parameterWHERE name LIKE '%&search_pattern%' -- Replace with search patternORDER BY name;
SPFILE vs Memory Values
Section titled “SPFILE vs Memory Values”-- Compare SPFILE and memory parameter valuesSELECT name, value as memory_value, display_value, isdefault, ismodifiedFROM v$parameterWHERE name IN ( SELECT name FROM v$spparameter WHERE value IS NOT NULL)INTERSECTSELECT name, value as spfile_value, display_value, 'SPFILE' as source, 'YES' as in_spfileFROM v$spparameterWHERE value IS NOT NULLORDER BY name;
Parameter Dependencies
Section titled “Parameter Dependencies”-- Check for parameter dependenciesSELECT p1.name as parameter, p1.value as current_value, p2.name as dependent_parameter, p2.value as dependent_valueFROM v$parameter p1, v$parameter p2WHERE p1.name IN ('processes', 'sessions', 'transactions')AND p2.name IN ('processes', 'sessions', 'transactions')AND p1.name != p2.nameORDER BY p1.name, p2.name;
Resolution Steps
Section titled “Resolution Steps”Common Parameter Fixes
Section titled “Common Parameter Fixes”1. Boolean Parameters
Section titled “1. Boolean Parameters”-- Correct boolean parameter syntaxALTER SYSTEM SET recyclebin=TRUE SCOPE=BOTH;ALTER SYSTEM SET audit_trail=DB SCOPE=SPFILE; -- Requires restartALTER SYSTEM SET sql_trace=FALSE SCOPE=MEMORY;
2. Numeric Parameters
Section titled “2. Numeric Parameters”-- Check valid ranges firstSELECT name, value, descriptionFROM v$parameterWHERE name IN ('processes', 'sessions');
-- Set with proper valuesALTER SYSTEM SET processes=500 SCOPE=SPFILE;ALTER SYSTEM SET sessions=555 SCOPE=SPFILE; -- Must be > processes
3. Size Parameters
Section titled “3. Size Parameters”-- Correct size parameter formatALTER SYSTEM SET sga_target=4G SCOPE=SPFILE;ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=SPFILE;ALTER SYSTEM SET db_cache_size=512M SCOPE=BOTH;
4. String Parameters
Section titled “4. String Parameters”-- String parameters with proper quotingALTER SYSTEM SET global_names=TRUE SCOPE=BOTH;ALTER SYSTEM SET db_domain='company.com' SCOPE=SPFILE;ALTER SYSTEM SET instance_name='PROD1' SCOPE=SPFILE;
Parameter Validation Script
Section titled “Parameter Validation Script”-- Create parameter validation procedureCREATE OR REPLACE PROCEDURE validate_parameter( p_name VARCHAR2, p_value VARCHAR2) AS l_sql VARCHAR2(1000); l_error_count NUMBER := 0;BEGIN -- Test parameter setting l_sql := 'ALTER SYSTEM SET ' || p_name || '=' || p_value || ' SCOPE=MEMORY';
BEGIN EXECUTE IMMEDIATE l_sql; DBMS_OUTPUT.PUT_LINE('SUCCESS: Parameter ' || p_name || ' can be set to ' || p_value);
-- Revert to original value EXECUTE IMMEDIATE 'ALTER SYSTEM RESET ' || p_name || ' SCOPE=MEMORY';
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERROR: ' || SQLERRM); l_error_count := 1; END;
IF l_error_count = 0 THEN DBMS_OUTPUT.PUT_LINE('Parameter validation successful'); END IF;END;/
Common Parameter Issues
Section titled “Common Parameter Issues”Memory Management Parameters
Section titled “Memory Management Parameters”-- SGA parameters must be consistentSELECT name, value, CASE WHEN name = 'sga_target' AND TO_NUMBER(value) > 0 THEN 'Automatic SGA Management Enabled' WHEN name IN ('db_cache_size', 'shared_pool_size', 'large_pool_size') AND TO_NUMBER(value) > 0 THEN 'Manual SGA Component Sizing' ELSE 'Default/Automatic' END as management_modeFROM v$parameterWHERE name IN ( 'sga_target', 'sga_max_size', 'db_cache_size', 'shared_pool_size', 'large_pool_size')ORDER BY name;
Process and Session Parameters
Section titled “Process and Session Parameters”-- Calculate proper session valuesSELECT 'processes' as parameter, value as current_processes, CEIL(TO_NUMBER(value) * 1.1) + 5 as recommended_sessionsFROM v$parameterWHERE name = 'processes'UNION ALLSELECT 'sessions' as parameter, value as current_sessions, 'Should be >= ' || ( SELECT CEIL(TO_NUMBER(value) * 1.1) + 5 FROM v$parameter WHERE name = 'processes' ) as recommendationFROM v$parameterWHERE name = 'sessions';
Optimizer Parameters
Section titled “Optimizer Parameters”-- Valid optimizer parameter valuesSELECT 'optimizer_mode' as parameter, 'FIRST_ROWS_n, FIRST_ROWS, ALL_ROWS, CHOOSE' as valid_valuesFROM dualUNION ALLSELECT 'optimizer_index_cost_adj', '1-10000 (default: 100)'FROM dualUNION ALLSELECT 'optimizer_index_caching', '0-100 (default: 0)'FROM dual;
Prevention Strategies
Section titled “Prevention Strategies”Parameter Change Process
Section titled “Parameter Change Process”-- Safe parameter change procedureCREATE OR REPLACE PROCEDURE safe_parameter_change( p_parameter VARCHAR2, p_value VARCHAR2, p_scope VARCHAR2 DEFAULT 'BOTH') AS l_original_value VARCHAR2(4000); l_sql VARCHAR2(1000);BEGIN -- Get current value SELECT value INTO l_original_value FROM v$parameter WHERE name = LOWER(p_parameter);
DBMS_OUTPUT.PUT_LINE('Original value: ' || l_original_value);
-- Build ALTER SYSTEM command l_sql := 'ALTER SYSTEM SET ' || p_parameter || '=' || p_value || ' SCOPE=' || p_scope;
-- Log the change INSERT INTO parameter_change_log VALUES ( SYSDATE, p_parameter, l_original_value, p_value, p_scope, USER ); COMMIT;
-- Execute change EXECUTE IMMEDIATE l_sql; DBMS_OUTPUT.PUT_LINE('Parameter changed successfully');
EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM); ROLLBACK; RAISE;END;/
Parameter Documentation
Section titled “Parameter Documentation”-- Create parameter documentation tableCREATE TABLE parameter_standards ( parameter_name VARCHAR2(80), valid_values VARCHAR2(4000), recommended_value VARCHAR2(1000), description VARCHAR2(4000), last_updated DATE);
-- Example entriesINSERT INTO parameter_standards VALUES ( 'processes', '6-2147483647', 'Based on concurrent user load + background processes', 'Maximum number of OS processes that can connect to Oracle', SYSDATE);
Emergency Recovery
Section titled “Emergency Recovery”SPFILE Recovery
Section titled “SPFILE Recovery”-- If SPFILE is corrupted due to invalid parameter-- 1. Start with PFILESTARTUP PFILE='/path/to/backup/init.ora';
-- 2. Create new SPFILECREATE SPFILE FROM PFILE='/path/to/backup/init.ora';
-- 3. Restart with SPFILESHUTDOWN IMMEDIATE;STARTUP;
Reset Invalid Parameters
Section titled “Reset Invalid Parameters”-- Reset parameter to default valueALTER SYSTEM RESET parameter_name SCOPE=SPFILE;
-- For immediate reset (if possible)ALTER SYSTEM RESET parameter_name SCOPE=BOTH;
Monitoring and Alerting
Section titled “Monitoring and Alerting”Parameter Change Monitoring
Section titled “Parameter Change Monitoring”-- Monitor parameter changesSELECT name, value, ismodified, update_comment, CASE WHEN ismodified = 'TRUE' THEN 'Modified from default' ELSE 'Default value' END as statusFROM v$parameterWHERE ismodified = 'TRUE'ORDER BY name;
Automated Parameter Validation
Section titled “Automated Parameter Validation”#!/bin/bash# Parameter validation scriptsqlplus -s / as sysdba << EOFSET PAGESIZE 0 FEEDBACK OFFSELECT 'INVALID: ' || name || ' = ' || valueFROM v$parameterWHERE name IN ('processes', 'sessions')AND ( (name = 'processes' AND TO_NUMBER(value) < 6) OR (name = 'sessions' AND TO_NUMBER(value) < 10));EOF
Related Errors
Section titled “Related Errors”- ORA-02097: Parameter cannot be modified
- ORA-00980: Synonym translation no longer valid
- ORA-01078: Failure in processing system parameters
Best Practices
Section titled “Best Practices”- Always validate parameters in test environment first
- Use SCOPE=MEMORY for testing, SCOPE=BOTH for production
- Document parameter changes and reasons
- Keep backup of working SPFILE
- Monitor parameter changes regularly
- Follow Oracle documentation for valid ranges
Troubleshooting Checklist
Section titled “Troubleshooting Checklist”- Verify parameter name spelling and case
- Check valid value ranges/options
- Validate parameter dependencies
- Test with SCOPE=MEMORY first
- Review Oracle documentation
- Check for parameter-specific syntax
- Verify sufficient privileges
- Document changes made