005.Oracle数据库实例核心技术解析
oracle数据库环境变量优化设置 1. linxu:.bash_profile unix:.profile 2. alert alias alert="cd /oracle/app/oracle/diag/rdbms/db01/db01" 默认日志目录:/oracle/app/oracle/diag/rdbms/db01/db01/trace 3. sqlplux "/as sysdba" select name from V$datafile; 在sqlplus里实现上下翻滚命令:源码安装 rlwrap alias sqlplus="rlwrap sqlplus" alias rman="rlwrap rman" 4. glogin.sql $ find /oracle -name glogin.sql 文件位置在:/oracle/app/oracle/product/11.2.0/sqlplus/admin/glogin.sql 添加参数代码: SET TERMOUT OFF DEFINE sqlprompt=none COLUMN sqlprompt NEW_VALUE sqlprompt SELECT USER || '@' || NVL('&_CONNECT_IDENTIFIER',global_name ) sqlprompt FROM global_name; SET SQLPROMPT '&sqlprompt> ' UNDEFINE sqlprompt SET TERMOUT ON col NAME format a50 col VALUE format a50 set lin 250 set pagesize 500 五、Oracle参数文件的修改与参数文件案例 如果是文件系统,读spfile 如果是ASM系统:先读pfile,再读spfile,但pfile里是存放的spfile的存放路径 spfile: 命名规则:spfile<SID>.ora SORACLE_HOME/dbs/ pfile: 命名规则: init<SID>.ora 查看参数文件:cd $ORACLE_HOME/dbs/ spfile默认路径:/oracle/app/oracle/product/11.2.0/dbs 在sqlplus查看pfile路径: $ sqlplus "/as sysdba" > show parameter pfile pfile默认路径:/oracle/app/oracle/product/11.2.0/dbs/spfiledb01.ora 查看参数方式 > show parameter 查看所有参数 > show parameter 参数名 查看个别参数 如: > show parameter pga > show parameter sga > select name,value from v$parameter; 修改参数语法 : alter system/session set parameter_name = parameter_value [comment 'text' ] [scope =memory |spfile |both][sid='sid'|"] scope=spfile; 参数名 参数值 在什么地方生效 在什么地方修改 memory:即时生效,重启后失效 spfile:重启生效 both:重启永久生效 参数分为:动态参数,静态参数 create pfile='/oracle/pfile.back' from spfile; 从当前路径创建pfile create pfile='/oracle/pfile.back' from spfile='path'; 从指定路径创建pfile create spfile from pfile='/oracle/pfile.back' 从当前路径创建spfile create spfile='path' from pfile='/oracle/pfile.back'; form spfile='path'; 从指定路径创建spfile 数据库找参数文件顺序: spfile<sid>.ora > spfile.ora >inst<SID>.ora > init.ora 数据库无法启动时,修改参数文件,启动数据库,的思路 1.创建pfile create pfile='/oracle/pfile.back' from spfile; 从当前路径创建pfile 或者: create pfile='/oracle/pfile.back' from spfile='path'; 从指定路径创建pfile 2.修改 modify 3.启动 startup pfile='/oracle/pfile.back' (后可跟启动到状态 nomount,mount,不加默认为open状态) 4.创建一个新的spfile create spfile form pfile='/oracle/pfile.back' 5.启动数据库 startup 例如: > sqlplux "/as sysdba" > create pfile='/oracle/pfile.back' from spfile; > shutdown immediate; exit vi /oracle/pfile.back 修改 open_cursors=3 ,保存 sqlplus "/as sysdba" > startup pfile='/oracle/pfile.back' > show parameter open_cursors > create spfile='/oracle/app/oracle/product/11.2.0/dbs/spfiledb01.ora' from pfile='/oracle/pfile.back'; 或者: > create spfile from pfile='/oracle/pfile.back'; > shutdown immediate; quit sqlplux "/as sysdba" > startup > show parameter open_cu > show parameter pfile 更改参数文件方式 : alter system alter session 六、跟踪分析数据库启动的各个阶段 1、nomount startup nomount 主要启动参数文件:搜索spfile > 没有spfile 搜索pfile >启动加参数文件,分配SGA>启动后台进进程 > 打开一个alter日志文件,跟踪文件> 开始写日志 2、mount alter database mount; 主要:将数据与实例关联 > 根据参数文件,找到控制文件 > 再获取信息,再到打开数据库 3、open alter database open 主要:将数据库与实例关联,打开日志文件。 数据库启动如何验证: checkpoint cnt scn start scn stop scn 如果安装ASM也可以按以下启动: > srvctl start database -d db_name -o mount 或: > srvctl start database -d db_name 直接到open 状态 tracefile_name: 10g/11g: oradebug 跟踪trace 步骤: > shutdown immediate; > startup nomount; > oradebug setmypid 设置当前会话 > oradebug tracefile_name 查看当前会话的trace文件 或者用:用视图查看 > --desc v$diag_info; > --select VALUE from v$diag_info where name like '%Trace%'; > alter session set events '2862 trace name context forever,level 12'; -- 2691 是由oradebug tracefile_name找到的值。 > alter database mount; > alter database open; vi /oracle/app/oracle/diag/rdbms/db01/db01/trace/db01_ora_2691.trc /oracle/app/oracle/diag/rdbms/db01/db01/trace/db01_ora_2691.trc 11g: v$diag_info 数据库关闭过程 shutdown 接关闭状态 a. abort : 数据库关不了,才用此模式,关闭之前执行最少的任务。可能造成数据无法启动. 用 shutdown 时, 先用 alter system checkpoint (检查点切换) alter system switch logfile; (日志切换) i. immediate :最常用选项 t. transactional :允许完成现有事务处理,但不允许新的事务处理 n. normal :等所有会话断开再关闭。 如果将了grid组件(ASM)可以用: srvctl stop database -d dbname -o immediate; 关闭数据库 close dismount shutdown 或 alter database close 查看数据库警告日志文件 一般存放在: $oracle_base/diag/rdbms/<db_name>/<sid>/trace中。 $oracle_base/diag/rdbms/<db_name>/<sid>/trace目录中有一个xml 查看进程: ps -ef | grep ora_ ps -ef | grep LOACL=NO 查看没有结束的进程 ORA-00600错误 :oracle发生内部错误, ORA-1578错误 :坏块 > show parameter dump 查看当前dump 参数文件位置 查看数据库监听日志文件 一般路径:/oracle/app/oracle/diag/tnslsnr/db01/listener/alert/log.xml /oracle/app/oracle/diag/tnslsnr/db01/listener/trace/listener.log
10.你对oracle数据库实例了解多少 查看oracl多少位: $ cd $ORACLE_HOME/bin/ $ file oracle 查看文件位数 $ du -sm oracle 查看文件大小 $ cat /proc/meminfo 查看是否启用大内存 HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 8192 kB > select * from v$process; 查看进程信息 查看用户用什么工具连接数据库: [oracle@db01 trace]$ ps -ef | grep LOCA oracle 3332 2469 0 12:27 ? 00:00:01 oracledb01 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) oracle 4167 1 0 14:20 ? 00:00:00 oracledb01 (LOCAL=NO) oracle 4172 1 0 14:20 ? 00:00:00 oracledb01 (LOCAL=NO) oracle 4213 2760 0 14:26 pts/2 00:00:00 grep LOCA SYS@db01> select addr,pid,spid,username,program from v$process where spid=3332; ADDR PID SPID USERNAME PROGRAM ---------------- ---------- ------------------------ --------------- ------------------------------------------------ 00000000914BB858 19 3332 oracle SYS@db01> select sid,serial#,module from v$session where paddr='00000000914BB858'; 了解数据库运行多少时间 > select startup_time from v$instance; 在不知道任何参数时,怎么把数据库启动到 nomount 状态 : 1.在/oracle路径下创建一个pfile2.ora文件,输入:db_name=itpux (iptux指定的数据库名) 2. [oracle@db01 ~]$ export ORACLE_SID=itpux [oracle@db01 ~]$ sqlplus /nolog 3. none> conn /as sysdba; none> startup nomount pfile='/oracle/pfile2.ora'; 查看数据库启动了多少个实例(如下:有两个) [oracle@db01 oracle]$ ps -ef | grep smon oracle 3321 1 0 12:27 ? 00:00:01 ora_smon_db01 oracle 4383 1 0 14:47 ? 00:00:00 ora_smon_itpux oracle 4586 2760 0 15:11 pts/2 00:00:00 grep smon [oracle@db01 oracle]$ ipcs -asmq 查看启动了几个实例 、------ Semaphore Arrays -------- key semid owner perms nsems 0xbdb51c9c 688130 oracle 640 154 0x5d54c4dc 819203 oracle 640 124 [oracle@db01 oracle]$ sysresv 查看当前实例
如何进入所需要实例: linxu : $ export ORACLE_SID=所需实例名 windows: $ set oracle_sid=所需实例名 11.控制文件内容与心跳信息解析 查看控制文件的心跳 > select cphbt from X$KCCCP 或: > select EVENT#,NAME from v$event_name where name like'%hear%'; 或: DUMP事件文件 > shutdown immediate; > startup nomount; > oradebug setmypid 设置当前会话 > oradebug tracefile_name 查看当前会话的trace文件 > set time on > alter session set events 'immediate trace name CONTROLF forever,level 8'; > show parameter control 查看控制文件信息 [oracle@db01 db01]$ strings control01.ctl 显示控制文件(因为他是二进制文件) dump level : 1 :最低 2 3 :所有记录 4 5 8 10 :最详细的 dump控制文件: oradebug setmypid oradebug dump controlf 3; 12、数据库的参数文件分析 show parameter sga show parameter pga show parameter processes 查看进程 > desc v$parameter > select Name,value from v$parameter where name='processes'; > desc v$sgastat; > select * from v$sgastat where name='processes'; 跟踪步骤: > show parameter sql_trace > oradebug setmypid > oradebug tracefile_name > alter session set sql_trace=true; > show parameter processes > alter session set sql_trace=false; X$KSPPI X$KSPPCV v$spparameter :记录当前spfile初始化参数,这个只显示一行 v$parameter :记录当前spfile初始化参数,这个只显示两行 v$system_parameter :显示当前实例级别生成的文件 v$system_parameter2 > desc x$KSPSPFILE > select SID,NAME,VALUE from v$spparameter where VALUE is not null; 重置SPFILE 1.不知道以前的值(例如修改 processes 参数 ) > alter system set processes=500 scope=spfile; 2.或者通过 reset修改 > alter system reset processes scope=spfile; > show parameter spfile; > show parameter process 13、如何设置event事件 alter system set event="10046 trace name context forever,level 12" scope=spfile; cd /oracle/app/oracle/product/11.2.0/dbs 进入到spfile日志目录 [oracle@db01 dbs]$ strings spfiledb01.ora | grep event 查看event sql alter session set event '10046 trace name context forever,level12'; 通常格式如下: EVENT="<事件名称><动作><跟踪项目><范围限定>" 举例: event=10231 trace name context forever,level 10' alter system reset event scope=spfile sid='*'; 重置event级别 14、访问动态性能视图 select * from v$fixed_table 查看所有视图 15、深入理解oracle数据字典(数据库中所有的对象和属性) 1.dab_ dab权限对象 2.all_ 所有用户都有权限对象 3.user_ 所有用户都有权限对象(与all_的区别就是少了 OWNER 列) 跟踪案例: > set autotrace traceonly explain > select * from v$parameter; > desc x$KSPPI oracle启动时 startup >X$ >GV$ and V$ > GV_$ > public synonym < catalog.sql show parameter processes > V$PARAMETER > GV$PARAMETER >X$(X$KQFVI,X$KQFVT) oracle创建和删除表的检查过程 table or view >synonym > public synonym > does not exist (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |