Oracle11g温习-第一章 2、ORACLE 物理结构
2013年4月27日 星期六
10:26
物理操作系统文件的集合。主要包括:
- 控制文件(参数文件init$ORACLE_SID.ora记录了控制文件的位置)
二进制文件,控制文件由参数control_files指定,格式如下:control_files=("home/app/.../control01.ctl","home/app/.../control02.ctl") 。
要对控制文件进行镜象,手工镜像步骤如下:
a.shutdown immediate; b.cp old_controlfile.ctl new_controlfile.ctl c.修改参数文件,新增控制文件位置 d.startup |
控制文件包括信息:
数据库的名字,检查点信息,数据库创建的时间戳,所有的数据文件,联机日志文件,归档日志文件信息,备份信息等。
鉴于控制文件的重要性,一般采用多个镜相复制来保护控制文件,或采用RAID来保护控制文件。控制文件信息可以从V$Controlfile中查询获得。
【新增/移动一个数据库控制文件】
SYS @ prod > select name from v$controlfile;
NAME
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/prod/control01.ctl
/u01/app/oracle/oradata/prod/control02.ctl
/u01/app/oracle/oradata/prod/control03.ctl
SYS @ PROD >create pfile from spfile;
File created.
SYS @ PROD >shutdown immediate;
[oracle @ redhat prod]$ cp control03.ctl control04.ctl 更改为控制文件4
[oracle @ redhat prod]$ mv control03.ctl ../controlbak.ctl 备份
[oracle @ redhat prod]$ vi $ORRACLE_HOME/dbs/init$ORACLE_SID.ora 修改参数新增控制文件信息.
......
SYS @ PROD >startup pfile='$ORACLE_HOME/dbs/init$ORACLE_SID.ora'; 测试pfile 文件可用性.
SYS @ PROD >select name from v$controlfile;
NAME
--------------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora10/control01.ctl
/u01/app/oracle/oradata/ora10/control02.ctl
/u01/app/oracle/oradata/ora10/control04.ctl
SYS @ PROD >create spfile from pfile; 重新生成 spfile 文件
【所有控制文件被破坏的恢复】
备份当前控制文件
SYS @ PROD > alter database backup controlfile to trace;
Database altered.
SYS @ PROD >startup ;
启动失败
SYS @ PROD >startup nomount ;
SYS @ PROD >alter system set control_files ='/u01/app/oracle/oradata/ora10/netcontrolfile01', '/u01/app/oracle/oradata/ora10/netcontrolfile02' scope=spfile;
SYS @ PROD > shutdown immediate ;
重启生效
SYS @ PROD >startup nomount;
ORACLE instance started.
SYS @ PROD >select value from v$parameter where name= 'control_files'; 查看新设定的控制文件
VALUE
----------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora10/netcontrolfile01,/u01/app/oracle/oradata/ora10/netcontrolfile02
(重建控制文件 可从跟踪文件中获得,前提alter database backup......)
SYS @ PROD >create controlfile database ora10 noresetlogs
logfile
group1'/u01/app/oracle/oradata/ora10/redo01.log',
group2'/u01/app/oracle/oradata/ora10/redo02.log',
group3'/u01/app/oracle/oradata/ora10/redo03.log'
datafile
'/u01/app/oracle/oradata/ora10/sysaux01.dbf',
'/u01/app/oracle/oradata/ora10/system01.dbf',
'/u01/app/oracle/oradata/ora10/undotbs01.dbf',
'/u01/app/oracle/oradata/ora10/users01.dbf',
'/u01/app/oracle/oradata/ora10/example01.dbf'
characterset zhs 16gbk;
Controlfile created.
SYS @ PROD >alter database open;
Database altered.
SYS @ PROD >alter tablespace temp tempfile ‘/u01/app/oracle/oradata/ora10/temp.dbf’ size 24125440 Reuse autoextend off; (以避免排序报错,reuse指重用原临时文件)
Tablespace altered.
SYS @ PROD >hostls –l /u01/app/oracle/oradata/ora10/ne* (控制文件已生成)
-rw-r-----1 oracle oinstall 6078464 Mar 31 14:50
/u01/app/oracle/oradata/ora10/netcontrolfile02
-rw-r-----1 oracle oinstall 6078464 Mar 31 14:50
/u01/app/oracle/oradata/ora10/netcontrolfile01
- 数据文件(数据文件的详细信息记在控制文件中)
·每个oracle数据库必须至少有一个数据文件,用于存放数据库数据。多个数据文件应分放在不同的disk上以提高存取速度
1.主要分类: system01.dbf:记录系统运行信息,包含所有数据库字典,PL/SQL程序代码及其他系统信息 undotbs01.dbf:存放回退信息,即DML操作后的旧数据信息 sysaux01.dbf:system文件的辅助文件,存放支持oracle系统活动的多种工具如logminer users01.dbf:新建用户未指定存储空间是,默认数据存放在该文件中 example01.dbf:存放示例数据信息。 |
2.查看数据库数据文件
·查看数据文件及大小
SYS @ PROD >select file_name,tablespace_name,bytes/1024/1024,status from dba_data_files
FILE_NAME TABLESPACE_NAME BYTES/1024/1024 STATUS
-------------------------------------------------- ------------------------------ --------------- ---------
/u01/app/oracle/oradata/cuug/users01.dbf USERS 5 AVAILABLE
/u01/app/oracle/oradata/cuug/sysaux01.dbf SYSAUX 240 AVAILABLE
/u01/app/oracle/oradata/cuug/undotbs01.dbf UNDOTBS1 25 AVAILABLE
/u01/app/oracle/oradata/cuug/system01.dbf SYSTEM 480 AVAILABLE
SYS @ PROD >hostls –l /u01/app/oracle/oradata/cuug/*.dbf
- 修改数据库的数据文件
【移动/改名一个数据文件】
SYS @ PROD >shutdown immediate
[oracle@prod prod]$ mv users01.dbf users02.dbf
SYS @ prod >alter database rename file '/u01/app/oracle/oradata/prod/users01.dbf' to '/u01/app/oracle/oradata/prod/users02.dbf';
Database altered.
SYS @ PROD >alter database open;
Database altered.
SYS @ PROD >select name,status from v$datafile;
NAME STATUS
-------------------------------------------------- -------
/u01/app/oracle/oradata/cuug/system01.dbf SYSTEM
/u01/app/oracle/oradata/cuug/undotbs01.dbf ONLINE
/u01/app/oracle/oradata/cuug/sysaux01.dbf ONLINE
/u01/app/oracle/oradata/cuug/users01.dbf ONLINE
【数据文件的扩大和缩小】
SYS @ PROD >create tablespace test datafile'/u01/app/oracle/oradata/prod/test01.dbf' size 5M; 新建表空间及其所包含的数据文件
Tablespace created.
SYS @ prod >host ls -l /u01/app/oracle/oradata/prod/test01.dbf
-rw-r----- 1 oracle oinstall 5251072 Jan 15 07:33 /u01/app/oracle/oradata/prod/test01.dbf
SYS @ prod >alter database datafile '/u01/app/oracle/oradata/prod/test01.dbf' autoextend on;
Database altered. 设置数据文件自动扩充
SYS @ prod >select autoextensible from dba_data_files Where file_name='/u01/app/oracle/oradata/prod/test01.dbf';
autoextensible
---
YES 查看文件自动扩展标志
SYS @ prod >alter database datafile '/u01/app/oracle/oradata/prod/test01.dbf' resize 10M;
Database altered. 手工扩充数据文件大小
SYS @ prod >host ls -l /u01/app/oracle/oradata/prod/test01.dbf
-rw-r----- 1 oracle oinstall 10493952 Jan 15 07:40 /u01/app/oracle/oradata/prod/test01.dbf
手工缩减数据文件大小
SYS @ prod >alter database datafile '/u01/app/oracle/oradata/prod/test01.dbf' resize 7m;
Database altered.
SYS @ prod >host ls -l /u01/app/oracle/oradata/prod/test01.dbf
-rw-r----- 1 oracle oinstall 7348224 Jan 15 07:41 /u01/app/oracle/oradata/prod/test01.dbf
4.数据文件的添加和删除
A【添加数据文件到表空间】
SYS @ prod >alter tablespace test add datafile '/u01/app/oracle/oradata/prod/test02.dbf' size 5m;
Tablespace altered.
B【删除表空间中的所有数据文件】
SYS @ PROD >select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------- ------------------------------
/u01/app/oracle/oradata/prod/system01.dbf SYSTEM
/u01/app/oracle/oradata/prod/undotbs01.dbf UNDOTBS1
/u01/app/oracle/oradata/prod/sysaux01.dbf SYSAUX
/u01/app/oracle/oradata/prod/users01.dbf USERS
/u01/app/oracle/oradata/prod/test01.dbf TEST
查询想要删除的数据文件对应的表空间,是否包含多个数据文件
SYS @ PROD >drop tablespace test including contents;直接删除表空间 及表空间下的对象
SYS @ PROD >host rm –rf /u01/app/oracle/oradata/prod/test*.dbf 删除数据文件
c 【删除表空间中的部分数据文件】
SYS @ prod >alter database datafile '/u01/app/oracle/oradata/prod/test02.dbf' offline drop;
Database altered.
若表空间中包含多个数据文件,且部分数据文件不能删掉,则想要删掉数据文件 先进行脱机处理
<特别警告!!!>此处drop不意味着该数据文件在数据库中已经删除,此时若在OS中直接删除该数据文件,则数据库将面临崩溃。
SYS @ prod >select file_name,tablespace_name,online_status from dba_data_files;
FILE_NAME TABLESPACE_NAME ONLINE_
-------------------------------------------------- ------------------------------ -------
/u01/app/oracle/oradata/prod/system01.dbf SYSTEM SYSTEM
/u01/app/oracle/oradata/prod/undotbs01.dbf UNDOTBS1 ONLINE
/u01/app/oracle/oradata/prod/sysaux01.dbf SYSAUX ONLINE
/u01/app/oracle/oradata/prod/users01.dbf USERS ONLINE
/u01/app/oracle/oradata/prod/test01.dbf TEST ONLINE
/u01/app/oracle/oradata/prod/test02.dbf TEST RECOVER
数据文件仍然存在(状态recover),故不能直接删除该数据文件,只能通过删除表空间的方法删除表空间中的所有数据文件。
ora10.2可用drop参数删数据文件,但存在限制:
1.表空间中第一个数据文件不能删除;
2.被删除数据文件必须为空;
3.无法删除表空间中的第一个数据文件,除非删除表表空间时 指定 including contents and datafiles 本身。
测试:
SYS @ prod >select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
-------------------------------------------------- ------------------------------
/u01/app/oracle/oradata/prod/system01.dbf SYSTEM
/u01/app/oracle/oradata/prod/undotbs01.dbf UNDOTBS1
/u01/app/oracle/oradata/prod/sysaux01.dbf SYSAUX
/u01/app/oracle/oradata/prod/users01.dbf USERS
/u01/app/oracle/oradata/prod/test01.dbf TEST
/u01/app/oracle/oradata/prod/test02.dbf TEST
创建表空间并加数据文件
SYS @ prod >create tablespace test datafile '/u01/app/oracle/oradata/cuug/test01.dbf' size 5m;
Tablespace created. SYS @ prod >alter tablespace test add datafile '/u01/app/oracle/oradata/cuug/test02.dbf' size 5m;
Tablespace altered.
SYS @ prod >alter tablespace test add datafile '/u01/app/oracle/oradata/prod/test03.dbf ' size 5M;
Tablespace altered. SYS @ prod >alter tablespace test add datafile '/u01/app/oracle/oradata/prod/test04.dbf ' size 5M;
Tablespace altered.
SYS @ prod >alter tablespace test drop datafile '/u01/app/oracle/oradata/prod/test01.dbf '; alter tablespace test drop datafile '/u01/app/oracle/oradata/prod/test01.dbf ' * ERROR at line 1: ORA-01565: error in identifying file '/u01/app/oracle/oradata/prod/test01.dbf ' ORA-03263:cannot drop the first file of tablespace TEST2 删除表空间中第一个数据文件报错,不能进行
必须使用offline drop 方式 删除该数据文件 SYS @ prod >alter database datafile '/u01/app/oracle/oradata/prod/test01.dbf' offline drop ; Database altered.
SYS @ prod >create table mytest( I number) tablespace test;
Table created. 将第一个数据文件离线,再在表空间中建立测试表,则表将被保存在余下的两个数据文件中 SYS @ prod >select substr(owner,1,3), substr(segment_name,1,13), substr(file_id,1,10) from dba_extents where segment_name= 'MYTEST';
substr(owner,1,3) SUBSTR(SEGMENT_NAME,1,13) SUBSTR(FILE_ID,1,10) ------ -------------------------- ------------------------- ------------------------- -------------------- SYS MYTEST 6
SYS @ prod >select substr(file_name,1,50),file_id from dba_data_files where file_id= '6';
SUBSTR(FILE_NAME,1,50) FILE_ID ---------------------------------------------------------------------------------------------------- ---------- /u01/app/oracle/oradata/prod/test02.dbf 6
查看测试表保存在哪个数据文件中,查到该数据文件号再根据文件号查数据文件名
SYS @ PROD >alter tablespace test2 drop datafile '/u01/ app/oracle/oradata/prod/test02.dbf';
Alter tablespace test2 drop datafile'/u01/ app/oracle/oradata/prod/test02.dbf' ERROR at line 1: ORA-03262:the file is non-empty 删除表空间中已分配了空间的数据文件 (非空)报错,不能进行。
SYS @ PROD >alter tablespace test2 drop datafile '/u01/ app/oracle/oradata/prod/test03.dbf'; Tablespace altered. 删除表空间中未分配了空间的数据文件 (为空),允许进行。
扩展 新建数据文件,虽然此时删除数据文件,但是控制文件中还包含有 该数据文件的信息,所以此时 可以重建该数据文件
SYS @ PROD >alter database create datafile '/u01/app/oracle/oradata/cuug/test01.dbf'; Database altered.
SYS @ PROD >select ext.file_id,tab.file_name,ext.owner,ext.bytes/1024/1024 from dba_extents ext,dba_data_files tab where ext.file_id=tab.file_id and ext.file_id=8;
FILE_ID FILE_NAME OWNER EXT.BYTES/1024/1024 ------------------------------- -------------------------------------------------- ----- 8 /u01/app/oracle/oradata/cuug/test04.dbf SYS .0625
新建表 test02 ,指定表空间 test SYS @ cuug >create table test02(n1 date) tablespace test; Table created. 再次查看该表存在哪个数据文件 SYS @ cuug >select ext.file_id,tab.file_name,ext.owner,ext.bytes/1024/1024 from dba_extents ext,dba_data_files tab where ext.file_id=tab.file_id and ext.segment_name='TEST02';
FILE_ID FILE_NAME OWNER EXT.BYTES/1024/1024 ------------------------------- -------------------------------------------------- ----- 6 /u01/app/oracle/oradata/cuug/test02.dbf SYS .0625 |
3、重做日志文件(联机重做日志)
1.存放所有事务日志。
重做日志的两个概念,重做日志组和重做日志组成员。
一个数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。每个日志组中至少有一个日志成员,一个日志组中的多个日志成员是镜相关系,有利于日志文件的保护
联机日志组的交换过程叫做切换。特别注意:日志切换在一个优化效果不好的数据库中会引起临时的“挂起”。挂起大致有两种情况: 在归档情况下,需要归档的日志来不及归档,而联机日志又需要被重新利用 检查点事件还没有完成(日志切换引起检查点),而联机日志需要被重新利用 |
解决这种问题的常用手段是:
i.增加日志组
ii.增大日志文件成员大小
通过v$log可以查看日志组,v$logfile可以查看具体的成员文件。
日志组的状态: current:使用状态,该日志组正在使用中。 active: 激活状态,实例恢复时将需要该日志组。 inactive:非激活状态,实例恢复时不再需要该日志组。 unused:未使用状态,该日志组尚未记录过日志信息(新添加组)。
日志组成员的状态: 空: 该文件是可用/活动的(但不一定是正在使用的,参考v$log) Stale: 表示该文件内容不完全 (系统特殊状态) invalid:表明该文件暂不可访问(新添加镜像) deleted:表明该文件已不再使用 (已删除) |
3.修改重做日志文件
·【添加日志组 (添加重做日志文件个数)】
SYS @ prod >alter database add logfile '/u01/app/oracle/oradata/cuug/redo05a.log' size 5m; Database altered. 其实不指定group 也可以添加日志组。还是建议 明确指定 group
SYS @ prod >alter database add logfile group 4 '/u01/app/oracle/oradata/prod/redo04..log' size 5m; Database altered. 新添加组状态为unused
SYS @ prod >select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- 1 1 58 52428800 1 YES INACTIVE 1202703 15-JAN-13 2 1 59 52428800 1 NO CURRENT 1245850 15-JAN-13 3 1 57 52428800 1 YES INACTIVE 1181034 15-JAN-13 4 1 0 5242880 1 YES UNUSED 0 0 |
·【添加日志组成员(添加镜像文件)】
SYS @ prod >alter database add logfile member '/u01/app/oracle/oradata/prod/redo04.log' to group 4; Database altered.
SYS @ prod >select group#,status,type,substr(member,1,40) from v$logfile;
GROUP# STATUS TYPE SUBSTR(MEMBER,1,40) ---------- ------- ------- -------------------------------------------------------------------------------- 1 STALE ONLINE /u01/app/oracle/oradata/prod/redo01.log 2 ONLINE /u01/app/oracle/oradata/prod/redo02.log 3 ONLINE /u01/app/oracle/oradata/prod/redo03.log 4 ONLINE /u01/app/oracle/oradata/prod/redo04..log 4 INVALID ONLINE /u01/app/oracle/oradata/prod/redo04.log 4 INVALID ONLINE /u01/app/oracle/oradata/prod/redo04b.log |
SYS @ PROD >alter system switch logfile;
SYS @ prod > select group#,status,type,substr(member,1,40) from v$logfile;
GROUP# STATUS TYPE SUBSTR(MEMBER,1,40)
---------- ------- ------- --------------------------------------------------------------------------------
1 ONLINE /u01/app/oracle/oradata/prod/redo01.log
2 ONLINE /u01/app/oracle/oradata/prod/redo02.log
3 ONLINE /u01/app/oracle/oradata/prod/redo03.log
4 ONLINE /u01/app/oracle/oradata/prod/redo04..log
4 ONLINE /u01/app/oracle/oradata/prod/redo04.log
4 ONLINE /u01/app/oracle/oradata/prod/redo04b.log
·【删除日志组 (消减重做日志文件个数)】
SYS @ prod >alter database drop logfile group 4; Database altered.
inactive和unused状态的日志组才能删除,current和active状态的日志组不能删除,要删除 current状态的日志组,应先用logswitch将current状态的日志组转换为active状态,而要删 除active状态的日志组,则需用checkpoint将其转换为inactive状态,才能删除。 |
·【删除日志组成员(删除镜像文件)】
SYS @ prod >alter database drop logfile member '/u01/app/oracle/oradata/cuug/redo04b.log'; Database altered.
日志组最后一个日志成员不能被删除; current日志组中任何成员都不能删除; 其他情况下不能删组成员时,可用logswitch将日志组状态进行转换后才能删除。 |
·
【移动或重命名日志文件】
SYS @ PROD >shutdown immediate SYS @ PROD >host mv /u01/app/oracle/oradtata/ora10/*.log /u01/app SYS @ PROD >startup mount SYS @ PROD >alter database rename file '/u01/app/oracle/oradata/ora10/redo01.log', '/u01/app/oracle/oradata/ora10/redo02.log', '/u01/app/oracle/oradata/ora10/redo03.log', '/u01/app/oracle/oradata/ora10/redo04.log' to '/u01/app/redo01.log', '/u01/app/redo02.log', '/u01/app/redo03.log', '/u01/app/redo04.log'; Database altered.
SYS @ PROD >alter database open; Database altered.
SYS @ PROD > select group#,status,type,substr(member,1,40) from v$logfile; GROUP# STATUS TYPE SUBSTR(MEMBER,1,40) -------------------------------------------------------------- 3 ONLINE /u01/app/redo03.log 2 ONLINE /u01/app/redo02.log 1 ONLINE /u01/app/redo01.log 4 ONLINE /u01/app/redo04.log 2 ONLINE /u01/app/oracle/oradata/redo02.log 3 ONLINE /u01/app/oracle/oradata/redo03.log 4 ONLINE /u01/app/oracle/oradata/redo04.log |
1归档日志文件
重做日志文件的截断备份 Oracle运行的两种模式:归档模式和不归档模式。 1. 启用/禁用归档模式 SYS @ PROD >archive log list; 查询归档模式 SYS @ PROD >shutdown immediate SYS @ PROD >startup mount SYS @ PROD >alter database archivelog; SYS @ PROD >alter database open; SYS @ PROD >archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 38 Next log sequence to archive 40 Current log sequence 40
oracle10g 前需该参数log_archive_start为true,并重启生效,已启动自动归档功能,ora10中该 参数停用,启用归档模式后数据库自动处于自动归档状态。 SYS @ PROD >show parameter log_archive_start; 无需更改
NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_start boolean FALSE |
2.配置归档日志文件位置
SYS @ PROD >archive log list; SYS @ PROD >show parameter db_recovery_file_dest; 查看归档文件位置 NAME TYPE VALUE ----------------------------------------------------------------------------- db_recovery_file_dest string /u01/app/oracle/flash_recovery _area db_recovery_file_dest_size big integer 2G
SYS @ prod >alter system set log_archive_dest=' location=/u01/app/oracle/oradata/prod/arch' scope=both; alter system set log_archive_dest='/u01/app/oracle/oradata/prod/arch' scope=both * ERROR at line 1: ORA-02097: parameter cannot be modified because specified value is invalid ORA-16018: cannot use LOG_ARCHIVE_DEST with LOG_ARCHIVE_DEST_n or DB_RECOVERY_FILE_DEST 修改归档文件报错
SYS @ prod >alter system set log_archive_dest_1='location=/u01/app/oracle/oradata/prod/arch' scope=both ; System altered. 应先将该参数设为空
再次修改成功 SYS @ PROD >show parameter log_archive_dest; 再查归档文件位置 SYS @ PROD >host ls –l /u01/app/oracle/oradata/prod /arch SYS @ PROD >alter system switch logfile; 手工切换日志查看归档情况 |
3. 配置归档文件格式
SYS @ PROD >show parameter log_archive_format;
NAME TYPE VALUE ----------------------------------------------------------------------------- log_archive_format string %t_%s_%r.dbf
SYS @ PROD >alter system set log_archive_format='LF_%s_%t_%r.arc' scope=spfile;
修改文件名格式,静态参数(至少必须包含%s,%t,%r3个参数,否则重启报错) SYS @ PROD >shutdown immediate SYS @ PROD >startup SYS @ PROD >alter system switch logfile; SYS @ PROD >host ls –l /u01/app/oracle/oradata/ora10/ Total 922440 -rw-r----- 1 oracle oinstall 489472 Mar 31 22:48 1_40_713700043.dbf -rw-r----- 1 oracle oinstall 500224 Mar 31 23:04 LF_41_1_713700043.arc 归档文件格式参数: %s:日志序列号 %S:日志序列号 (带有前导0) %t:重做线程编号 %T:重做线程编号 (带有前导0) %r:ResetlogID %a:活动ID号 %A:数据库ID号 |
5、口令文件:password file
对通过网络进行管理的用户进行认证。 1.本地连接 默认情况下,无论实例是否已启动,数据库服务器本地用户登录数据库需通过操作系统验证,即发起登录的操作系统用户是否属于oinstall组,是则允许登录,否则禁止,而与登录时使用的数据库用户及口令无关(错误的数据库用户及错误口令或空口令均允许登录)。注意, 操作系统验证仅对本地连接且以as sysdba身份登录才生效,若非as sysdba身份,则 进行数据库验证。 [root@station31~]#cat /etc/passwd | grep oracle oracle:x:500:501::/home/oracle:/bin/bash
[root@station31~]#cat /etc/group | grep 501 oinstall:x:501: sed –i 's/oinstall:x:501/oinstall:x:505/' /etc/group 更改oracle用户所属组ID #su - oracle $sqlplus / as sysdba; 无口令登录失败 Perl –p –e 's/oinstall:x:505/oinstall:x:501/' /etc/group 撤消上述更改 测试结果: 操作系统验证本地实例启动:以as sysdba登录无口令或错误口令可登录,以普通用户登录需正确口令; 实例关闭:只能以as sysdba登录可无口令或错误口令可登录,数据库没启动,数据库验证失效,普通用户无法登录。 禁用操作系统验证本地实例启动:以as sysdba登录需正确口令。 实例关闭:只能以as sysdba并以正确口令登录。 禁用操作系统验证: vi $ORACLE_HOME/network/admin/sqlnet.ora SQLNET.AUTHENTICATION_SERVICES (NONE) 添加上行,指定禁用操作系统验证,提高本地登录安全性。 禁用OS验证后,本地登录将根据数据库口令文件参数的设置(默认生效)改用口令文件验证,默认口令文件为$ORACLE_HOME/dbs/orapw$ORACLE_SID默认其中已包含sys用户。 SYS @ PROD >show parameter remote_login_passwordfile; 口令文件验证规则为:对于以sysdba身份登录的用户,使用口令文件进行验证,验证口令文件中是否包含该用户且口令文件中口令是否正确;对于以非sysdba身份登录的用户,则仍使用数据库验证,验证数据库中是否包含该用户且数据库中口令是否正确。
·口令文件启用 SYS @ PROD >show parameter remote_login_passwordfile; 查看口令文件参数。 NAME TYPE VALUE ----------------------------------------------------------------------------- remote_login_passwordfile string EXCLUSIVE none:禁用口令文件验证,不允许通过网络进行DB管理,即使口令文件存在。 exchlusize:启用口令文件验证,允许一个数据库使用口令文件进行验证 (默认) shared:共享口令文件验证,允许多个数据库使用口令文件进行验证
·口令文件生成 $cd $ORACLE_HOME/dbs $orapwd file=orapwora10 password=123456 entries=20 force=y
orapwd参数含义(“”两边无空格): file:定义口令文件名称 (路径为$ORACLE_HOME/dbs/) (必需) password:SYS用户的口令 (必需) entries:允许在口令文件中添加到用户最大数量 (可选) force:是否覆盖原有口令文件 (可选)
·查看修改口令文件 SYS @ PROD >select * from v$pwfile_users; 查看口令文件中所有用户
USERNAME SYSDBSYSOP ---------------------------------------- SYS TRUE TRUE
SYS @ PROD >create user user01 identified by 123456;添加用户 SYS @ PROD > grant sysdba to user01; 赋sysdba权限后自动加入口令文件 SYS @ PROD >select * from v$pwfile_users; USERNAME SYSDBSYSOP ------------------------------------------------------------- SYS TRUE TRUE USER01 TRUE FALSE
SYS @ PROD >revoke sysdba from user01; 从口令文件中删除用户
·删除口令文件 (禁用口令文件验证)
SYS @ PROD >alter system set remote_login_passwordfile=none scope=spfile; SYS @ PROD >shutdown immediate;
rm $ORACLE_HOME/dbs/orapwora10
由上步测试可知,在禁用口令文件验证后,网络连接时将只有一种方式可以连入数据库,即在数据库启动情况下,仅允许普通用户以正确口令连入数据库,提高了网络连接的安全性, 但同时大大降低了网络验证的可管理性,因其中关键性的“数据库关闭状态下以sysdba 身份连入数据库”功能不能使用,从而使远程启动数据库功能不能实现,不利于从网络位置管理数据库,因此应该使用默认的启用口令文件验证模式。 特别注意: 若禁用了本地操作系统验证后,又禁用口令文件验证,则在数据库关闭后,将无法使用 任何方法连入数据库再次重启实例,故不应将本地操作系统验证和口令文件验证同时禁用。 |
2. 网络连接
默认情况下,无论实例是否启动,远程客户端用户登录数据库都需进行口令文件或数据库的验证,使用口令文件及验证规则与本地验证相同。
例:$ vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER
(SID_LIST
(SID_DESC
(SID_NAME PLSExtProc)
(ORACLE_HOME /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM extproc)
)
(SID_DESC
(GLOBAL_DBNAME ora10)
(ORACLE_HOME /u01/app/oracle/product/10.2.0/db_1)
(SID_NAME ora10)
)
)
LISTENER
(DESCRIPTION_LIST
(DESCRIPTION
(ADDRESS (PROTOCOL TCP)(HOST 10.2.26.31)(PORT 1521))
)
)
vi $ORACLE_HOME/network/admin/tnsnames.ora
ORA10
(DESCRIPTION
(ADDRESS (PROTOCOL TCP)(HOST 10.2.26.31)(PORT 1521))
(CONNECT_DATA
(SERVER DEDICATED)
(SERVICE_NAME ora10)
)
)
LISTENER_ORA10
(ADDRESS (PROTOCOL TCP)(HOST 10.2.26.31)(PORT 1521))
EXTPROC_CONNECTION_DATA
(DESCRIPTION
(ADDRESS_LIST
(ADDRESS (PROTOCOL IPC)(KEY EXTPROC2))
)
(CONNECT_DATA
(SID PLSExtProc)
(PRESENTATION RO)
)
)
在listener.ora和tnsnames.ora配置文件中添加或修改实例和数据库名段。
6.警告文件:alert file
记录数据库文件运行中主要事件的命令与结果 Alertlog是一种特殊的跟踪文件,每个数据库都有一个跟踪文件,同步记载数据库的消息和错误。
[oracle@station31dbs]$ls -l /u01/app/oracle/admin/ora10/bdump/alert_$ORACLE_SID.log -rw-r----- 1 oracle oinstall 595392 Apr 2 00:12 /u01/app/oracle/admin/ora10/bdump/alert_ora10.log |
7.跟踪文件:tracefile
记载后台进程遇到的重大事件信息 记载相关进程所遇到的重大事件的信息 $ls –al /u01/app/oracle/admin/ora10/bdump/*.trc $ls –al /u01/app/oracle/admin/ora10/cdump/core_nnnn/core $ls –al /u01/app/oracle/admin/ora10/udump/*.trc $ls –al /u01/app/oracle/admin/ora10/adump/*.aud
bdump:警告信息文件,及后台进程的跟踪文件存放目录 cdump:主要是oracle的内核跟踪文件存放目录 udump:用户进程跟踪文件存放目录,用于收集客户应用的SQL语句统计信息 adump:审计信息文件存放目录
SYS @ PROD >select name,value from v$parameter where value like '%dump%'; NAME VALUE -------------------------------------------------------------------------------- background_dump_dest /u01/app/oracle/admin/ora10/bdump user_dump_dest /u01/app/oracle/admin/ora10/udump core_dump_dest /u01/app/oracle/admin/ora10/cdump audit_file_dest /u01/app/oracle/admin/ora10/adump |
8、初始化参数文件
initSID.ora或init.ora文件,因为版本的不一样,其位置也可能会不一样。在8i中,通常位于$ORACLE_HOME/admin//Pfile下, 初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等,在数据库启动的时候加载(nomount时加载), 初始化文件记录了很多重要参数,对数据库的性能影响很大,如果不是很了解,不要轻易乱改写,否则会引起数据库性能下降。 |