加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle 文件

发布时间:2020-12-12 13:24:35 所属栏目:百科 来源:网络整理
导读:参数文件 跟踪文件 告警文件 数据文件 临时文件 控制文件 重做日志文件 密码文件 闪回日志 dum文件 数据泵文件 1参数文件 Parameter file:告诉oracle实例在那里可以找到控制文件,并且指定某些初始化参数,这些参数定了了某些内存结构有多大等设置 1.1?什么

参数文件

跟踪文件

告警文件

数据文件

临时文件

控制文件

重做日志文件

密码文件

闪回日志

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:oracleproduct10.2.0adminorclpfile

F:oracleproduct10.2.0db_1adminsamplepfile

???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:ORACLEPRODUCT10.2.0DB_1

?????????????????????????????????????????????????DBSSPFILEORCL.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:oracleproduct10.2.0db_1database

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:oracleproduct10.2.0adminorclpfile

SQL> create pfile=‘f:mydbpfile.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$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.0adminorclbdump

1 首先创建一个外部表,以便查询告警日志

SQL> create or replace directory data_dir as ‘F:oracleproduct10.2.0adminorclbdump‘;

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.0adminorclbdump目录下的实际文件名

????)

)

??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,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 %‘)—查看相应的时间

[[email?protected] bdump]$ pwd

/u01/app/oracle/admin/grs/bdump

$ORACLE_HOME/admin/$SID/admin/bdump

?

?

11g12c

?

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:mydbxxxxxx.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:ORACLEPRODUCT10.2.0ORADATAORCLREDO04.log‘,

??3 ?‘F:ORACLEPRODUCT10.2.0ORADATAORCLREDO05.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 ??????

对于statusunused 该日志文件组从未被写过数据

??????????????????Current 当前正在使用的日志组

?????????????????Inactive ?该日志组中的内容已被处理,当前处于空闲状态

?????????????????Active 表示当前并未使用,但是日志组中的内容并未归档,或者文件中的内容并没有完全写入数据文件,一旦需要实例恢复,需要借助该文件中保存的内容

?????????????Clearing 改日志组正在被重建,重建后变为(unused

????????????Clearing_current重建是出错

?????????????select?* from?v$logfile

3 ONLINE F:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG NO

2 ONLINE F:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.LOG NO

1 ONLINE F:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG NO

4 ONLINE F:ORACLEPRODUCT10.2.0ORADATAORCLREDO04.LOG NO

4 ONLINE F:ORACLEPRODUCT10.2.0ORADATAORCLREDO05.LOG NO

???重做日志文件的大小:平均恢复时间,高峰负载,大量用户修复相同的块

???重做日志文件的生成:如果设置为force logging属性后,nologginghint 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 从非归档模式改为归档模式

[[email?protected] ~]$ 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:oracleproduct10.2.0db_1NETWORKADMIN?路径下

修改为SQLNET.AUTHENTICATION_SERVICES= (NONE)一oracle的方式验证

?

??密码文件保存了一个用户名和密码列表,这些用户名和密码分别对应于可以通过网络远程认证为sysdba的用户,

?首先,启动本地数据库,设置remote_login_passwordfile,默认的none,则没有密码文件,

alter system set remote_login_passwordfile=exclusive scope=spfile;重启生效

pfilespfile文件中 *.remote_login_passwordfile=‘EXCLUSIVE‘

实例运行和启动时,设置不能动态改变,

在REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVESHARED情况下?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:oracleproduct10.2.0db_1databasePWDorcl.ora password=yhq9870641 entries=10?force=y;

?默认路径F:oracleproduct10.2.0db_1database,名字pwdorcl.ora

?Sqlplus connect ?sys/[email?protected] as sysdba

?遇到12505,在tns中添加相应的service

在密码文件中添加用户scott

??设置初始化参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

????????sysdba登陆,grant sysdba to scott,就可以登录

select?* from?v$PWFILE_USERS?查看用户拥有的sysdbasysoper权限,已经是否在密码文件中存在

linux

?SQL> alter system set remote_login_passwordfile=exclusive scope=spfile;

System altered.

SQL> shutdown immediate

SQL> startup

[[email?protected] dbs]$ pwd

/opt/ora10g/oracle/product/10.2.0/db_1/dbs

[[email?protected] dbs]$

-rw-r----- ?1 oracle dba ?1536 Aug 19 01:26 orapworcl------oracle_sid=orcl

[[email?protected] dbs]$ orapwd file=orapwORCL password="987064" entries=10 force=y;

SQL> conn sys/[email?protected] as sysdba

Connected.

SQL>

?

9闪回日志

Flashback logoracle10g支持flashback database命令引入的,

9.1 闪回数据库

???闪回可以取代完整的数据库恢复和使用归档日志完成的前滚,10g企业版

???1 关闭数据库

???2 dba启动并装载数据库,可以使用scnoracle时钟或时间戳发出闪回数据库命令

???3 dbaresetlogs选项打开数据库

?要使用这个特性,数据库必须采用archivelog模式,而且必须配置支持flashback database命令。

10 dmp(expimp文件)

dmp是二进制文件,exportclient端导入导出数据生成的dmp文件,不能编辑,可以从中抽取相关的ddl信息

11数据泵文件

Oracle10g新增的数据导入导出dmpdpimpdp方式,在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‘ ) )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读