zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

oracle参数文件

Oracle文件 参数
2023-09-14 09:01:48 时间

Orcale有四种数据文件。一类是参数文件,控制文件,数据文件,日志文件。


参数文件是用来约束oracle实例一种行为的参数。可以设置数据库内存,以及并发数目。

总而言之参数文件就是控制实例行为的文件。

实例就是oracle的一个进程+内存。为什么会有实例呢,因为对于大型的数据库来讲是由很多很多的用户在链接数据库的。为了保证这些用户有条不紊的互不干涉的使用数据库的文件那么就需要一个实例来管理运行这样一种功能。实例的行为由参数文件进行约束。实例启动的时候就会去读取参数文件,在读取的过程当中就会将每一个参数设定的指标读取出来之后进行资源的配置。


内存分配SGAPGASGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

Oracle的系统全局区SGA由哪几个部分组成?它们的作用是什么?

(1)数据高速缓冲区:存放着Oracle系统最近使用过的数据库数据块(oracle数据库的数据存储于数据块中,数据块是数据库中最小的数据组织单位oracle是以数据块为单位管理数据文件的存储空间,数据块的取值范围在2KB~64KB之间,连续的数据块可组成Oracle中的另一个概念--,区是电脑磁盘空间中分配的最小单位
oracle数据库的逻辑组件关系如下:
oracle数据库--表空间---- --数据块 

oracle11g中,数据块分为头部信息区和存储区,头部信息区不存放数据,但是存放有关存储区中表数据、索引数据的的相关信息起到引导的作用则存储区真正存放数据记录。


2)共享池:相当于程序高速缓冲区,所有的用户程序都存放在共享SQL池中。
3)重做日志缓冲区:用于缓冲区在对数据进行修改的操作过程中生成的重做记录。

 

 

SGAoracle最重要的一个内存区域。里面可以放数据块,sql语句的解析以及redo日志。

PGA代表一个会话分配的内存,一个会话分配的内存叫做一个PGA。总和就是oracle允许所有的会话使用内存的总和,SGA加上PGA基本上就是使用内存的一个总和了。

Db_cache_size sga里面,sga包括好几部分,一部分是放数据块的,一个放数据的地方。从磁盘里面将数据读取到内存里面。Db_cache_size是给数据块分配多大内存。

Db_files 数据库实例允许打开多少个数据文件。

 

两种方式查看oracle初始化参数

 

1)这些参数也可以在数据库里面看到show parameter要查看的参数名称。

SQL> show parameter sga;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

lock_sga                             boolean     FALSE

pre_page_sga                         boolean     FALSE

sga_max_size                         big integer 3248M

sga_target                           big integer 0

但是这种方式不可以看到所有的初始化参数。要看所有的初始化参数有一张视图v$parameter

SQL> desc v$parameter;

 名称                                      是否为空?类型

 ----------------------------------------- -------- ----------------------------

 NUM                                                NUMBER

 NAME                                               VARCHAR2(80)

 TYPE                                               NUMBER

 VALUE                                              VARCHAR2(4000)

 DISPLAY_VALUE                                      VARCHAR2(4000)

 ISDEFAULT                                          VARCHAR2(9)

 ISSES_MODIFIABLE                                   VARCHAR2(5)

 ISSYS_MODIFIABLE                                   VARCHAR2(9)

 ISINSTANCE_MODIFIABLE                              VARCHAR2(5)

 ISMODIFIED                                         VARCHAR2(10)

 ISADJUSTED                                         VARCHAR2(5)

 ISDEPRECATED                                       VARCHAR2(5)

 ISBASIC                                            VARCHAR2(5)

 DESCRIPTION                                        VARCHAR2(255)

 UPDATE_COMMENT                                     VARCHAR2(255)

 HASH                                               NUMBER

 

2)这个视图直接看name,value就行,所有的初始化参数和值都可以看到。

SQL> select name,value from v$parameter;

 

NAME

--------------------------------------------------------------------------------

VALUE

--------------------------------------------------------------------------------

lock_name_space

 

 

processes

150

 

Sessions

 

Oracle启动的时候使用什么初始化参数,从oracle 10g开始就使用spfile了,再早之前使用pfilePfile是一个文本文件,oracle启动的时候从文本文件里面读取初始化参数。文本文件的好处就是容易修改。到了10g之后就不要这个文本文件了,默认是spfilespfile其实就是一个二进制文件二进制文件的优势可以在线修改,随时都可以修改里面的内容。

要查看当前使用什么参数启动可以使用

SQL> show parameter spfile;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

spfile                               string      C:\APP\COMPLICATED\PRODUCT\11.

                                                 2.0\DBHOME_1\DATABASE\SPFILEOR

                                                 CL.ORA

可以看到是使用spfile启动oracle,show parameter spfile值是空的就说明你是用pfile启动的,反过来也是的了。

如果spfile值为空就使用

create spfile from pfile;pfile里面创建spfile。
startup force;重新启动。

 

要想使用pfile启动就使用

Create pfile from spfile;从spfile里面创建pfile。

Startup pfile=’C:\app\complicated\

product\11.2.0\dbhome_1\database\INITorcl.ORA’;重新启动指定读取的pfile文件路径。

Pfile的好处是可以手动修改该文本文件里面的配置信息的内容。

 

 

 

 

windows下面spfile和pfile是放在统一路径下面。

orcl.__java_pool_size=16777216

orcl.__large_pool_size=16777216

orcl.__oracle_base='C:\app\complicated'#ORACLE_BASE set from environment

orcl.__pga_aggregate_target=1375731712

orcl.__sga_target=2030043136

orcl.__shared_io_pool_size=0

orcl.__shared_pool_size=452984832

orcl.__streams_pool_size=0

*.audit_file_dest='C:\app\complicated\admin\orcl\adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='C:\app\complicated\oradata\orcl\control01.ctl','C:\app\complicated\flash_recovery_area\orcl\control02.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_name='orcl'

*.db_recovery_file_dest='C:\app\complicated\flash_recovery_area'

*.db_recovery_file_dest_size=4102029312

*.diagnostic_dest='C:\app\complicated'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.local_listener='LISTENER_ORCL'

*.memory_target=3397386240

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

显示的时候并没有将所有参数都显示出来只是将有改变的参数显示出来。

 

 

使用spfile动态修改配置信息。

SQL> show parameter cursor;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

cursor_sharing                       string      EXACT

cursor_space_for_time                boolean     FALSE

open_cursors                         integer     300

session_cached_cursors               integer     50

SQL> alter system set open_cursors=301;修改的为会话可以打开多少个游标。

 

系统以更改。

 

Alter system set 配置参数=数值 scope=;

1)Scope=memory  修改后立刻生效但是重启之后不会生效。

2)Scope=spfile 有的参数是不允许修改当前的状态的,如sga,必须修改完之后数据库重启才生效,所以不能在memory,both模式下修改。

SQL> alter system set sga_max_size=3249M;

alter system set sga_max_size=3249M

                 *

1 行出现错误:

ORA-02095: 无法修改指定的初始化参数

SQL> alter system set sga_max_size=3249M scope=spfile;

 

系统以更改。

只能先将配置的值写到spfile里面,再重启才生效。

 

3)不加scope选项默认是Scope=both,即把参数在内存里面改了即当前生效了同时写入到spfile里面去了。既改内存又改spfile。

 

总结:修改数据库的参数有两种方式。

(1)spfile转为pfile。之后通过修改pfile里面的内容,修改完之后启动数据库,之后启动数据库让pfile生效。

(2)通过命令的方式进行修改。通过命令方式改有些参数可以直接改,改完当前生效。有些参数不能当前生效只能先写到spfile里面再重新启动让其生效。

 

参数文件是控制实例行为的,因为实例才会去读取参数文件。数据库启动就是启动实例的过程,启动实例就是开辟oracle自己的内存之后启动后台进程。进程和内存就构成的实例。后台进程是用来联系内存和数据文件的,内存是用来存放数据的。进程内存都有了整个数据库就开始工作了。


在linux下面

[oracle@localhost dbs]$ ls

hc_oradb.dat  initoradb.ora  orapworadb      spfileoradb.ora

     lkORADB        snapcf_oradb.f

[oracle@localhost dbs]$ pwd

/u01/oracle/product/11.2.0/db_1/dbs

在linux里面spfileoradb.ora为二进制文件,initoradb.ora 为文本文件。二进制格式spfile+sid+.ora。文本格式为init+sid+.ora

spfilepfile之间是可以相互之间互相转换的。

oracle@localhost dbs]$ rm -rf spfileoradb.ora

[oracle@localhost dbs]$ ls

hc_oradb.dat  init.ora  initoradb.ora  lkORADB  orapworadb  snapcf_oradb.f

[oracle@localhost dbs]$ sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.4.0 Production on Wed Dec 13 06:35:10 2017

 

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

 

Connected to an idle instance.

 

SQL> create spfile from pfile;

 

File created.

 

SQL> exit;

Disconnected

[oracle@localhost dbs]$ ls

hc_oradb.dat  initoradb.ora  orapworadb      spfileoradb.ora(之前删除了,后面又重新创建了)

init.ora      lkORADB        snapcf_oradb.f

 

如果将pfilespfile都删除了,那么数据库就无法启动到nomount状态

SQL> startup;

ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file '/u01/oracle/product/11.2.0/db_1/dbs/initoradb.ora'

所以spfilepfile必须存在一个才能将数据库启动到nomount状态。

[root@localhost ~]# mv /rman/initoradb.ora  /u01/oracle/product/11.2.0/db_1/dbs/

 

SQL> startup pfile='/u01/oracle/product/11.2.0/db_1/dbs/initoradb.ora';(指定使用pfile启动数据库)

ORACLE instance started.

 

Total System Global Area  952020992 bytes

Fixed Size     2258960 bytes

Variable Size   822085616 bytes

Database Buffers   121634816 bytes

Redo Buffers     6041600 bytes

Database mounted.

Database opened.

 

默认情况下由spfilepfileoracle是以spfile启动的。

SQL>  alter system set memory_max_target=2G scope=spfile;(设置的内存不合理,在数据库启动读取参数文件的时候,无法启动数据库)

 

System altered.

 

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup;

ORA-00845: MEMORY_TARGET not supported on this system

SQL> create pfile from spfile;

 

File created.

这个时候由于使用spfile启动不起来,可以创建pfile,因为是文本文件可以修改。

[oracle@localhost dbs]$ vi initoradb.ora

 

oradb.__db_cache_size=117440512

oradb.__java_pool_size=4194304

oradb.__large_pool_size=394264576

oradb.__oracle_base='/u01/oracle'#ORACLE_BASE set from environment

oradb.__pga_aggregate_target=218103808

oradb.__sga_target=738197504

oradb.__shared_io_pool_size=0

oradb.__shared_pool_size=209715200

oradb.__streams_pool_size=0

*.audit_file_dest='/u01/oracle/admin/oradb/adump'

*.audit_trail='db'

*.compatible='11.2.0.4.0'

*.control_files='/u01/oracle/oradata/control01.ctl','/u01/oracle/fast_recovery_area/control02.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_name='oradb'

*.db_recovery_file_dest='/u01/oracle/fast_recovery_area'

*.db_recovery_file_dest_size=10G

*.deferred_segment_creation=FALSE

*.diagnostic_dest='/u01/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=oradbXDB)'

*.job_queue_processes=1000

*.memory_max_target=1G(将之前的不合理值修改回来,之后将修改好后的pfile创建一个spfile,再启动数据库)。

SQL> create spfile from pfile;

 

File created.

SQL> startup;

ORACLE instance started.

 

Total System Global Area 1068937216 bytes

Fixed Size     2260088 bytes

Variable Size   939525000 bytes

Database Buffers   121634816 bytes

Redo Buffers     5517312 bytes

Database mounted.

Database opened.

 

both写入参数文件spfile和当即在内存当中生效,spfile,修改的不能立刻在内存当中生效,必须写入spfile等下次重启时候生效。)

SQL> show parameter memory_target;

 

NAME      TYPE  VALUE

------------------------------------ ----------- ------------------------------

memory_target      big integer 912M

SQL> show parameter memory_max_target;

 

NAME      TYPE  VALUE

------------------------------------ ----------- ------------------------------

memory_max_target      big integer 1G

SQL> alter system set memory_target=1G scope=both;

 

System altered.

 

SQL> show parameter memory_target;

 

NAME      TYPE  VALUE

------------------------------------ ----------- ------------------------------

memory_target      big integer 1G