J'ai trouvé que le nombre maximal de curseurs par base de données était 300 dans la requête suivante:
select max(a.value) as highest_open_cur, p.value as max_open_cur
from v$sesstat a, v$statname b, v$parameter p
where a.statistic# = b.statistic#
and b.name = 'opened cursors current'
and p.name= 'open_cursors'
group by p.value;
J'ai essayé de mettre à jour le montant à 1000 avec ceci:
update v_$parameter
set value = 1000
where name = 'open_cursors';
Mais je vois cette erreur:
SQL Error: ORA-02030: can only select from fixed tables/views
02030. 00000 - "can only select from fixed tables/views"
*Cause: An attempt is being made to perform an operation other than
a retrieval from a fixed table/view.
*Action: You may only select rows from fixed tables/views.
Quelle est la bonne façon de mettre à jour la valeur open_cursor? Merci.
En supposant que vous utilisez un spfile pour démarrer la base de données
alter system set open_cursors = 1000 scope=both;
Si vous utilisez plutôt un pfile, vous pouvez modifier le paramètre pour l'instance en cours d'exécution.
alter system set open_cursors = 1000
Vous devez également modifier le fichier de paramètres pour spécifier le nouveau paramètre open_cursors
. Ce serait généralement une bonne idée de redémarrer la base de données peu de temps après pour s'assurer que le changement de fichier de paramètres fonctionne comme prévu (il est très ennuyant de découvrir des mois plus tard la prochaine fois que vous réinitialiserez la base de données que certains pas fait correctement).
J'espère également que vous êtes certain d'avoir besoin de plus de 300 curseurs ouverts par session. Une grande partie du temps, les personnes qui ajustent ce paramètre ont en fait une fuite de curseur et essaient simplement d’écrire le bogue plutôt que de s’attaquer à la cause fondamentale.
RUn la requête suivante pour savoir si vous exécutez spfile ou non:
SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type"
FROM sys.v_$parameter WHERE name = 'spfile';
Si le résultat est "SPFILE", utilisez la commande suivante:
alter system set open_cursors = 4000 scope = les deux; --4000 est le numéro du curseur ouvert
si le résultat est "PFILE", utilisez la commande suivante:
alter system set open_cursors = 1000 ;
Vous pouvez lire sur SPFILE vs PFILE ici,
vous pouvez mettre à jour le paramètre sous init.ora dans oraclexe\app\Oracle\product\11.2.0\serveur\config\scripts