1,pfile 和 spfile
Oracle 中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件. 它们是在数据库实例启动时候加载的, 决定了数据库的物理 结构, 内存, 数据库的限制及系统大量的默认值, 数据库的各种物理属性, 指定数据库控制文件名和路径等信息, 是进行数据库设计和性能调优的重要文件. 可以分为两种类型:
pfile: 初始化参数文件 (Initialization Parameters Files),Oracle 9i 之前, ORACLE 一直采用 pfile 方式存储初始化参数, pfile 默认的名称为 "init + 例程名. ora" 文件路径:/data/App/oracle/product/12.1.0/dbhome_1/dbs, 这是一个文本文件, 可以用任何文本编辑工具打开.
spfile: 服务器参数文件 (Server Parameter Files), 从 Oracle 9i 开始, Oracle 引入了 Spfile 文件, spfile 默认的名称为 "spfile + 例程名. ora" 文件路径:/data/App/oracle/product/12.1.0/dbhome_1/dbs 以二进制文本形式存在, 不能用 vi 编辑器对其中参数进行修改, 只能通过 SQL 命令在线修改.
从操作系统上可以看到这两者的区别, 初始化参数文件为 ASCII 文本文件, Spfile 为数据文件.
- [oracle@xqzt ~]$ cd /data/App/oracle/product/12.1.0/dbhome_1/dbs/
- [oracle@xqzt dbs]$ ls
- hc_orcl.dat init.ora lkORCL orapworcl spfileorcl.ora
- [oracle@xqzt dbs]$ file init.ora
- init.ora: ASCII English text
- [oracle@xqzt dbs]$ file spfileorcl.ora
- spfileorcl.ora: data
- [oracle@xqzt dbs]$
2, 使用 spfile 的好处
1,spfile 改正了 pfile 管理混乱的问题, 在多结点的环境里, pfile 会有多个 image, 启动时候需要跟踪最新的 image. 这是个烦琐的过程. 用 spfile 以后, 所有参数改变都写到 spfile 里面 (只要定义 scope=spfile 或 both), 参数配置有个权威的来源.
2,9i 以前一般都是要备份 pfile 后再来做参数的修改, 而且 pfile 的修改必须重启实例才能生效. 非常的不方便; 在 9i 以后的 spfile 就可以同通过命令修改指定的参数了, 而且有很多参数都不用重启数据库, 能够在线生效, 这个在线生效的参数会随着数据库的版本增高而增加. 如果参数修改有问题数据库起不来了可以在 nomount 状态下创建成 pfile 再修改回来即可.)
3, 如何查看 Spfile 与 pfile 的目录位置?
方法一:
- SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER WHERE NAME ='spfile';
- NAME
- --------------------------------------------------------------------------------
- VALUE
- --------------------------------------------------------------------------------
- DISPLAY_VALUE
- --------------------------------------------------------------------------------
- spfile
- /data/App/oracle/product/12.1.0/dbhome_1/dbs/spfileorcl.ora
- /data/App/oracle/product/12.1.0/dbhome_1/dbs/spfileorcl.ora
方法二: Show parameter spfile
4, 判断 Oracle 启动时使用 spfile 还是 pfile?
1, 通过 v$spparameter 视图
使用 spfile 启动数据库, 我们可以看到查询出来的结果是 spfile
- SQL> select decode(count(*),1,'spfile','pfile') from v$spparameter where rownum=1 and isspecified ='TRUE';
- DECODE
- ------
- spfile
2, 通过查看 spfile,pfile 参数
系统当前为从 spfile 启动, 在查看 show parameter pfile 和 show parameter spfile 都能看到 spfile 参数文件的路径.
关闭数据库, 从 pfile 启动, startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora'; 再次执行上述的两个语句
我们在这里可以很明显的发现, 使用 pfile 启动的数据库, 我们无论是查看 show parameter pfile 还是 show parameter spfile 都无法看到 pfile 参数文件的路径.
5,pfile 和 spfile 的互相创建
- create spfile[='xxxxx'] from pfile[='xxxx'];
- create pfile[='xxxxx'] from spfile[='xxxx'];
- SQL> create pfile from spfile ;
File created.
SQL>
通过 spfile 创建 pfile 文件 (此时会在 $ORACLE_HOME/dbs 目录下生成 pfile:initorcl.ora), 当然你也可以指定参数文件的位置.
- [oracle@xqzt dbs]$ pwd
- /data/App/oracle/product/12.1.0/dbhome_1/dbs
- [oracle@xqzt dbs]$ ls
- hc_orcl.dat lkORCL spfileorcl.ora
- init.ora initorcl.ora orapworcl
6, 使用 pfile/spfile 启动数据库
1,startup 启动次序 spfile 优先于 pfile. 查找文件的顺序是 spfileSID.ora-〉spfile.ora-〉initSID.ora-〉init.ora(spfile 优先于 pfile).
2,startup pfile='文件目录' 使用 pfile 启动, 则需指定完整路径, 或删除 spfile.
- SQL> startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora';
- ORACLE instance started.
- Total System Global Area 2466250752 bytes
- Fixed Size 2927384 bytes
- Variable Size 1426064616 bytes
- Database Buffers 1023410176 bytes
- Redo Buffers 13848576 bytes
- Database mounted.
- Database opened.
- SQL>
3, 如果在数据库的 $ORACLE_HOME/dbs / 目录下既有 spfile 又有 pfile, 使用 spfile 启动数据库, 不需要指定参数文件路径 (因为数据库会优先选择 spfile 启动),
4, 如果参数文件不在 $ORACLE_HOME/dbs / 目录下, 无论是通过 spfile 或 pfile 启动均需要指定完整路径.
7,spfile 参数的三种 scope:
1. scope=spfile: 对参数的修改记录在服务器初始化参数文件中, 修改后的参数在下次启动 DB 时生效. 适用于动态和静态初始化参数.
2. scope=memory: 对参数的修改记录在內存中, 对于动态初始化参数的修改立即生效. 在重启 DB 后会丟失, 会复原为修改前的参数值.
3. scope=both: 对参数的修改会同时记录在服务器参数文件和內存中, 对于动态参数立即生效, 对静态参数不能用这个选项
参数类型 | spfile | memory | both |
静态参数 | 可以, 重启服务器生效 | 不可以 | 不可以 |
动态参数 | 可以, 重启服务器生效 | 可以, 立即生效, 重启服务失效 | 可以, 立即生效, 重启服务器仍然有效果 |
如果使用了服务器参数文件, 则在执行 alter system 语句时, scope=both 是 default 的选项.
如果沒有使用服务器参数文件, 而在执行 alter system 语句时指定 scope=spfile|both 都会出错.
8, 修改参数例子
scope=both: 对于动态参数立即生效
- SQL> show parameter pga;
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- pga_aggregate_limit big integer 2G
- pga_aggregate_target big integer 500M
- SQL> alter system set pga_aggregate_target = 600m scope=both;
System altered.
- SQL> show parameter pga;
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- pga_aggregate_limit big integer 2G
- pga_aggregate_target big integer 600M
对静态参数不能使用 scope=both
- SQL> alter system set processes = 100 scope=both;
- alter system set processes = 100 scope=both
- *
- ERROR at line 1:
- ORA-02095: specified initialization parameter cannot be modified
- SQL>
静态参数 scope=spfile 修改完后重启数据库能生效
- SQL> show parameter processes
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- aq_tm_processes integer 1
- db_writer_processes integer 1
- gcs_server_processes integer 0
- global_txn_processes integer 1
- job_queue_processes integer 1000
- log_archive_max_processes integer 4
- processes integer 300
- SQL> alter system set processes = 100 scope=spfile;
System altered.
- SQL> shutdown immediate
- Database closed.
- Database dismounted.
- ORACLE instance shut down.
- SQL> startup
- ORACLE instance started.
- Total System Global Area 2466250752 bytes
- Fixed Size 2927384 bytes
- Variable Size 1358955752 bytes
- Database Buffers 1090519040 bytes
- Redo Buffers 13848576 bytes
- Database mounted.
- Database opened.
- SQL> show parameter processes
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- aq_tm_processes integer 1
- db_writer_processes integer 1
- gcs_server_processes integer 0
- global_txn_processes integer 1
- job_queue_processes integer 1000
- log_archive_max_processes integer 4
- processes integer 100
scope=memory 对于动态参数, 可以实现立即生效, 下次启动失效.
SQL> alter system set pga_aggregate_target = 600m scope=memory;
System altered.
SQL>
如果使用的是 pfile, 则无法通过命令进行修改, 会报 ORA-02095 或 32001 错误.
- SQL> startup pfile='/data/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora';
- ORACLE instance started.
- Total System Global Area 2466250752 bytes
- Fixed Size 2927384 bytes
- Variable Size 1426064616 bytes
- Database Buffers 1023410176 bytes
- Redo Buffers 13848576 bytes
- Database mounted.
- Database opened.
- SQL> alter system set processes = 100;
- alter system set processes = 100
- *
- ERROR at line 1:
- ORA-02095: specified initialization parameter cannot be modified
- SQL> alter system set processes = 100 scope=spfile;
- alter system set processes = 100 scope=spfile
- *
- ERROR at line 1:
- ORA-32001: write to SPFILE requested but no SPFILE is in use
- SQL> alter system set processes = 100 scope=both;
- alter system set processes = 100 scope=both
- *
- ERROR at line 1:
- ORA-02095: specified initialization parameter cannot be modified
- SQL> alter system set processes = 100 scope=memory;
- alter system set processes = 100 scope=memory
- *
- ERROR at line 1:
- ORA-02095: specified initialization parameter cannot be modified
9, 参数列表:
参数:
- # Cache and I/O 高速缓存和 I/O
- ###########################################
db_block_size=8192 指定数据块大小为 8KB
db_cache_size=33554432 指定数据缓冲区为 32MB, 该值越大, 可以减少对数据库文件的 I/O 次数, 提高效率
- db_file_multiblock_read_count=16
- ###########################################
- # Cursors and Library Cache 游标和库高速缓存
- ###########################################
open_cursors=300 指定一个会话一次可以打开的游标的最大数量为 300, 应将该值设置得足够高, 这样才能防止应用程序耗尽打开的游标
- ###########################################
- # Database Identification 数据库标识
- ###########################################
db_domain="" 数据库域名为 mynet, 加上数据库名称 db_name 构成全局数据库名称
db_name=cicro 数据库名称为 myoracle
- ###########################################
- # Diagnostics and Statistics 诊断和统计
- ###########################################
background_dump_dest=/opt/oracle/admin/cicro/bdump 后台进程跟踪文件目录
core_dump_dest=/opt/oracle/admin/cicro/cdump 核心转储跟踪文件目录
timed_statistics=TRUE 收集操作系统的计时信息, 这些信息可被用来优化数据库和 SQL 语句
user_dump_dest=/opt/oracle/admin/cicro/udump 用户进程跟踪文件目录
- ###########################################
- # File Configuration
- control_files=("/opt/oracle/oradata/cicro/control01.ctl", "/opt/oracle/oradata/cicro/control02.ctl",
"/opt/oracle/oradata/cicro/control03.ctl") 指定控制文件的路径及文件名
- ###########################################
- ###########################################
- # Instance Identification 网络注册
- ###########################################
instance_name=test 例程名称为 test
- ###########################################
- # Job Queues
- ###########################################
- job_queue_processes=10
- ###########################################
- # MTS 多线程服务器配置标识, 在 Oracle 9i 里称为共享服务器配置
- ###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=testXDB)" 多线程服务器配置
- ###########################################
- # Miscellaneous 其他
- ###########################################
- aq_tm_processes=1
compatible=9.2.0.0.0 兼容版本 9.2.0
- ###########################################
- # Optimizer
- ###########################################
- hash_join_enabled=TRUE
- query_rewrite_enabled=FALSE
- star_transformation_enabled=FALSE
- db_name=cicro
- ###########################################
- ###########################################
- # Pools 池
- ###########################################
Java_pool_size=83886080 指定 Java 存储池的大小为 32MB, 用于存储 Java 的方法, 类定义和 Java 对象.
large_pool_size=16777216 指定大型池的大小为 1MB, 用于共享服务器的会话内存, 并行执行的消息缓冲区以及 RMAN 备份和恢复的磁盘 I/O 缓冲区.
shared_pool_size=83886080 指定共享池的大小为 32MB, 用于存储共享游标, 存储的过程, 控制结构和并行执行消息缓冲区等对象. 较大的值能改善多用户系统的性能.
- ###########################################
- # Processes and Sessions 进程和会话
- ###########################################
processes=150 指定可同时连接到一个 Oracle Server 上的操作系统用户进程的最大数量为 150
- ###########################################
- # Redo Log and Recovery 重做日志和恢复
- ###########################################
fast_start_mttr_target=300 指定从单个数据库例程崩溃中恢复所需的时间为 300 秒
- ###########################################
- # Security and Auditing 安全与验证
- ###########################################
remote_login_passwordfile=EXCLUSIVE 指定操作系统或口令文件是否具有检查用户口令的权限. 设置为 EXCLUSIVE, 将使用数据库的口令文件对每个具有权限的用户进.
- ###########################################
- # Sort, Hash Joins, Bitmap Indexes 排序, 散列联接, 位图索引
- ###########################################
- pga_aggregate_target=25165824
sort_area_size=524288 指定排序区使用的最大内存量为 512KB. 排序完成后, 各行将返回, 并且内存将释放. 增大该值可以提高大型排序的效率.
- ###########################################
- # System Managed Undo and Rollback Segments 系统管理的撤消和回退段
- ###########################################
undo_management=AUTO 指定系统使用的撤消空间管理方式为 SMU 方式, 在 SMU 方式下, 撤消空间会像撤消表空间一样在外部分配.
undo_retention=10800
undo_tablespace=UNDOTBS1 指定回滚表空间为 UNDOTBS
来源: http://www.linuxidc.com/Linux/2019-12/161812.htm