接上篇
在成功添加完agent以后,我们可以手动将数据库添加到OMS的targets中。
添加起来比较简单,在这里就不一一赘述。
主要介绍下遇到的主要问题:
如果之前添加过一次,然后删除了,再次添加会报错,一般有可能会遇到下面几种错:
ORA-20600: The specified target is in the process of being deleted
或者报在执行sysman下某个trigger时出错。
主要原因就是sysman下某些表未清除干净,一般是遇到了exception,这时候就需要手动来清除这些表中的记录。
先介绍几个表:
MGMT_TARGETS --目前在GC中能看到的target都在此表中,删除了的对象不在此
MGMT_TARGETS_DELETE --记录执行过删除操作的target,如果delete_complete_time为空,则有可能删除操作正在进行中
MGMT_TARGET_DELETE_EXCEPTIONS --记录了删除失败所有可能涉及到的表名
首先可以先尝试用下面的方法再执行下delete target的操作:
exec mgmt_admin.delete_target('mgcdb2','oracle_database') --这里2个参数分别对应MGMT_TARGETS中的target_name和target_type
exec mgmt_admin.delete_target_internal('mgcdb2','oracle_database')
如果报错,只有用手工的方式来清除相关记录了:(参考metalink 849388.1)
1. 停止agent
2. 执行 exec mgmt_admin.cleanup_agent('racn2:3872') --这个主机名和端口号可以在emctl status agent的结果中得到,或是在MGMT_TARGETS之前的记录中得到
3.运行如下sql
select 'delete from ' || o.name || ' where ' || c.name ||
' not in (SELECT target_guid FROM MGMT_TARGETS) and ' || c.name ||
' !=''00000000000000000000000000000000'';'
from sys.obj$ o, sys.tab$ t ,sys.col$ c
where o.owner# = userenv('SCHEMAID')
and c.name like ('%TARGET_GUID%')
and c.obj# = o.obj#
and (o.name like ('MGMT_%') OR o.name like ('OCS_%'))
and o.obj# = t.obj#
and bitand(t.property, 1) = 0
and bitand(c.property,32) = 0
and bitand(c.property,512) = 0
and o.name not in (SELECT table_name
FROM MGMT_TARGET_DELETE_EXCEPTIONS)
order by o.name;
将结果copy出来直接运行。
4.清除agent下相关文件
如果是rac环境 则需要在各个node的文件夹下删除,
rm -r $ORACLE_HOME/<nodename>/sysman/emd/state/*
rm -r
$ORACLE_HOME/<nodename>/sysman/emd/collection/*
rm -r
$ORACLE_HOME/<nodename>/sysman/emd/upload/*
rm
$ORACLE_HOME/<nodename>/sysman/emd/lastupld.xml
rm
$ORACLE_HOME/<nodename>/sysman/emd/agntstmp.txt
rm
$ORACLE_HOME/<nodename>/sysman/emd/blackouts.xml
rm
$ORACLE_HOME/<nodename>/sysman/emd/protocol.ini
5. 然后resecure agent,start agent 继续执行添加数据库的操作