Oracle 文件
参数文件
跟踪文件
告警文件
数据文件
临时文件
控制文件
重做日志文件
密码文件
闪回日志
dum文件
数据泵文件
1参数文件
Parameter file:告诉oracle实例在那里可以找到控制文件,并且指定某些初始化参数,这些参数定了了某些内存结构有多大等设置
1.1 什么是参数
select * from v$parameter order by name
也可在show parameter中看到,
SHOW parameter db_block_s,后面会自动添加%
正常用户无法访问v$parameter,创建一个函数
create or replace
function get_param( p_name in varchar2 )
return varchar2
as
l_param_type number;
l_intval binary_integer;
l_strval varchar2(256);
invalid_parameter exception;
pragma exception_init( invalid_parameter, -20000 );
begin
begin
l_param_type :=
dbms_utility.get_parameter_value
( parnam => p_name,
intval => l_intval,
strval => l_strval );
exception
when invalid_parameter
then
return '*access denied*';
end;
if ( l_param_type = 0 )
then
l_strval := to_char(l_intval);
end if;
return l_strval;
end get_param;
调用 select get_param('db_block_size') from dual
或者set serveroutput on
exec dbms_output.put_line( get_param( 'db_block_size' ) );
exec dbms_output.put_line( get_param( 'pga_aggregate_target' ) );
不是所有的参数都可以看到,看不到的则显示*access denied*
1.2 遗留的init.ora参数文件
参数文件不必放在特定的位置,启动一个实例时,可以再命令上使用pfile=filename
F:\oracle\product\10.2.0\admin\orcl\pfile
F:\oracle\product\10.2.0\db_1\admin\sample\pfile
Startup pfile=’’,
1.3 spfile,pfile
spfile必须放在服务器参数文件,二进制文件,
pfile 是文本参数文件
create pfile='/oracle/test.ora' from spfile
alter system命令可以完全直接将值写入spfile中
1.3.1 转换为spfile
Show parameter spfile
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string F:\ORACLE\PRODUCT\10.2.0\DB_1\
DBS\SPFILEORCL.ORA—此处有值,证明实例从spfile启动
$oracle_home/dbs/
/u01/app/oracle/product/10.2.0/db_1/dbs
如果提示文件不存在,则
Create spfile from pfile;提示没有权限
则connect / as sysoper;或sysdba
Create spfile from pfile;使
F:\oracle\product\10.2.0\db_1\database
用sysoper这个角色,允许该角色管理参数文件,可以启动和停止数据库,不允许其他操作,
1.3.2 设置spfile中的值
Alter system set parameter=value <comment=’text’><deferred>
<scope=emeory|spfile|both> <sid=’sid|*>
parameter=value 例如 pga_aggregate_target=512m
comment=’text’可添加与参数相关的注释
deferred 指定系统修改是否只对以后的会话生效,(对当前会话无效)默认alter system会立即生效,但是有些参数不会 ,例如
select * from v$parameter where issys_modifiable='DEFERRD'
scope= emeory|spfile|both
emeory只在实例中修改,数据库重启不在保存
spfile只修改spfile参数文件中的值,重启后生效
both,二者中都生效
例如 SQL> alter system set pga_aggregate_target=180m;
alter system set pga_aggregate_target=180m comment=’xxxx’;
1.3.3 取消spfile中的设置
Alter system reset parameter <scope=emeory|spfile|both> sid=’sid*’
Alter system reset sort_area_size scope=spfile;
然后可以用pfile来查看是否修改
Create pfile=’f:xxx’ from spfile;
Create pfile from spfile;
Show parameter pfile;
1.3.4 从spfile创建pfile
Create pfile from spfile;
F:\oracle\product\10.2.0\admin\orcl\pfile
SQL> create pfile='f:\mydb\pfile.txt' from spfile;
File created.
多次修改会在pfile中保存
生成的pfile完成编辑,通过startup pfile=‘xx’,
可以在creat spfile或者重新启动,生成新的spfile
1.3.5 修正被破坏的spfile
Unix下,用strings命令strings spfile$oracle_sid=ora
Windows下,用write.exe(写字板)打开,复制到pfile中
万一spfile丢失,可以从警告日志中找到参数信息,然后创建pfile
小结; 如何设置,查看参数,2类参数文件
2跟踪文件
Trace file 能提供调试信息,如果只想DBMS_MONITOR.SESSION_TRACE_ENABLE,服务器就会生成一个包含性能相关信息的跟踪文件。数据库中测量性能反映有几下方面
V$视图,审计命令,资源管理器,oracle事件,dbms_trace,数据库事件触发器,SQL_TRACE/DBMS_MONITOR
2.1 请求的跟踪文件
SQL>alter session set events '10046 trace name context forever,level 12'
alter session set events '10046 trace name context off';关闭
2.1.1 文件的位置
select name, value
from v$parameter
where name = 'user_dump_dest'
or name = 'background_dump_dest'
or name = 'core_dump_dest'
或者show parameter dump_test
select get_param('user_dump_dest') from dual
获取产生文件的位置
Sql>SELECT c.value||'\'||d.instance_name||'_ora_'||a.spid||'.trc' trace_name_file
FROM v$process a, v$session b,v$parameter c,v$instance d
WHERE a.addr=b.paddr
and b.audsid=userenv('sessionid')
and c.name='user_dump_dest';
SELECT c.value||'/'||d.instance_name||'_ora_'||a.spid||'.trc' trace_name_file
FROM v$process a, v$session b,v$parameter c,v$instance d
WHERE a.addr=b.paddr
and b.audsid=userenv('sessionid')
and c.name='user_dump_dest';
/u01/app/oracle/admin/grs/udump/grs_ora_10184.trc
2.1.2 针对内部错误产生的跟踪文件
如oracle 600错误,
3告警文件
告警日志,及数据库的日记,是可查看数据库历史相关的文件,\10.2.0\admin\orcl\bdump
1 首先创建一个外部表,以便查询告警日志
SQL> create or replace directory data_dir as 'F:\oracle\product\10.2.0\admin\orcl\bdump';
Directory created.
先创建一个目录,在创建外部表,
CREATE TABLE alert_log
(
text_line varchar2(255))
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY data_dir
ACCESS PARAMETERS
(
records delimited by newline
fields
)
LOCATION
(
'alert_orcl.log'--\10.2.0\admin\orcl\bdump目录下的实际文件名
)
)
select to_char(last_time,'dd-mon-yyyy hh24:mi') shutdown,
to_char(start_time,'dd-mon-yyyy hh24:mi') startup,
round((start_time-last_time)*24*60,2) mins_down,
round((last_time-lag(start_time) over (order by r)),2) days_up,
case when (lead(r) over (order by r) is null )
then round((sysdate-start_time),2)
end days_still_up
from (select r,
to_date(last_time, 'Dy Mon DD HH24:MI:SS YYYY') last_time,
to_date(start_time,'Dy Mon DD HH24:MI:SS YYYY') start_time
from (
select r,text_line,
lag(text_line,1) over (order by r) start_time,
lag(text_line,2) over (order by r) last_time
from (select rownum r, text_line
from alert_log
where text_line like '___ ___ __ __:__:__ 20__'
or text_line like 'Starting ORACLE instance %'))
where text_line like 'Starting ORACLE instance %')—查看相应的时间
[oracle@localhost bdump]$ pwd
/u01/app/oracle/admin/grs/bdump
$ORACLE_HOME/admin/$SID/admin/bdump
11g,12c
select * from v$diag_info;
/u01/app/oracle/diag/rdbms/local12c/local12c/trace
4数据文件
4.1 oracle中存储层次体系
1 段,数据库有多个表空间构成,表空间是一种逻辑存储容器,段就是占用存储空间的数据库对象,表段,索引段,分区段,回滚段,临时段等。
2 区,段由多个区构成,(逻辑上连续分配的空间)
3 块,区由多个块组成,块大小 2,4.8,16,32kb
Create database时默认数据块的大小,
4表空间,是一个容器,其中包含段,每个段只属于一个表空间,一个表空间可能有多个段,
小计:数据库有一个或多个表空间组成,表空间有1个或多个数据文件组成,段,区,块
4.2 字典管理跟本地管理的表空间
采用本地管理,分配和释放的速度快,
如果创建一个system表空间是本地管理的,那么其他表空间都是本地管理的。如果已经是本地管理表空间,则不能再次基础上建立字典管理表空间,
查看表空间的管理
select extent_management from dba_tablespaces where tablespace_name='USERS';
查看数据文件是否允许自动增长
SELECT FILE_NAME, TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES
Select name,status from v$datafile
V$视图数据库启动到mount状态就可以查看,dba_*数据字典表要启动到open状态才能查询
相关视图 dba_tablespaces ,v$datafile
数据文件可以有多种状态:offline,online,system(system表空间),只有当数据文件处于online或者system的状态才能被访问,dba手动修改文件的状态
Alter database datafile ‘f:\oracle\.......\name.dbf’ offline/online
5临时文件
Temp files是一种特殊的文件,用来存储大规模的排序和散列操作,如果RAM没有足够的空间,还回用临时文件存储全局临时表数据或者结果集,pga中无法存放,会用临时空间作为中转,对临时文件的操作不会生成重做日志,不过可以生成undo,临时文件不需要备份
5.1 必须用create temporary tablespace来创建,无法通过alter database来创建
临时表空间处于nologging模式
临时表空间的数据文件不能设置为只读模式
通过rman备份,不会备份临时文件
5.2 create temporary tablespace temp_yhq
Tempfile ‘f:\mydb\xxxxxx.dbf’ size 2048m
select * from v$tempfile
6控制文件
Control file 控制文件是一个很小的文件,参数文件告诉实例控制文件的位置,控制文件则告知实例数据库和重做日志文件的位置
select * from v$controlfile
sql>show parameter control_files
如果发生检查点的信息,数据库名,创建数据库的时间戳,归档重做的历史,rman信息等
7重做日志文件
Redo log file 数据库的事务日志,每个操作几乎都会生成redo,通常只用于恢复,还可以:系统崩溃的实例恢复,通过备份恢复数据文件之后恢复介质,备份(standby)数据库处理,输入到流中进行重做日志日志挖掘过程。数据库执行数据修改后,并不是立即把数据写入到数据文件中,而是先生成redo日志,然后写入到sga中的log_buffer(固定区域(3-5m))
7.1 在线重做日志 redo
每个数据库至少有2个重做日志文件组,每个日志组包含一个或多个成员,在线重做日志文件的大小是固定的,并以循环的方式利用(顺序写),从一个日志组切换到另外一个日志组称为日志切换(log switch)
数据库缓冲区缓存(database buffer cache)就是临时存储数据块的地方(sga中),读取数据块时,会存储在这个缓存中,以后不必要在物理的重复的读取,修改数据块时,这些修改会在内存中完成,写至缓冲区缓存中的块。另外,会把重做这些修改所需要的足够信息保存在重做日志缓冲区(log_buffer)中,commit时,会使这些修改成为永久,这时把重做日志缓冲区的内容写到重做日志文件中,只要修改的块还在缓冲区缓存中,而不在磁盘上,数据库失败时我们就会需要在线重做日志的内容,如果提交过后,突然掉电,数据库缓冲区缓存就是彻底清空,当缓存区缓存填满时请求空间,会建立检查点,dbwn进程会脏块从缓冲区写入到磁盘上
如果当前在写log日志组1,那么日志组1就是current状态,当该日志组写满后,后台进程lgwr就开始写下一个,log2日志组的状态有active变为current。
管理:增加SQL> alter database add logfile group 4(
2 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.log',
3 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.log')size 50m;
删除 alter database drop logfile group 4 ; 不能删除当然正在使用的current日志,alter命令只会删除数据字典中的定义,不会物理的删除文件
可以添加日志组成员
Alter database add(standby) logfile member
‘f:\xxxxxxsx.redo03.log’ to group 4
删除 alter databse drop logfile member ‘f:\xxxxxxsx.redo03.log’
查询 select * from v$log
1 1 8 52428800 1 NO CURRENT 765398 2013-5-22 13:52:28
2 1 6 52428800 1 NO INACTIVE 642066 2013-5-20 11:00:09
3 1 7 52428800 1 NO INACTIVE 710623 2013-5-21 10:02:49
4 1 0 52428800 2 YES UNUSED 0
对于status:unused 该日志文件组从未被写过数据
Current 当前正在使用的日志组
Inactive 该日志组中的内容已被处理,当前处于空闲状态
Active 表示当前并未使用,但是日志组中的内容并未归档,或者文件中的内容并没有完全写入数据文件,一旦需要实例恢复,需要借助该文件中保存的内容
Clearing 改日志组正在被重建,重建后变为(unused)
Clearing_current重建是出错
select * from v$logfile
3 ONLINE F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG NO
2 ONLINE F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG NO
1 ONLINE F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG NO
4 ONLINE F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO04.LOG NO
4 ONLINE F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO05.LOG NO
重做日志文件的大小:平均恢复时间,高峰负载,大量用户修复相同的块
重做日志文件的生成:如果设置为force logging属性后,nologging跟hint append都会无限, select force_logging from v$database,看是否设置为force logging属性,alter database force logging ,alter database no force logging,设置立即生效。
7.2 归档日志文件
归档:在归档模式下,当联机重做日志被重用前,都会检查该文档是否被归档,如果没有,那oracle首先会归档该重做日志,然后才能利用改日志文件
一般是oracle自动将写满或被切换的联机重做日志文件复制一份到指定的路径下
默认情况下,oracle会等一组重做日志写满后,再出发归档操作,当然可以手动进行归档操作
ALTER SYSTEM ARCHIVE LOG ALL;
借助归档文件可以:
系统崩溃后执行实例恢复
通过备份文件修复数据文件后,执行介质恢复
Standby数据库应用
Streams同步数据
Logminer分析日志,查看数据库曾经执行过的操作等;
1 从非归档模式改为归档模式
[oracle@localhost ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 24 10:35:48 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST----归档日志的地方
Oldest online log sequence 18
Current log sequence 20
手动更改归档日志的放置地方
----Alter system set log_archive_dest_i=’location=/u01/oracle/backup/’;
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 88082000 bytes
Database Buffers 192937984 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST-----系统默认的路径(oracle安装路径RDBMS目录下,一般建议单独存放)
Oldest online log sequence 18
Next log sequence to archive 20
Current log sequence 20
SQL>
2 从归档模式修改为非归档模式
启动到mount状态
然后
Alter database noarchivelog
8密码文件
可选的文件,允许远程sysdba或管理员访问数据库
本地os验证:connect / as sysdba,可以登录,远程不行
在sqlnet.ora中,SQLNET.AUTHENTICATION_SERVICES= (NTS)
F:\oracle\product\10.2.0\db_1\NETWORK\ADMIN 路径下
修改为SQLNET.AUTHENTICATION_SERVICES= (NONE)一oracle的方式验证
密码文件保存了一个用户名和密码列表,这些用户名和密码分别对应于可以通过网络远程认证为sysdba的用户,
首先,启动本地数据库,设置remote_login_passwordfile,默认的none,则没有密码文件,
alter system set remote_login_passwordfile=exclusive scope=spfile;重启生效
pfile,spfile文件中 *.remote_login_passwordfile='EXCLUSIVE'
实例运行和启动时,设置不能动态改变,
在REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVE、SHARED情况下Oracle系统搜索密码文件的次序为,在系统注册库中查找ORA_SID_PWFILE参数值,它为密码文件的全路径名,若未找到,则查ORA_PWFILE参数值,若仍未找到,则使用缺省值ORACLE_HOMEDATABASEPWDSID.ORA其中的SID代表相应的Oracle数据库系统标识符。
Orapwd file=orapw$oracle_sid password=xxx entries=20
Cmd os
orapwd file=F:\oracle\product\10.2.0\db_1\database\PWDorcl.ora password=yhq9870641 entries=10 force=y;
默认路径F:\oracle\product\10.2.0\db_1\database,名字pwdorcl.ora
Sqlplus connect sys/xxx@orcl as sysdba
遇到12505,在tns中添加相应的service
在密码文件中添加用户scott
设置初始化参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
以sysdba登陆,grant sysdba to scott,就可以登录
select * from v$PWFILE_USERS 查看用户拥有的sysdba跟sysoper权限,已经是否在密码文件中存在
linux下
SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;
System altered.
SQL> shutdown immediate
SQL> startup
[oracle@localhost dbs]$ pwd
/opt/ora10g/oracle/product/10.2.0/db_1/dbs
[oracle@localhost dbs]$
-rw-r----- 1 oracle dba 1536 Aug 19 01:26 orapworcl------oracle_sid=orcl
[oracle@localhost dbs]$ orapwd file=orapwORCL password="987064" entries=10 force=y;
SQL> conn sys/987064@ORCL as sysdba
Connected.
SQL>
9闪回日志
Flashback log是oracle10g支持flashback database命令引入的,
9.1 闪回数据库
闪回可以取代完整的数据库恢复和使用归档日志完成的前滚,10g企业版
1 关闭数据库
2 dba启动并装载数据库,可以使用scn,oracle时钟或时间戳发出闪回数据库命令
3 dba以resetlogs选项打开数据库
要使用这个特性,数据库必须采用archivelog模式,而且必须配置支持flashback database命令。
10 dmp(exp\imp文件)
dmp是二进制文件,export在client端导入导出数据生成的dmp文件,不能编辑,可以从中抽取相关的ddl信息
11数据泵文件
Oracle10g新增的数据导入导出dmpdp,impdp方式,在service端执行,外部表external table可以加载和卸载数据泵格式的数据,
外部表进行数据移植
先创建一个目录:
create or replace directory tmp as 'F:\mydb'
create table all_objects_unload
organization external
( type oracle_datapump
default directory TMP
location( 'allobjects.dat' )
)
as
select * from all_objects
connect 另外一个schema
create or replace directory TMP as 'c:\temp\'
create table t
( OWNER VARCHAR2(30),
OBJECT_NAME VARCHAR2(30),
SUBOBJECT_NAME VARCHAR2(30),
OBJECT_ID NUMBER,
DATA_OBJECT_ID NUMBER,
OBJECT_TYPE VARCHAR2(19),
CREATED DATE,
LAST_DDL_TIME DATE,
TIMESTAMP VARCHAR2(19),
STATUS VARCHAR2(7),
TEMPORARY VARCHAR2(1),
GENERATED VARCHAR2(1),
SECONDARY VARCHAR2(1))
organization external
( type oracle_datapump
default directory TMP
location( 'allobjects.dat' ) )