ASMM机制涉及的一对参数为: SGA_TARGET和SGA_MAX_SIZE 。 SGA_TARGET Default value 0 (SGA autotuning is disabled for DEFERRED mode autotuning requests, but allowed for IMMEDIATE mode autotuning requests) Modifiable ALTER SYSTEM (即表示该参数
ASMM机制涉及的一对参数为:SGA_TARGET和SGA_MAX_SIZE。
SGA_TARGET
Default value |
0 (SGA autotuning is disabled forDEFERRED mode autotuning requests, but allowed forIMMEDIATE mode autotuning requests) |
---|---|
Modifiable | ALTER SYSTEM<code>(即表示该参数为动态参数) |
Range of values | 64 MB to operating system-dependent |
参见:http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams236.htm#I1010256
SGA_MAX_SIZE
Default value | Initial size of SGA at startup, dependent on the sizes of different pools in the SGA, such as buffer cache, shared pool, large pool, and so on. |
---|---|
Modifiable | No(即表示该参数为静态参数)
|
Range of values | 0 to operating system-dependent |
On 64-bit platforms and non-Windows 32-bit platforms, when either MEMORY_TARGET
orMEMORY_MAX_TARGET
is specified, the default value ofSGA_MAX_SIZE
is set to the larger of the two parameters. This causes more address
space to be reserved for expansion of the SGA.
On Windows 32-bit platforms, the default value of SGA_MAX_SIZE
is the largest of the following values:
-
60% of
MEMORY_TARGET
, if specified -
60% of
MEMORY_MAX_TARGET
, if specified -
25% of the total available virtual address space
参见:http://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams235.htm
上述描述可知,
1、当SGA_TARGET=非0时,SGA_TARGET要在64 MB to operating system-dependent这个范围内,确切说是,SGA_TARGET要在64 MB to<span>SGA_MAX_SIZE</span>。
2、
由于SGA_TARGET始终SGA_MAX_SIZE,所以
当SGA_TARGET=0时,<span>SGA_MAX_SIZE</span>
取值范围为0 to<span>SGA_MAX_SIZE</span>。
当SGA_TARGET=非0时,SGA_TARGET要在64 MB to<span>SGA_MAX_SIZE</span>这个范围内,故而<span>SGA_MAX_SIZE</span>
取值范围为64
MB to operating system-dependent。
说明了SGA_TARGET要SGA_MAX_SIZE的例子,参见下文一大点里1.2的例子。
这里还有一点要知道,sga_max_size可以自动来变动的(sga_max_size自动变动值,无论在实例启动时,还是实例运行期间,都可以;而alter system setsga_max_size只能在实例启动时起效,因为sga_max_size是静态参数),当sga的内存组件的和小于sga_max_size的时候,sga_max_size不会改变,还是维持自己的值,如果超过了这个和,sga_max_size的就会自动变动成和的值,这个你可以自己试试。例如,
我现在想调整database buffer的值到1G,我只需要设置db_cache_size到1G,而不设置sga_max_size,这时由于各组件值大于sga_max_size目前值,所以sga_max_size自动变化:
SQL>alter system set db_cache_size=1000Mscope=spfile;
SQL> shutdown immediate;
SQL> startup;
看看现在的内存信息
Total System Global Area 1301357848 bytes
Fixed Size 455960 bytes
Variable Size 251658240 bytes
Database Buffers 1048576000 bytes
Redo Buffers 667648 bytes
发现sga_max_size已经自动变化
SQL> show parameters sga_
NAME TYPE VALUE
———————————— ——————————— ———
sga_max_size big integer 130135784
也已经变化叻。
【
参见:
http://blog.csdn.net/haiross/article/details/41696485
为什么会出现这样的问题叻,是因为在32位的机器上Oracle的内存有限制,内存最大4G,32位留50%给操作系统,window是单线程的,不能超过1.7G。out of memory也就出来叻。
SGA不能超过1.7G的限制
在Windows上调整SGA大小遭遇ORA-27100、ORA-27102错误的处理方法】
当实例启动前的参数里sga_max_size=0,sga_target=0时,实例启动后sga_max_size值也会自动调整,详见下文一大点里的2.2例子。
那么sga_max_size值自动调整时,该参数的值具体为多少,是什么决定呢?
是由sga_max_size的默认值:
Default value :Initial size of SGA at startup, dependent on the sizes of different pools in the SGA, such as buffer cache, shared pool, large pool, and so on。也就是说
SGA_MAX_SIZE 的 Default value 为Initial size of SGA at startup,所以说SGA_MAX_SIZE是一个没有初始化值的变量。故而在ASMM启动时,SGA_MAX_SIZE 的 Default value 是将SGA_target的值赋值给SGA_MAX_SIZE的,在ASMM关闭时,SGA_MAX_SIZE 的 Default
value 是将sga各个组件的参数值如shared_pool_size相加的值赋值给SGA_MAX_SIZE的。
具体的说是,
On 64-bit platforms and non-Windows 32-bit platforms, when either MEMORY_TARGET
orMEMORY_MAX_TARGET
is specified, the default value ofSGA_MAX_SIZE
is set to the larger of the two parameters. This causes more address
space to be reserved for expansion of the SGA.
On Windows 32-bit platforms, the default value of SGA_MAX_SIZE
is the largest of the following values:
-
60% of
MEMORY_TARGET
, if specified -
60% of
MEMORY_MAX_TARGET
, if specified -
25% of the total available virtual address space
实例运行期间的SGA_MAX_SIZE都是一个非0值,因为SGA_MAX_SIZE是一个静态参数,所以实例运行期间将SGA_MAX_SIZE置为0,但是修改后的值不会立马起效,只有待下一次实例启动时才起效,而待下一次实例启动时如上所说实例启动时SGA_MAX_SIZE还是会从0被调整为一个非0值。详见下文一大点里的2.2例子。
参数默认值不一定就是参数的初始化值:
SGA_MAX_SIZE Default value 为Initial size of SGA at startup,所以说SGA_MAX_SIZE是一个没有初始化值的变量。故而在ASMM启动时,SGA_MAX_SIZE 的 Default value 是将SGA_target的值赋值给SGA_MAX_SIZE的,在ASMM关闭时,SGA_MAX_SIZE 的 Default value 是将sga各个组件的参数值如shared_pool_size相加的值赋值给SGA_MAX_SIZE的。
参见盖国强 《深入解析oracle》 第二章 参数分类
SGA_TARGET和SGA_MAX_SIZE两者关系为
0、SGA_TARGET始终SGA_MAX_SIZE。
否则,会提示
ORA-00823: Specified value ofsga_target greater than sga_max_size。
一、
当AMM启动时,即memory_target=非0
If Automatic Memory Management is enabled (MEMORY_TARGET
is set to a positive value) andSGA_TARGET
is also set to a positive value, theSGA_TARGET
value acts as the minimum value for the size of the SGA.
以下实验时参数文件里MEMORY_TARGET=非0,MEMORY_MAX_TARGET=非0。
1、当SGA_TARGET=非0时(即ASMM启动时)
1.1
当参数文件里SGA_TARGET=非0,<span>SGA_MAX_SIZE</span>=非0时,实例启动成功。
1.2
当参数文件里SGA_TARGET=非0,<span>SGA_MAX_SIZE</span>=0时,实例启动不成功。
下面是具体实验来证明:
参数文件里:
*.memory_max_target= 700M
*.memory_target=700M
*.sga_max_size=0
*.sga_target=400M
*.pga_aggregate_target=100M
SQL>shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
SQL>startup pfile=E:\app\hc\product\11.2.0\dbhome_1\database\INITmonkey.ORA
ORA-00823: Specified value of sga_target greater than sga_max_size
ORA-01078:处理系统参数失败
SQL>
注释:
对比memory_max_target和memory_target关系不同点在于:
当MEMORY_TARGET=非0,MEMORY_MAX_TARGET=0时,启动实例后MEMORY_MAX_TARGET=MEMORY_TARGET值。2、当SGA_TARGET=0时(即ASMM关闭时)
2.1
当参数文件里SGA_TARGET=0,<span>SGA_MAX_SIZE</span>=非0时,实例启动成功。
注释:
memory_target=0时sga_ target可以为0是因为memory_target=0时sga_ target为0,表示sga为手动管理,即由shared_pool_size参数等之和为sga大小。
2.2
当参数文件里SGA_TARGET=0,<span>SGA_MAX_SIZE</span>=0时,实例启动成功。
启动实例成功后,查看SGA_TARGET和<span>SGA_MAX_SIZE</span>(使用showparameters
sga或是select * from v$parameter where name like '%sga%';),发现<span>SGA_MAX_SIZE</span>被调整为一个非0值。
以如下参数文件来启动实例:
memory_target=0,memory_max_target=1400M,
pga_aggregate_target 为0,workarea_size_policy=manual,
sga_max_size=0,sga_target=0
则可以启动实例成功。
SQL> select name,value from v$parameter where name like '%target%' orname like
'%sga%';
NAME VALUE
------------------------ --------------------------------------------------------
sga_max_size 150994944
pre_page_sga FALSE
lock_sga FALSE
sga_target 0
memory_target 0
memory_max_target 1468006400
archive_lag_target 0
fast_start_io_target 0
fast_start_mttr_target 0
db_flashback_retention_target 1440
pga_aggregate_target 0
parallel_servers_target 32
已选择12行。
注释:
为什么启动实例时SGA_MAX_SIZE会从0被调整为一个非0值呢?
sga_max_size可以自动来变动的(sga_max_size自动变动值,无论在实例启动时,还是实例运行期间,都可以;而alter system setsga_max_size只能在实例启动时起效,因为sga_max_size是静态参数),当sga的内存组件的和小于sga_max_size的时候,sga_max_size不会改变,还是维持自己的值,如果超过了这个和,sga_max_size的就会自动变动成和的值。
那么sga_max_size值自动调整时,该参数的值具体为多少,是什么决定呢?
是由sga_max_size的默认值。SGA_MAX_SIZE Default value 为Initial size of SGA at startup,所以说SGA_MAX_SIZE是一个没有初始化值的变量。故而在ASMM启动时,SGA_MAX_SIZE 的 Default value 是将SGA_target的值赋值给SGA_MAX_SIZE的,在ASMM关闭时,SGA_MAX_SIZE 的 Default value 是将sga各个组件的参数值如shared_pool_size相加的值赋值给SGA_MAX_SIZE的。
所以,实例启动前的参数文件即使设置了SGA_MAX_SIZE=0,实例启动时SGA_MAX_SIZE也会从0被调整为一个非0值。
故而我们可以知道实例运行期间的SGA_MAX_SIZE都是一个非0值,因为SGA_MAX_SIZE是一个静态参数,所以实例运行期间将SGA_MAX_SIZE置为0,但是修改后的值不会立马起效,只有待下一次实例启动时才起效,而待下一次实例启动时如上所说实例启动时SGA_MAX_SIZE还是会从0被调整为一个非0值。
二、
当AMM关闭时,即memory_target=0
2、当MEMORY_TARGET=0时(即AMM关闭时)
2.1
当参数文件里MEMORY_TARGET=0,MEMORY_MAX_TARGET=非0时,实例启动成功。
实例启动后,查看MEMORY_TARGET和MEMORY_MAX_TARGET都为原值(使用showparameters mem或是select * from v$parameter where name like '%mem%';)。即If you omit the line for MEMORY_TARGET
and include a value forMEMORY_MAX_TARGET
, theMEMORY_TARGET
parameter defaults to zero. After startup, you can then dynamically changeMEMORY_TARGET
to a nonzero value, provided that it does not exceed the value ofMEMORY_MAX_TARGET
.(文章详解)
2.2
当参数文件里MEMORY_TARGET=0,MEMORY_MAX_TARGET=0时,实例启动成功。
实例启动后,查看MEMORY_TARGET和MEMORY_MAX_TARGET(使用showparameters mem或是select * from v$parameter where name like '%mem%';),发现MEMORY_MAX_TARGET被调整为一个非0值。下面是具体实验来证明:
三、
AMM关闭时(即memory_target=0),才会出现ORA-00849:SGA_TARGET
524288000 cannot be set to more than MEMORY_MAX_TARGET 0.无论是sga_target>memory_max_target还是sga_max_size>memory_max_target。当sga_max_size>memory_max_target时,即使此时sga_target也>memory_max_target,ORA-00849里的SGA_TARGET值还是来自sga_max_size。
附加
sga_max_size是静态参数,所以它即使在实例运行期间修改的值也要在下次启动时起作用,故而不用试验sga_max_size静态参数在实例运行期间修改对sga_target影响。

方法:1、利用“select*from user_indexes where table_name=表名”语句查询表中索引;2、利用“select*from all_indexes where table_name=表名”语句查询所有索引。

oracle asm指的是“自动存储管理”,是一种卷管理器,可自动管理磁盘组并提供有效的数据冗余功能;它是做为单独的Oracle实例实施和部署。asm的优势:1、配置简单、可最大化推动数据库合并的存储资源利用;2、支持BIGFILE文件等。

在Oracle中,可利用lsnrctl命令查询端口号,该命令是Oracle的监听命令;在启动、关闭或重启oracle监听器之前可使用该命令检查oracle监听器的状态,语法为“lsnrctl status”,结果PORT后的内容就是端口号。

在oracle中,可以利用“TO_SINGLE_BYTE(String)”将全角转换为半角;“TO_SINGLE_BYTE”函数可以将参数中所有多字节字符都替换为等价的单字节字符,只有当数据库字符集同时包含多字节和单字节字符的时候有效。

在oracle中,可以利用“drop sequence sequence名”来删除sequence;sequence是自动增加数字序列的意思,也就是序列号,序列号自动增加不能重置,因此需要利用drop sequence语句来删除序列。

方法:1、利用“LOWER(字段值)”将字段转为小写,或者利用“UPPER(字段值)”将字段转为大写;2、利用“REGEXP_LIKE(字符串,正则表达式,'i')”,当参数设置为“i”时,说明进行匹配不区分大小写。

在oracle中,可以利用“select ... From all_tab_columns where table_name=upper('表名') AND owner=upper('数据库登录用户名');”语句查询数据库表的数据类型。

方法:1、利用“alter system set sessions=修改后的数值 scope=spfile”语句修改session参数;2、修改参数之后利用“shutdown immediate – startup”语句重启服务器即可生效。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。