原文地址:【基础】Oracle物理存储结构--文件作者:诗意方式
1 数据文件
3.查询数据文件参数
要将数据文件置为脱机状态,可以通过下列语句实现,如将SCOTT对象的数据文件置为脱机状态:
- SQL> ALTERDATABASE DATAFILE 'F:ORACLEORADATA
- JSSBOOKSCOTT01.DBF' OFFLINE;
- Database altered.
将数据文件置于联机状态的语句与上类似,只需要将OFFLINE关键字换为ONLINE即可,例如:
- SQL> ALTERDATABASE DATAFILE 'F:ORACLEORADATA
- JSSBOOKSCOTT01.DBF' ONLINE;
- Database altered.
查询数据库中数据文件,以及文件的状态可以通过查询DBA_DATA_FILES和V$DATAFILE两个视图实现:
- SQL> SELECTNAME,STATUS FROM V$DATAFILE;
- NAME STATUS
- ---------------------------------------- -------
- F:ORACLEORADATAJSSBOOKSYSTEM01.DBF SYSTEM
- F:ORACLEORADATAJSSBOOKUNDOTBS01.DBF ONLINE
- F:ORACLEORADATAJSSBOOKSYSAUX01.DBF ONLINE
- F:ORACLEORADATAJSSBOOKUSERS01.DBF ONLINE
- F:ORACLEORADATAJSSBOOKSCOTT01.DBF ONLINE
2 重做日志文件
Oracle里联机日志文件(Online redo logfile)是oracle运行的核心,联机日志文件关系到整个oracle数据库的运行,很好的设置联机日志文件,将有助于oracle的健康运行,相反联机日志文件的损坏,oracle也就面临着崩溃的危险.
本文总结一下关于redo logfile的一些内容。
一、redo logfile的简单介绍
它一般由大小相同的一组文件构成。我们可以查看数据库视图v$logfile知道它的个数和存储位置。
SQL> select * from v$logfile; |
查看数据库视图v$log知道它当前的状态。
SQL> select * from v$log; |
一个时间只有一组logfile group是工作状态(current), redo logfile满了后会自动切换到下一个logfile group, 如果数据库是归档方式同时写到归档日志文件。这些文件不能用常规的文本编辑器查看, 它以特定的格式存放, 只有数据库或者专门的软件可以看懂它。
redo logfile的最大数目是在创建数据库时指明的。如果你想知道当前数据库redo logfile的最大数值是多少,重新生成控制文件, 就可以知道。
SQL>alter database backup controlfile to trace; |
这条语句会在$ORACLE_BASE/admin/dbname/udump/路径下生成当前时间的一个*.trc文件, 也就是数据库的控制文件, 用文本编辑器, 即可看到数据库创建时用的一些参数, 包括redo logfile的最大数(maxlogfiles)。
二、 redo logfile的大小和位置对数据库性能的影响
如果用ORACLE的安装向导创建的典型数据库, 它的redo logfile大小为500K, 这基本上是不能满足典型的OLTP应用的, 在数据库日志文件(alert_orasid.log)里会记录着频繁的log switch。ORACLE推荐log switch时间最好在15--30分钟之间, 所以redo logfile的大小由数据库DML操作数据的大小决定其最佳大小。
redo logfile最好有多个存储位置, 多组成员, 使数据库恢复时有更多的选择。
典型的OLTP应用,redo logfile大小可以为16M。当然繁忙的数据库, 例如当今的门户网站, 这个值可以达到100M以上.
如果你发现当前数据库日志文件里log switch的时间偏大或者偏小,不要紧。ORACLE提供了在数据库联机状态来改变redo logfile大小的方法。
三、在联机状态改变redo logfile大小的方法
假如原来有3个小的redo log file, 下面是Linux环境下的一个例子:
第一步: 往数据库添加三个大的redo logfile
SQL> alter database add logfile group 4 ('/u01/app/oracle/oradata/HS2008/redo04.log', '/u02/app/oracle/oradata/HS2008/redo04.log') size 100M reuse; SQL> alter database add logfile group 5 ('/u01/app/oracle/oradata/HS2008/redo05.log', '/u02/app/oracle/oradata/HS2008/redo05.log') size 100M reuse; SQL> alter database add logfile group 6 ('/u01/app/oracle/oradata/HS2008/redo06.log', '/u02/app/oracle/oradata/HS2008/redo06.log') size 100M reuse; |
第二步: 手工地做log switch, 使新建的redo logfile起作用.
SQL> alter system switch logfile; |
此操作可以执行一到几次, 使旧的redo logfile成invalid状态.
第三步: 删除原来旧的redo logfile.
SQL> alter database drop logfile group 1; SQL> alter database drop logfile group 2; SQL> alter database drop logfile group 3; |
到操作系统下删除原日志组1、2、3中的文件
四、跟redo logfile有关的其它数据库参数
1、log_buffer
log_buffer是ORACLE SGA的一部分, 所有DML命令修改的数据块先放在log_buffer里, 如果满了或者到了check_point时候通过lgwr后台进程写到redo logfile里去。它不能设得太大,这样在意外发生时会丢失很多改变过的数据。它最好不要大于512K或者128K*CPU个数。
我们可以用下面的SQL语句检测log_buffer使用情况:
SQL> select rbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value||'%' "radio" from v$sysstat rbar,v$sysstat re
where rbar.name='redo buffer allocation retries'
and re.name='redo entries';
这个比率小于1%才好,否则增加log_buffer的大小
2、log_checkpoint_interval
Oracle8.1 版本后log_checkpoint_interval指的是两次checkpoint之间操作系统数据块的个数。
checkpoint时Oracle把内存里修改过的数据块用DBWR写到物理文件,用LGWR写到日志和控制文件。
从性能优化来说 log_checkpoint_interval = redo logfile size bytes / 512 bytes
3、log_checkpoint_timeout
Oracle8.1 版本后log_checkpoint_timeout指的是两次checkpoint之间时间秒数。
Oracle建议不用这个参数来控制,因为事务(transaction)大小不是按时间等量分布的。
log_checkpoint_timeout = 0
log_checkpoint_timeout = 900
3 控制文件
2.查询控制文件参数
通过初始化参数CONTROL_FILES查询:
- SQL> SHOW PARAMETER CONTROL_FILES;
- NAME TYPE VALUE
- --------------------- ----------- ------------------------------
- control_files string F:ORACLEORADATAJSSBOOKCONT
- ROL01.CTL, F:ORACLEORADATAJ
- SSBOOKCONTROL02.CTL, F:ORACL
- EORADATAJSSBOOKCONTROL03.CTL
通过动态性能视图V$CONTROLFILE查询:
- SQL> SELECTNAMEFROM V$CONTROLFILE;
- NAME
- --------------------------------------------------
- F:ORACLEORADATAJSSBOOKCONTROL01.CTL
- F:ORACLEORADATAJSSBOOKCONTROL02.CTL
- F:ORACLEORADATAJSSBOOKCONTROL03.CTL
3.控制文件备份
1、将控制文件备份为二进制文件 SQL>alter database backup controlfile to 'i:oraclebackupcontrol.bkp'; 2、将控制文件备份为文本文件(备份到oraclebaseadminsidudump目录下的跟踪文件中,将在跟踪文件中生成一个SQL脚本) SQL>alter database backup controlfile to trace; 3、通过spfile生成pfile文件备份控制文件 SQL>create pfile='/pfile_backup.ora' from spfile='/home/oracle/product/10.2.0/db_1/dbs/spfileSID.ora'; 4.恢复控制文件 1.关闭数据库实例; 2.在操作系统中用好的控制文件通过复制覆盖坏掉的控制文件‘ 3.重启数据库。 5.重建控制文件(控制文件都损坏) |
1、关闭数据库
SQL>shutdown immediate;
2、删除所有控制文件,模拟控制文件的丢失
3、启动数据库,出现错误,并不能启动到mount下
SQL>startup ORA-00205: error in identifying controlfile, check alert log for more info 查看报警日志文件,有如下信息 SQL>alter database mount Mon May 26 11:53:15 2003 ORA-00202: controlfile: 'D:Oracleoradatachencontrol01.ctl' ORA-27041: unable to open file OSD-04002: unable to open file O/S-Error: (OS 2) 系统找不到指定的文件。
4、关闭数据库 SQL>shutdown immediate;
5、在internal或sys下运行如下创建控制文件的脚本,注意完整列出联机日志或数据文件的路径,或修改由alter database backup control file to trace备份控制文件时产生的脚本,去掉多余的注释
SQL>STARTUP NOMOUNT SQL>CREATE CONTROLFILE REUSE DATABASE "TEST" NORESETLOGS NOARCHIVELOG MAXLOGFILES 32 MAXLOGMEMBERS 2 MAXDATAFILES 254 MAXINSTANCES 1 MAXLOGHISTORY 226 LOGFILE GROUP 1 'D:ORACLEORADATATESTREDO01.LOG' SIZE 1M, GROUP 2 'D:ORACLEORADATATESTREDO02.LOG' SIZE 1M, GROUP 3 'D:ORACLEORADATATESTREDO03.LOG' SIZE 1M DATAFILE 'D:ORACLEORADATATESTSYSTEM01.DBF', 'D:ORACLEORADATATESTRBS01.DBF', 'D:ORACLEORADATATESTUSERS01.DBF', 'D:ORACLEORADATATESTTEMP01.DBF', 'D:ORACLEORADATATESTTOOLS01.DBF', 'D:ORACLEORADATATESTINDX01.DBF' CHARACTER SET ZHS16GBK;
SQL>RECOVER DATABASE
SQL>ALTER DATABASE OPEN; 6、如果没有错误,数据库将启动到open状态下。
说明:
1、重建控制文件用于恢复全部控制文件的损坏,需要注意其书写的正确性,保证包含了所有的数据文件与联机日志
2、经常有这样一种情况,因为一个磁盘损坏,我们不能再恢复(store)数据文件到这个磁盘,因此在store到另外一个盘的时候,我们就必须重新创建控制文件,用于识别这个新的数据文件,这里也可以用这种方法用于恢复。
4 归档的日志文件
1,改变日志操作模式:
检查当前日志操作模式:
SELECT log_mode from v$database;
关闭数据库,然后装载数据库:
SHUTDOWN IMMEDIATE
STARTUP MOUNT
改变日志操作模式,然后打开数据库:
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
2、显示归档日志信息 SELECT name,log_mode FROM v$database;
显示归档日志信息.
Select name, sequence#, first_change# FROM v$archived_log; 显示日志历史信息 SELECT * FROM v$loghist; 显示归档进程信息. SELECT * FROM v$archive_processes; 1,切换日志文件: 1.1,切换前: SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS ---------- ---------- ---------- ---------- ---------------- 1 215 52428800 1 CURRENT 2 213 52428800 1 INACTIVE 3 214 52428800 1 INACTIVE
1.2 切换日志文件 SQL> alter system switch logfile;
1.3 切换后: SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS ---------- ---------- ---------- ---------- ---------------- 1 215 52428800 1 ACTIVE 2 216 52428800 1 CURRENT 3 214 52428800 1 INACTIVE
2,强制checkpoint: SQL> alter system checkpoint;
3,切换到归档/非归档模式 SQL> startup mount SQL> alter database archivelog/noarchivelog SQL> alter database open;
4,显示当前归档日志组和成员: SQL> select GROUP#,member from v$logfile; 5,添加redo log组: 5.1 SQL> alter database add logfile group 4 ('/oracle/oradata/orcl/redo04.log') size 4m; 5.2 检查新加入的log状态 SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS ---------- ---------- ---------- ---------- ---------------- 1 215 52428800 1 INACTIVE 2 216 52428800 1 CURRENT 3 214 52428800 1 INACTIVE 4 0 4194304 1 UNUSED (虽然这里是UNUSED的状态,但是通过切换日志文件或者数据库自动切换,该文件会被改为active状态) 6,添加新的文件到group 1 SQL> alter database add logfile member '/oracle/oradata/orcl/redo05.log' to group 1; SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS ---------- ---------- ---------- ---------- ---------------- 1 219 52428800 2 CURRENT 2 216 52428800 1 ACTIVE 3 218 52428800 1 ACTIVE 4 217 4194304 1 ACTIVE ( 这里的group组中的member就变为2;) SQL> select member from v$logfile where group#=1;
MEMBER ----------------------------------------------------------------------------- /oracle/oradata/orcl/redo01.log /oracle/oradata/orcl/redo05.log
7,给数据库日志文件改名 SQL> alter database rename file '/oracle/oradata/orcl/redo05.log'
to '/oracle/oradata/orcl/redo06.log';
这里如果数据库是当前被使用的,无法改名;如果redo06.log文件不存在,数据库无法获得其信息,无法改名,数据库文件如果已经存在在数据库中,无法改名(可以先创建号固定大小的数据库文件改名)
8, 删除新增的group 4 SQL> alter database drop logfile group 4;
9,删除新增的group 1的logfile; SQL> alter database drop logfile member '/oracle/oradata/orcl/redo06.log';
10,清空logfile: SQL> alter database clear logfile '/oracle/oradata/orcl/redo01.log'
SQL> select group#,sequence#,bytes,members,status from v$log;
GROUP# SEQUENCE# BYTES MEMBERS STATUS ---------- ---------- ---------- ---------- ---------------- 1 0 52428800 1 UNUSED 2 220 52428800 1 CURRENT 3 218 52428800 1 INACTIVE #########################################################################################
查询归档日志文件状态:
select group#,status,type,member,IS_RECOVERY_DEST_FILE from v$logfile;
查询归档日志文件所在目录和文件名 select group#,status,type,member,IS_RECOVERY_DEST_FILE from v$logfile;
如何查看归档日志路径?
SQL> show parameter RECOVERY; 显示归档日志信息.
Col name format a40
Select name, sequence#, first_change# FROM v$archived_log;
Name用于表示归档日志文件名,sequence#用于表示归档日志对应的日志序列号,firs_change#用于标识归档日志的起始SCN值.
5 初始参数文件
理解oracle10g的初始化参数文件 当oracle实例启动时,它从一个初始化参数文件中读取初始化参数。这个初始化参数文件可以是一个只读的文本文件,或者是可以读/写的二进制文件。这个二进制文件被称作服务器参数文件(sever parameter file),它总是存储在服务器上。使用服务器参数文件,可以使得管理员用alter system命令对数据库所作的改变保存起来,即使重新启动数据库,改变也不会丢失。因此Oracle建议用户使用服务器参数文件。可以通过编辑过的文本初始化文件,或者使用DBCA来创建服务器参数文件。 在你创建服务器参数文件之前,你可以使用文本初始化参数文件启动数据库。在数据库启动时,ORACLE实例首先在默认位置查找服务器参数文件,如果没找到,接着找文本初始化参数文件。你也可以使用 STARTUP 命令的相关参数指定一个文本文件来启动数据库,此时服务器参数文件并不起作用。
默认的初始化参数文件名和默认路径 平台 默认名称 默认路径 Windows init%ORACLE_SID%.ora %ORACLE_HOME%database
初始化参数文件模板(unix平台) control_files = (/u0d/lcg03/control.001.dbf, /u0d/lcg03/control.002.dbf, /u0d/lcg03/control.003.dbf) db_name = lcg03 db_domain = us.oracle.com log_archive_dest_1 = "LOCATION=/net/fstlcg03/private/yaliu/testlog/log.lcg03.fstlcg03/lcg03/arch" log_archive_dest_state_1 = enable db_block_size = 8192 pga_aggregate_target = 2500M processes = 1000 sessions = 1200 open_cursors = 1024 undo_management = AUTO shared_servers = 3 remote_listener = tnsfstlcg03 undo_tablespace = smu_nd1 compatible = 10.2.0 sga_target = 1500M nls_language = AMERICAN nls_territory = AMERICA db_recovery_file_dest = /net/fstlcg03/private/yaliu/testlog/log.lcg03.fstlcg03/lcg03/arch db_recovery_file_dest_size = 100G
oracle数据库提供了普遍使用的初始化参数模板,你可以通过此模版,或者通过dbca创建你自己的初始化参数文件。你可以根据你的数据库的需要编辑模板参数文件,修改或添加你自己的参数值,对于没有出现在该文件中的参数,oracle使用默认值。 如果你第一次创建oracle数据库,oracle 建议对初始化参数不要改变太多。当你熟悉了数据库和计算机环境后,可以使用alter system命令动态调整很多初始化参数。如果你使用文本初始化参数文件,你所作的改变只会影响当前的实例,重新启动后会恢复为文本初始化参数文件中设置的值。要使改变永久有效,还要手动更新文本初始化参数文件中的相应值。如果你使用服务器参数文件,alter system 命令可以影响当前实例并同时更新服务器初始化文件,使得改变永久有效。 以下介绍一些基本的初始化参数: 确定全局数据库名称 指定快速恢复区(Flash Recovery Area) 指定控制文件 指定数据块大小(Database block sizes) 管理系统全局区 指定最大进程数 指定回滚空间的管理方法 兼容性初始化参数和不能取消的兼容功能 设置许可(License)参数 确定全局数据库名称 全局数据库名称包含用户指定的本地数据库名和数据库所在的网络地址。DB_NAME初始化参数决定了本地名称,DB_DOMAIN指定了网络地址。这两个地址组成了数据库在网络上是唯一名称。 比如,我们要创建一个名为test.us.acme.com的数据库,参数值如下 DB_NAME=test DB_DOMAIN=us.acme.com 你可以使用ALTER DATABASE RENAME GLOBAL_NAME 命令重新命名全局数据库名。不过在第一次改变db_name和db_domain之后,你必须重新启动数据库并且重新建立控制文件。 DB_NAME初始化参数 DB_NAME必须为不大于八个字符的文本字符串。在创建数据库的过程中,DB_NAME中存储的数据库值会被记录在数据文件、重做日志文件,和控制文件中。如果再数据库实例启动时,参数文件中的DB_NAME值和控制文件中保存的值不一致会导致数据库启动失败。 DB_DOMAIN初始化参数 DB_DOMAIN是表示数据库所在的网络地址的文本字符窜。通常是拥有数据库的组织的域名。如果你将要建立的数据库是分布式数据库系统的一部分,一定要小心伺候这个参数。 指定快速恢复区 快速恢复区是oracle可以存储和管理数据恢复相关文件的区域,它和数据库区域是不同的,数据库区域是指oracle管理当前数据库文件的目录(包含数据文件,控制文件,在现重做日志) 你可以使用下面的初始化参数指定快速恢复区域 DB_RECOVERY_FILE_DEST :快速恢复区的位置。可以是目录,文件系统,或者自动存储管理硬盘组(ASM)。不能是原始文件系统(raw file system) 在RAC(Real Application Clusters)环境中,这个位置必须在cluster文件系统上,ASM硬盘组,或者通过NFS建立的共享目录上。 DB_RECOVERY_FILE_DEST_SIZE :指定了快速恢复区可以使用的最大字节数,这个参数必须要在DB_RECOVERY_FILE_DEST参数得到应用前指定。 在RAC环境中,这两个参数值必须在所有的实例中设置相同的值。 如果你已经设置了LOG_ARCHIVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST的值的话,上面提到的参数值不会起作用的。你必须禁用LOG_ARCHIVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST后才能设置快速恢复区。作为替代,你可以配置LOG_ARCHIVE_DEST_n 的值。如果你没有为本地设置LOG_ARCHIVE_DEST_n 的值,那么设置快速恢复区将会把LOG_ARCHIVE_DEST_10设置为快速恢复区。 Oracle建议使用快速恢复区,它可以简化恢复操作。
指定控制文件 参数CONTROL_FILES指定一个或多个控制文件,当你创建数据库时,在该参数中指定的控制文件会被创建。 如果没有设置该参数,oracle会帮你创建一个控制文件,或者如果你启用了oracle_managed files,将会创建oracle管理的控制文件。 如果你想让数据库在创建控制文件的时候创建另外的文件作为备份,那么CONTROL_FILES参数中指定的文件列表中不能包含系统中已经存在的文件。如果你想让数据库重新使用已经存在的文件,或者覆盖已有的文件,必须设置重新使用选项(警告,如果你选择重新使用选项,则已存在的文件中的内容会被覆盖) Oracle强烈建议每个数据库使用至少两个控制文件,存储在不同的物理硬盘上 指定数据库块大小 DB_BLOCK_SIZE 初始化参数指定了标准的数据块大小。这个块大小被用于SYSTEM表空间,并且默认情况下也被用于其它的表空间。Oracle数据库可以支持最多四个额外的非标准块大小。 DB_BLOCK_SIZE 标准块大小应该设为最普通的值,在很多情况下,你只需要设置这一个参数。比如4k或8k。如果你没有设置这个参数,默认大小是根据操作系统决定的,通常这就足够了。创建数据库之后这个参数值就不能更改了,除非重新创建数据库。如果数据库块大小不同于操作系统的块大小,请确保数据库块大小是操作系统块大小的倍数。比如,如果操作系统块大小是2k(2048字节),那么以下的参数值是有效的 DB_BLOCK_SIZE=4096 更大的块大小可以提供更有效的I/O操作。因此,在下面条件成立的情况下最好指定大于操作系统块大小的数据库块 1,数据库在大型计算机系统上,拥有超大内存和超快硬盘。比如大型主机拥有巨大的硬件资源,通常设置4k或更大的块。 2,操作系统的块大小太小。比如1k,如果数据库使用这么小的块,数据库会忙于进行大量的I/O操作。 非标准的块大小 创建新的表空间时,可以指定非标准的块大小(不同于system表空间的块大小)。这些块大小可以使用任何2的密次方的值,比如2k,4k,8k,16k,32k等。最小值根据操作系统的限制有所不同,所以以上的值在某些系统中不能使用。 要使用非标准的块,必须在SGA中为不同的非标准块配置缓存,配置方法稍后介绍。 在移动数据库的时候这个非标准块的功能会特别有用。比如,你可以从OLAP环境下转移一个4k块大小的表空间到使用8k作为标准块大小的数据仓库中。
更多参考:http://blog.sina.com.cn/s/blog_6a7217e80100kb3j.html
6 概要文件
Oracle系统为了合理分配和使用系统的资源提出了概要文件的概念。所谓概要文件,就是一份描述如何使用系统的资源(主要是CPU资源)的配置文件。将概要文件赋予某个数据库用户,在用户连接并访问数据库服务器时,系统就按照概要文件给他分配资源。
通过数据字典查看缺省资源配置内容: select * from dba_profiles order by profile;
在有的书中将其翻译为配置文件,其作用包括。
1、管理数据库系统资源。利用Profile来分配资源限额,必须把初始化参数resource_limit设置为true。ALTER SYSTEM SET resource_limit=TRUE SCOPE=BOTH;
2、管理数据库口令及验证方式。默认给用户分配的是DEFAULT概要文件,将该文件赋予了每个创建的用户。但该文件对资源没有任何限制,因此管理员常常需要根据自己数据库系统的环境自行建立概要文件。
PROFILE的管理(资源文件)当需要设置资源限制时,必须设置数据库系统启动参数RESOURCE_LIMIT,此参数默认值为FALSE 可以使用如下命令来启动当前资源限制: alter system set RESOURCE_LIMIT=true; 当需要以后启动时也启动限制,必须在init<SID>.ora中设置 RESOURCE_LIMIT=true 一、PROFILE的管理内容:(内核资源参数,口令资源参数) 1、CPU的时间 2、I/O的使用 3、IDLE TIME(空闲时间) 4、CONNECT TIME(连接时间) 5、并发会话数量 6、口令机制:
二、DEFAULT PROFILE: 1、所有的用户创建时都会被指定这个PROFILE 2、DEFAULT PROFILE的内容为空,无限制
三、PROFILE的划分: If a user attempts to perform an operation that exceeds the limit for other session resources, Oracle aborts the operation, rolls back the current statement, and immediately returns an error. The user can then commit or roll back the current transaction, and must then end the session. that exceeds the limit(超过限制) for other session resources(范围之外的其他资源) 被理解为:连接控制资源范围之外的其他资源。 当一个用户试图操作超过限制的资源时,Oracle终止当前操作,取消正在执行的处理,并且返回一个错误,用户可以提交或回滚当前事物,之后必须断开会话。 如果一个用户试图操作一个超出他限制的资源,Oracle将放弃这个操作,取消正在执行的处理,并立即返回一个错误。这个用户然后提交或回滚当前的处理,之后必须终止这个会话。 如果是调用限制时,Oracle终止当前操作,取消正在执行的处理,并且返回一个错误,回滚整个事务。 1、CALL级LIMITE: 对象是:语句: 当该语句资源使用溢出时: A、该语句终止 B、事物回退 C、SESSION连接保持
2、SESSION级LIMITE: 对象是:整个会话过程 溢出时:连接终止
四、如何管理一个PROFILE 1、CREATE PROFILE 2、分配给一个用户 3、象开关一样打开限制。
五、如何创建一个PROFILE: 1、命令: CREATE PROFILE 名称 LIMIT SESSION_PER_USER 2 CPU_PER_SESSION 1000 IDLE_TIME 60 用户在数据库终止前,可以让连接空闲多长时间(分钟) CONNECT_TIME 480 六、限制参数: 0、UNLIMITED 取消资源限制 DEFAULT 缺剩资源限制,即使用default资源限制
1、CONNECT_TIME :一个连接会话的最长连接时间(分钟) 当用户会话时间超过CONNECT_TIME指定的时间,Oracle将回滚当前事务,并且结束他的会话
2、SESSIONS_PER_USER:一个用户允许同时(并发)会话的总数,超过后系统禁止该用户的后续会话,并返回错误:ORA-02391 exceeded simultaneous SESSIONS_PER_USER limit
3、SESSION级LIMITE: CPU_PER_SESSION:定义了一个SESSION占用的CPU的时间(1/100 秒),当达到这个限制用户不能在此会话中执行任何操作,此时必须先断开连接,再连接才行。 CPU_PER_CALL :限制每次调用SQL语句期间(parse、execute、fetch)可用的CPU时间总量,单位是百分之一秒。达到限制时 语句以报错结束。不同于CPU_PER_SESSION的是,没达到CPU_PER_SESSION限制,还可以进行新的查询。 4、LOGICAL_READS_PER_SESSION: 一个会话允许读写的逻辑块的数量限制 5、CALL级LIMITE CPU_PER_CALL:每个语句占用的CPU时间 LOGICAL_READS_PER_CALL:一次调用的SQL期间,允许读数据库块数限制 6、PRIVATE_SGA:一个会话允许分配的最大SGA大小,使用K/M定义 COMPOSITE_LIMIT:一个会话的资源成本限制,CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION, and PRIVATE_SGA 七、分配给一个用户: CREATE USER 用户名 PROFILE 概要文件名 ALTER USER 用户名 PROFILE 概要文件名
八、打开资源限制: 1、RESOURCE_LIMT:资源文件中含有 2、ALTER SYSTEM SET RESOURCE_LIMIT=TRUE; 3、默认不打开
九、修改PROFIE的内容: 1、ALTER PROFILE 名称参数 新值 2、对于当前连接修改不生效。
DROP一个PROFILE 1、DROP PROFILE 概要文件名 删除一个新的尚未分配给用户的PROFILE, 2、DROP PROFILE 概要文件名 CASCADE 3、注意事项 A、一旦PROFILE被删除,用户被自动加载DEFAULT PROFILE B、对于当前连接无影响 C、DEFAULT PROFILE不可以被删除
十、信息获取: 1、DBA_USERS: 用户名,PROFILE 2、DBA_PROFILES: PROFILE及各种限制参数的值 每个用户的限制:PROFILE(关键字段)
十一、PROFILE的口令机制限制 1、限制内容 A、限制连续多少次登录失败,用户被加锁 B、限制口令的生命周期 C、限制口令的使用间隔
D、限制口令到期更改提示时间 2、限制生效的前提: A、RESOURCE_LIMIT:=TRUE B、ORACLERDBMSADMINUTLPWDMG.SQL 3、如何创建口令机制: CREATE PROFILE 名称
SESSIONS_PER_USER ..... password_life_time 30 failed_log_attempts 3 password_reuse_time 3 4、口令资源参数的含义: A、FAILED_LOGIN_ATTEMPTS :当连续登陆失败次数达到该参数指定值时,用户被加锁; 经过DBA解锁(或PASSWORD_LOCK_TIME天)后可继续使用 B、PASSWORD_LIFE_TIME :口令的有效期(天),默认为UNLIMITED C、PASSWORD_LOCK_TIME :帐户因FAILED_LOGIN_ATTEMPTS锁定时,加锁天数 D、PASSWORD_GRACE_TIME :口令修改的宽限期(天) E、PASSWORD_REUSE_TIME :口令被修改后原有口令隔多少天被重新使用,默认为UNLIMITED F、PASSWORD_REUSE_MAX :口令被修改后原有口令被修改多少次才允许被重新使用。 G、PASSWORD_VERIFY_FUNCTION:口令效验函数
7 密码文件 在Oracle数据库系统中,用户如果要以特权用户身份(INTERNAL/SYSDBA/SYSOPER)登录Oracle数据库可以有两种身份验证的方法:即使用与操作系统集成的身份验证或使用Oracle数据库的密码文件进行身份验证
一、密码文件的创建:
在使用Oracle Instance Manager创建一数据库实例的时侯,在ORACLE_HOME\DATABASE目录下还自动创建了一个与之对应的密码文件,文件名为PWDSID.ORA,其中SID代表相应的Oracle数据库系统标识符。此密码文件是进行初始数据库管理工作的基矗在此之后,管理员也可以根据需要,使用工具ORAPWD.EXE手工创建密码文件,命令格式如下:
C:\ >ORAPWDFILE=< FILENAME >PASSWORD =< PASSWORD > ENTRIES=< MAX_USERS >
各命令参数的含义为:
FILENAME:密码文件名;
PASSWORD:设置INTERNAL/SYS帐号的口令;
MAX_USERS:密码文件中可以存放的最大用户数,对应于允许以SYSDBA/SYSOPER权限登录数据库的最大用户数。由于在以后的维护中,若用户数超出了此限制,则需要重建密码文件,所以此参数可以根据需要设置得大一些。
有了密码文件之后,需要设置初始化参数REMOTE_LOGIN_PASSWORDFILE来控制密码文件的使用状态。
二、设置初始化参数 REMOTE_LOGIN_PASSWORDFILE :
在Oracle数据库实例的初始化参数文件中,此参数控制着密码文件的使用及其状态。它可以有以下几个选项:
NONE:指示Oracle系统不使用密码文件,特权用户的登录通过操作系统进行身份验证;
EXCLUSIVE:指示只有一个数据库实例可以使用此密码文件。只有在此设置下的密码文件可以包含有除INTERNAL/SYS以外的用户信息,即允许将系统权限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户。
SHARED:指示可有多个数据库实例可以使用此密码文件。在此设置下只有INTERNAL
/SYS帐号能被密码文件识别,即使文件中存有其他用户的信息,也不允许他们以SYSOPER/SYSDBA的权限登录。此设置为缺省值。
在REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVE、SHARED情况下,Oracle系统搜索密码文件的次序为:在系统注册库中查找 ORA_SID_PWFILE 参数值(它为密码文件的全路径名);若未找到,则查找 ORA_PWFILE 参数值;若仍未找到,则使用缺省值 ORACLE_HOME\DATABASE\PWDSID.ORA;其中的SID代表相应的Oracle数据库系统标识符。
三、向密码文件中增加、删除用户:
当初始化参数REMOTE_LOGIN_PASSWORDFILE设置为EXCLUSIVE时,系统允许除INTERNAL/SYS以外的其他用户以管理员身份从远端或本机登录到Oracle数据库系统,执行数据库管理工作;这些用户名必须存在于密码文件中,系统才能识别他们。由于不管是在创建数据库实例时自动创建的密码文件,还是使用工具ORAPWD.EXE手工创建的密码文件,都只包含INTERNAL/SYS用户的信息;为此,在实际操作中,可能需要向密码文件添加或删除其他用户帐号。
由于仅被授予SYSOPER/SYSDBA系统权限的用户才存在于密码文件中,所以当向某一用户授予或收回SYSOPER/SYSDBA系统权限时,他们的帐号也将相应地被加入到密码文件或从密码文件中删除。由此,向密码文件中增加或删除某一用户,实际上也就是对某一用户授予或收回SYSOPER/SYSDBA系统权限。
要进行此项授权操作,需使用SYSDBA权限(或INTERNAL帐号)连入数据库,且初始化参数REMOTE_LOGIN_PASSWORDFILE的设置必须为EXCLUSIVE。具体操作步骤如下:
1.创建相应的密码文件;
2.设置初始化参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;
3.使用SYSDBA权限登录:CONNECT SYS/internal_user_passsword AS SYSDBA;
4.启动数据库实例并打开数据库;
5.创建相应用户帐号,对其授权(包括SYSOPER和SYSDBA):
授予权限:GRANT SYSDBA TO user_name;
6.收回权限:REVOKE SYSDBA FROM user_name;
现在这些用户可以以管理员身份登录数据库系统了;
四、使用密码文件登录:
有了密码文件后,用户就可以使用密码文件以SYSOPER/SYSDBA权限登录Oracle数据库实例了,注意初始化参数REMOTE_LOGIN_PASSWORDFILE应设置为EXCLUSIVE或SHARED。任何用户以SYSOPER/SYSDBA的权限登录后,将位于SYS用户的Schema之下,以下为两个登录的例子:
1. 以管理员身份登录:
假设用户scott已被授予SYSDBA权限,则他可以使用以下命令登录:
CONNECT scott/tiger AS SYSDBA
2. 以INTERNAL身份登录:
CONNECT INTERNAL/INTERNAL_PASSWORD
五、密码文件的维护:
1. 查看密码文件中的成员:
可以通过查询视图V$PWFILE_USERS来获取拥有SYSOPER/SYSDBA系统权限的用户的信息,表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用户是否拥有相应的权限。这些用户也就是相应地存在于密码文件中的成员。
2. 扩展密码文件的用户数量:
当向密码文件添加的帐号数目超过创建密码文件时所定的限制(即ORAPWD.EXE工具的MAX_USERS参数)时,为扩展密码文件的用户数限制,需重建密码文件,具体步骤如下:
a) 查询视图V$PWFILE_USERS,记录下拥有SYSOPER/SYSDBA系统权限的用户信息;
b) 关闭数据库;
c) 删除密码文件;
d) 用ORAPWD.EXE新建一密码文件;
e) 将步骤a中获取的用户添加到密码文件中。
3. 修改密码文件的状态:
密码文件的状态信息存放于此文件中,当它被创建时,它的缺省状态为SHARED。可以通过改变初始化参数REMOTE_LOGIN_PASSWORDFILE的设置改变密码文件的状态。当启动数据库事例时,Oracle系统从初始化参数文件中读取REMOTE_LOGIN_PASSWORDFILE参数的设置;当加载数据库时,系统将此参数与口令文件的状态进行比较,如果不同,则更新密码文件的状态。若计划允许从多台客户机上启动数据库实例,由于各客户机上必须有初始化参数文件,所以应确保各客户机上的初始化参数文件的一致性,以避免意外地改变了密码文件的状态,造成数据库登陆的失败。
4. 修改密码文件的存储位置:
密码文件的存放位置可以根据需要进行移动,但作此修改后,应相应修改系统注册库有关指向密码文件存放位置的参数或环境变量的设置。
5. 删除密码文件:
在删除密码文件前,应确保当前运行的各数据库实例的初始化参数REMOTE_LOGIN_PASSWORDFILE皆设置为NONE。在删除密码文件后,若想要以管理员身份连入数据库的话,则必须使用操作系统验证的方法进行登录。