set lines 300 col RESOURCE_NAME format a30 select RESOURCE_NAME,CURRENT_UTILIZATION,MAX_UTILIZATION,INITIAL_ALLOCATION,LIMIT_VALUE from v$resource_limit where resource_name in ('processes','sessions'); RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE ------------------------------ ------------------- --------------- ---------------------- --------------- processes 1498 1500 1500 1500 sessions 1511 1517 2272 2272Documented for Oracle 19c here
Minimalistic Oracle contains a collection of practical examples from my encounters with Oracle technologies. When relevant, I also write about other technologies, like Linux or PostgreSQL. Many of the posts starts with "how to" since they derive directly from my own personal experience. My goal is to provide simple examples, so that they can be easily adapted to other situations.
Showing posts with label Background Processes. Show all posts
Showing posts with label Background Processes. Show all posts
Monday, June 26, 2023
How to show current utilization of sessions, processes and other important settings for a database
Example:
Wednesday, June 11, 2014
How to deal with ORA-00020: maximum number of processes (%s) exceeded
I recently had a situation where access to the database was completely blocked because of the infamous error message
ORA-00020: maximum number of processes (%s) exceededFacts:
At that time, the database had to become available to the users again ASAP.
When I have encountered these situations in the past, I have had to kill all the operating system processes and restart the instance. A brut-force method that is not particularly pretty, but sometimes necessary:
for a in $(ps -ef |grep $ORACLE_SID | grep -v grep | awk '{ print $2}'); do >kill -9 $a; >done
It normally does the job when you really have no other option.
This time however, after having killed all the processes, Oracle still rejected connections to the database using sqlplus:
sqlplus /nolog SQL*Plus: Release 11.2.0.4.0 Production on Fri Jun 6 09:07:23 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. @ SQL> connect / ERROR: ORA-00020: maximum number of processes (1000) exceededI then found the page by tech.e2sn.com that showed how to use sqlplus with the "preliminary connection".
Simply by using
sqlplus -prelim "/as sysdba"
I was able to connect and shutdown the database with the abort option.sqlplus -prelim "/ as sysdba" SQL*Plus: Release 11.2.0.4.0 Production on Fri Jun 6 09:09:15 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. SQL> shutdown abort ORACLE instance shut down. SQL> exit Disconnected from ORACLEAfter this point the database could once again be restarted:
sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Fri Jun 6 09:10:38 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 2137886720 bytes Fixed Size 2248080 bytes Variable Size 1258291824 bytes Database Buffers 855638016 bytes Redo Buffers 21708800 bytes Database mounted. Databasen opened.
The article referred to above is worth reading, but in short, the -prelim option will not try to create private session structures in the SGA. This allows you to connect to perform debugging or shutdown operations.
Wednesday, May 28, 2014
How to recreate the control file and rename the database and the datafiles
To change a database name or file names, it can be practical to recreate the control file, and in some cases your only option.
In this example, I will rename a database and its file structure from "OID11UI" to "OID11U1".
Start by generating a file which holds the current layout of all the database's files:
Optionally, on the first line, add a pointer to a correct parameter file:
Before
In this example, I will rename a database and its file structure from "OID11UI" to "OID11U1".
Start by generating a file which holds the current layout of all the database's files:
SQL> alter database backup controlfile to trace as '/u01/oracle/product/11204/dbs/cntr_trace.sql' resetlogs; Database altered.The generated file typically look like this:
STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "OID11UI" RESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u02/oradata/OID11UI/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/u02/oradata/OID11UI/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/u02/oradata/OID11UI/redo03.log' SIZE 50M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u02/oradata/OID11UI/system01.dbf', '/u02/oradata/OID11UI/sysaux01.dbf', '/u02/oradata/OID11UI/undotbs01.dbf', '/u02/oradata/OID11UI/users01.dbf' CHARACTER SET WE8MSWIN1252 ; -- Database can now be opened zeroing the online logs. ALTER DATABASE OPEN RESETLOGS; -- Commands to add tempfiles to temporary tablespaces. -- Online tempfiles have complete space information. -- Other tempfiles may require adjustment. ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/oradata/OID11UI/temp01.dbf' SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; -- End of tempfile additions.Exchange the word "REUSE" against the word "SET":
CREATE CONTROLFILE SET DATABASE "OID11U1"
Optionally, on the first line, add a pointer to a correct parameter file:
STARTUP NOMOUNT PFILE='/u01/oracle/product/11204/dbs/initOID11U1.ora'Change all references to "OID11UI" (the old name):
STARTUP NOMOUNT PFILE='/u01/oracle/product/11204/dbs/initOID11U1.ora' CREATE CONTROLFILE SET DATABASE "OID11U1" RESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u02/oradata/OID11U1/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/u02/oradata/OID11U1/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/u02/oradata/OID11U1/redo03.log' SIZE 50M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u02/oradata/OID11U1/system01.dbf', '/u02/oradata/OID11U1/sysaux01.dbf', '/u02/oradata/OID11U1/undotbs01.dbf', '/u02/oradata/OID11U1/users01.dbf' CHARACTER SET WE8MSWIN1252 ; -- Database can now be opened zeroing the online logs. ALTER DATABASE OPEN RESETLOGS; -- Commands to add tempfiles to temporary tablespaces. -- Online tempfiles have complete space information. -- Other tempfiles may require adjustment. ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/oradata/OID11U1/temp01.dbf' SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; -- End of tempfile additions.Change the folder name that oracle uses:
usu0oid01:OID11UI>cd /u02/oradata usu0oid01:OID11UI>mv OID11UI OID11U1Change the control_files directive in the parameter file:
Before
*.control_files='/u02/oradata/OID11UI/control01.ctl','/u02/oradata/OID11UI/control02.ctl'After:
*.control_files='/u02/oradata/OID11U1/control01.ctl','/u02/oradata/OID11U1/control02.ctl'Remove the old controlfiles physically from disk:
cd /u02/oradata/OID11U1 rm *.ctlShutdown the database:
SQL> shutdown abort ORACLE instance shut down.Change the oracle profile in the operating system:
cd vi .profileBefore:
export ORACLE_SID=OID11UIAfter:
export ORACLE_SID=OID11U1Source the new profile, and check that the ORACLE_SID environmental variable is correctly set:
. .profile usu0oid01:OID11U1>echo $ORACLE_SID OID11U1Start sqlplus and run script:
usu0oid01:OID11UI>sqlplus / as sysdba @cntr_trace.sql SQL*Plus: Release 11.2.0.4.0 Production on Wed May 28 14:00:50 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. ORACLE instance started. Total System Global Area 1720328192 bytes Fixed Size 2247072 bytes Variable Size 1107297888 bytes Database Buffers 603979776 bytes Redo Buffers 6803456 bytes Control file created. Database altered. Tablespace altered. SQL> select open_mode from v$database; OPEN_MODE -------------------- READ WRITECheck the location of the data files after the change:
SQL> select file_name from dba_data_files union select member from v$logfile union select name from v$controlfile; FILE_NAME -------------------------------------------------- /u02/oradata/OID11U1/control01.ctl /u02/oradata/OID11U1/control02.ctl /u02/oradata/OID11U1/redo01.log /u02/oradata/OID11U1/redo02.log /u02/oradata/OID11U1/redo03.log /u02/oradata/OID11U1/sysaux01.dbf /u02/oradata/OID11U1/system01.dbf /u02/oradata/OID11U1/undotbs01.dbf /u02/oradata/OID11U1/users01.dbfLag en spfile (anbefales):
SQL> create spfile from pfile; File created. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.Startup the database for normal use:
SQL> startup
Tuesday, March 4, 2014
What is the CJQ0 background process?
When starting the Oracle database you may see something like the following in the alert log:
Tue Mar 04 12:40:50 2014
CJQ0 started with pid=27, OS id=5526
This means your database is starting the optional background process for job queue processing
Oracle Database uses job queue processes to run user jobs.
The initialization parameter JOB_QUEUE_PROCESSES states the maximum number of job queue processes that can concurrently run on an instance.
Source: Oracle Documentation
Tue Mar 04 12:40:50 2014
CJQ0 started with pid=27, OS id=5526
This means your database is starting the optional background process for job queue processing
Oracle Database uses job queue processes to run user jobs.
The initialization parameter JOB_QUEUE_PROCESSES states the maximum number of job queue processes that can concurrently run on an instance.
Source: Oracle Documentation
Sunday, October 20, 2013
How to disable flashback archiver process, introduced to support Oracle 11gR1 feature "Flashback Data Archive"
If you do not use the flashback data archive feature, and have no plans to do so, you might as well disable the process, even though it is defined as "lightweight".
First, confirm that the operating system process is running:
$ ps -ef | grep FBDA
oracle 18199 8264 0 13:22:12 pts/5 0:00 grep FBDA
--> The background proceess FBDA is running in the background
Check the setting
sqlplus / as sysdba:
alter system set "_disable_flashback_archiver"=1 scope=spfile;
First, confirm that the operating system process is running:
$ ps -ef | grep FBDA
oracle 18199 8264 0 13:22:12 pts/5 0:00 grep FBDA
--> The background proceess FBDA is running in the background
Check the setting
sqlplus / as sysdba:
select a.ksppinm "Parameter", b.ksppstvl "Session Value", c.ksppstvl "Instance Value" from x$ksppi a, x$ksppcv b, x$ksppsv c where a.indx = b.indx and a.indx = c.indx and substr(ksppinm,1,1)='_' and ksppinm like '%archiver%' order by a.ksppinm; Parameter Session Value Instance Value ----------------------------------- --------------- -------------- _disable_flashback_archiver 0 0 _flashback_archiver_partition_size 0 0by setting the parameter _disable_flashback_archiver and restarting your instance, you disable the flashback archiver process:
alter system set "_disable_flashback_archiver"=1 scope=spfile;
Subscribe to:
Posts (Atom)