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: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 ? ? 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: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 ?????? 对于status:unused 该日志文件组从未被写过数据 ??????????????????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属性后,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 从非归档模式改为归档模式 [[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;重启生效 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: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?查看用户拥有的sysdba跟sysoper权限,已经是否在密码文件中存在 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 log是oracle10g支持flashback database命令引入的, 9.1 闪回数据库 ???闪回可以取代完整的数据库恢复和使用归档日志完成的前滚,10g企业版 ???1 关闭数据库 ???2 dba启动并装载数据库,可以使用scn,oracle时钟或时间戳发出闪回数据库命令 ???3 dba以resetlogs选项打开数据库 ?要使用这个特性,数据库必须采用archivelog模式,而且必须配置支持flashback database命令。 10 dmp(expimp文件)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‘ ) ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |