Oracle 文件
阅读原文时间:2023年07月16日阅读:2

参数文件

跟踪文件

告警文件

数据文件

临时文件

控制文件

重做日志文件

密码文件

闪回日志

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

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 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_HOMEDATABASEPWDSID.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' ) )

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器