mysql中遇到错误

1、ERROR 1042 (HY000): Can’t get hostname for your address
现象:使用ip地址登陆远程服务器出现以上错误提示
原因:因为mysql在默认情况下,会对ip地址也进行解析
解决:添加配置文件
[mysqld]
skip-name-resolve
说明:
#禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接#请求!
#1:去掉mysql启动参数中的skip-name-resolve ,然后jdbc连接串用ip地址和主机名均可。
#2:如果保留启动参数skip-name-resolve 的话,在jdbc连接串中只能使用IP地址的方式连接数据库。

2、The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).[FAILED]
现象:安装好mysql后,使用my.cnf启动报以上错误,不使用可以正常启动
原因:my.cnf文件参数有错误
解决:检查hostname.err文件,发现错误参数,进行修改,然后重启mysql

3、ERROR 1130 (HY000): Host ‘192.168.1.1’ is not allowed to connect to this MySQL server
现象:远程登陆数据库报以上错误
原因:数据库没有该登陆域名或者ip的登陆权限
解决:
mysql>use mysql;
mysql>update user set host = ‘%’ where user = ‘root’; //这个命令执行错误时可略过
mysql>flush privileges;
mysql>select host, user from user;

使用OUD恢复数据

1、初始化
配置odu中的control.txt文件,通过查询select file#,ts#,rfile#,name from v$datafile;得到相关数据(block_size可以不填写,因为默认就是8k)
note:system表空间文件需要放在control.txt的第一个,不然会出现
can not get bootstrap$ address from SYSTEM tablespace错误

2、数据库不能启动,但是SYSTEM表空间中的数据字典是完整的
生成数据字典:unload dict
列出用户:list user
列出用户下的所有表:list table username
恢复每张表:unload table username.tablename
也可以按用户恢复:unload user username

3、对于drop表和truncate表恢复操作
请见:http://www.orasos.com/2560.html

4、系统表空间损坏
扫描数据:scan extent
搜索数据:unload object all sample
从结果文件sample.txt查找需要的数据
恢复需要的表:unload object data_object_id column coltype coltype

Oracle静态监听和动态监听

一、静态注册
静态注册指实例启动时读取listener.ora配置文件,将实例和服务注册到监听程序。无论何时启动一个数据库,默认都有两条信息注册到监听器中:实例和服务。

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =  
     (GLOBAL_DBNAME = rman)
     (ORACLE_HOME = /u01/oracle)
     (SID_NAME = rman)
    )
   (SID_DESC =
     (GLOBAL_DBNAME = xienfei)
     (ORACLE_HOME = /u01/oracle)
     (SID_NAME = xff)
     )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
    )
  )

说明:
1)(ORACLE_HOME = /u01/oracle) oracle_home目录,测试不加也行
2)本静态监听两个数据库实例,每个实例的静态监听写到SID_DESC中
3)在数据库未open状态中,就可以远程连接到数据库,对数据库进行操作
4)使用静态监听时,客户端的tns最好配置为SERVICE_NAME,当然也可以同时配置SID和SERVICE_NAME,等数据库启动后,tns中无论是sid还是SERVICE_NAME均能访问数据库

二、动态注册
动态注册不需要显示的配置listener.ora文件,实例启动的时候,PMON进程根据instance_name,service_name参数将实例和服务动态注册到listerer中。如果没有设定instance_name,将使用db_name初始化参数值。如果没有设定service_names,将拼接db_name和db_domain参数值来注册监听。

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/oracle)
      (PROGRAM = extproc)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

说明:
1)不需要人工干预在lsnrctl start后,会自动注册数据库的instance_name,service_name,然后tns不论使用SID和SERVICE_NAME均可以连接上来
2)修改了SERVICE_NAME或者SID不用修改listener.ora文件

V$SESSION_WAIT分析

V$SESSION_WAIT displays the current or last wait for each session.

1、SID
Session identifier; maps to V$SESSION.SID

2、EVENT
session当前等待的事件,或者最后一次等待事件

3、WAIT_TIME
If the session is currently waiting, then the value is 0. If the session is not in a wait, then the value is as follows:
Value>0 – Value is the duration of the last wait in hundredths of a second
Value=-1 – Duration of the last wait was less than a hundredth of a second
Value=-2 – Parameter TIMED_STATISTICS was set to false

4、SEQ#
session等待事件将触发其值自增长

5、P1, P2, P3
等待事件中等待的详细资料

6、P1TEXT, P2TEXT, P3TEXT
解释说明p1,p2,p3事件

7、State
Wait state:
WAITING – Session is currently waiting
WAITED UNKNOWN TIME – Duration of the last wait is unknown; this is the value when the parameter TIMED_STATISTICS is set to false
WAITED SHORT TIME – Last wait was less than a hundredth of a second
WAITED KNOWN TIME – Duration of the last wait is specified in the WAIT_TIME column

8、SECONDS_IN_WAIT
If WAIT_TIME = 0, then SECONDS_IN_WAIT is the seconds spent in the current wait condition.
If WAIT_TIME > 0, then SECONDS_IN_WAIT is the seconds since the start of the last wait, and SECONDS_IN_WAIT – WAIT_TIME / 100 is the active seconds since the last wait ended.

9、Wait_time和Second_in_wait字段值与state相关
如果state值为Waiting,那么wait_time值无用。Second_in_wait值是实际的等待时间(单位:秒)。
如果state值为Wait unknow time,那么wait_time值和Second_in_wait值都无用。
如果state值为Wait short time,那么wait_time值和Second_in_wait值都无用。
如果state值为Waiting known time,那么wait_time值就是实际等待时间(单位:秒),Second_in_wait值无用。

10、应用p1,p2,p3进行等待事件的分析
v$session_wait视图的列代表的缓冲区忙等待事件如下:
P1—与等待相关的数据文件的全部文件数量。
P2—P1中的数据文件的块数量。
P3—描述等待产生原因的代码。
例:select p1 “File #”, p2 “Block #”, p3 “Reason Code”
  from v$session_wait
  where event = ‘buffer busy waits’;
如果以上查询的结果显示一个块在忙等待,以下的查询将显示这一块的名称和类型:
select owner, segment_name, segment_type
 from dba_extents
 where file_id = &P1 and &P2 between block_id and block_id + blocks -1;
我们也可以查询dba_data_files以确定等待的文件的file_name,方法是使用v$session_wait中的P1。
从v$session_wait中查询P3(原因编码)的值可以知道session等待的原因。原因编码的范围从0到300,下列为部分编码所代表的事项:
0 块被读入缓冲区。
100 我们想要NEW(创建)一个块,但这一块当前被另一session读入。
110 我们想将当前块设为共享,但这一块被另一session读入,所以我们必须等待read()结束。
120 我们想获得当前的块,但其他人已经将这一块读入缓冲区,所以我们只能等待他人的读入结束。
130 块被另一session读入,而且没有找到其它协调的块,所以我们必须等待读的结束。缓冲区死锁后这种情况也有可能产生。所以必须读入块的CR。
200 我们想新创建一个block,但其他人在使用,所以我们只好等待他人使用结束。
210 Session想读入SCUR或XCUR中的块,如果块交换或者session处于非连续的TX模式,所以等待可能需要很长的时间。
220 在缓冲区查询一个块的当前版本,但有人以不合法的模式使用这一块,所以我们只能等待。
230 以CR/CRX方式获得一个块,但块中的更改开始并且没有结束。
231 CR/CRX扫描找到当前块,但块中的更改开始并且没有结束

Oracle AWR报告日常分析–SQL语句

1 SQL ordered by Elapsed Time
记录了执行总和时间的TOP SQL(请注意是监控范围内该SQL的执行时间总和,而不是单次SQL执行时间 Elapsed Time = CPU Time + Wait Time)。
Elapsed Time(S): SQL语句执行用总时长,此排序就是按照这个字段进行的。注意该时间不是单个SQL跑的时间,而是监控范围内SQL执行次数的总和时间。单位时间为秒。Elapsed Time = CPU Time + Wait Time
CPU Time(s): 为SQL语句执行时CPU占用时间总时长,此时间会小于等于Elapsed Time时间。单位时间为秒。
Executions: SQL语句在监控范围内的执行次数总计。
Elap per Exec(s): 执行一次SQL的平均时间。单位时间为秒。
% Total DB Time: 为SQL的Elapsed Time时间占数据库总时间的百分比。
SQL ID: SQL语句的ID编号,点击之后就能导航到下边的SQL详细列表中,点击IE的返回可以回到当前SQL ID的地方。
SQL Module: 显示该SQL是用什么方式连接到数据库执行的,如果是用SQL*Plus或者PL/SQL链接上来的那基本上都是有人在调试程序。一般用前台应用链接过来执行的sql该位置为空。
SQL Text: 简单的sql提示,详细的需要点击SQL ID。

2 SQL ordered by CPU Time:
记录了执行占CPU时间总和时间最长的TOP SQL(请注意是监控范围内该SQL的执行占CPU时间总和,而不是单次SQL执行时间)。

3 SQL ordered by Gets:
记录了执行占总buffer gets(逻辑IO)的TOP SQL(请注意是监控范围内该SQL的执行占Gets总和,而不是单次SQL执行所占的Gets)。

4 SQL ordered by Reads:
记录了执行占总磁盘物理读(物理IO)的TOP SQL(请注意是监控范围内该SQL的执行占磁盘物理读总和,而不是单次SQL执行所占的磁盘物理读)。

5 SQL ordered by Executions:
记录了按照SQL的执行次数排序的TOP SQL。该排序可以看出监控范围内的SQL执行次数。

6 SQL ordered by Parse Calls:
记录了SQL的软解析次数的TOP SQL。说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程。

7 SQL ordered by Sharable Memory:
记录了SQL占用library cache的大小的TOP SQL。Sharable Mem (b):占用library cache的大小,单位是byte。

8 SQL ordered by Version Count:
记录了SQL的打开子游标的TOP SQL。

9 SQL ordered by Cluster Wait Time:
记录了集群的等待时间的TOP SQL