在 Oracle 11gR2 中,会话级参数 `SESSION_CACHED_CURSORS` 有两种常用设置方式:
---
### **1. 会话级动态设置(仅影响当前会话)**
```sql
ALTER SESSION SET SESSION_CACHED_CURSORS = <数值>;
```
- **示例**:将当前会话的游标缓存上限设为 200
```sql
ALTER SESSION SET SESSION_CACHED_CURSORS = 200;
```
- **验证**:
```sql
SHOW PARAMETER SESSION_CACHED_CURSORS; -- 查看当前会话值
```
---
### **2. 通过客户端环境变量或 ORACLE 初始化参数文件(影响新会话)**
#### **方法 A:在客户端工具中预设(如 SQL*Plus、JDBC)**
- **SQL*Plus**:
在 `login.sql` 或 `glogin.sql` 中添加:
```sql
ALTER SESSION SET SESSION_CACHED_CURSORS = 100;
```
- **JDBC**:
在连接字符串中追加:
```java
Properties props = new Properties();
props.put("user", "scott");
props.put("password", "tiger");
props.put("oracle.jdbc.sessionCachedCursors", "100"); // 隐式执行 ALTER SESSION
Connection conn = DriverManager.getConnection(url, props);
```
#### **方法 B:通过数据库初始化参数(需重启实例)**
修改 `init<SID>.ora` 或 `spfile<SID>.ora`:
```sql
ALTER SYSTEM SET SESSION_CACHED_CURSORS = 100 SCOPE=SPFILE;
-- 重启数据库后生效
```
---
### **注意事项**
1. **范围**:
- `ALTER SESSION` 仅影响当前会话,其他会话保持原值。
- 初始化参数文件修改后需重启数据库,对所有新会话生效。
2. **权限**:
- `ALTER SESSION` 无需特殊权限,普通用户即可执行。
- `ALTER SYSTEM` 需要 `ALTER SYSTEM` 权限。
3. **监控**:
通过 `V$SESSTAT` 和 `V$STATNAME` 查看当前会话的游标缓存命中率:
```sql
SELECT S.VALUE
FROM V$SESSTAT S, V$STATNAME N
WHERE S.SID = SYS_CONTEXT('USERENV', 'SID')
AND N.NAME = 'session cursor cache hits'
AND S.STATISTIC# = N.STATISTIC#;
```
---
### **总结**
| 场景 | 设置方式 | 生效范围 | 是否重启 |
|---------------------|-----------------------------------|----------------|----------|
| **临时调优** | `ALTER SESSION` | 仅当前会话 | 否 |
| **应用层统一配置** | 客户端环境变量(如 JDBC 参数) | 当前连接 | 否 |
| **全局默认值** | `ALTER SYSTEM ... SCOPE=SPFILE` | 所有新会话 | 是 |
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




