ITPub博客

首页 > Linux操作系统 > Linux操作系统 > recreate repos 卡住

recreate repos 卡住

原创 Linux操作系统 作者:westzq1984 时间:2010-07-16 22:40:18 0 删除 编辑
今天新装一个库,最后dbconsole起不来,最后想用emca -repos recreate重建一个EM资料库
重建EM资料库会先删后建,删的时候,会启动数据库到quiesce模式,这个一定要注意

删的时候,很久都没动静,v$session_wait看到是经常在latch: library cache上等待,很奇怪
捕获SQL看了下
declare
  l_username varchar2(30);
  l_sid number;
  l_serial number;
  err number;
  c number;
begin
    -- Now, drop the SYSMAN user
    c := 0;
    l_username := upper('SYSMAN');
    begin
     loop
        BEGIN
          LOOP
            BEGIN
              FOR crec in (SELECT sid, serial#
                             FROM v$session
                    WHERE upper(username)=l_username
                              AND status NOT IN('KILLED'))
              LOOP
                BEGIN
                   EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' ||
                                     crec.sid || ',' || crec.serial# || '''';
                  EXCEPTION
                      WHEN OTHERS THEN
                         err := SQLCODE;
                         IF err != -30 THEN
                            EXIT;
                         END IF;
                END;
                commit;
              END LOOP;
              EXCEPTION
                WHEN OTHERS THEN
                  err := SQLCODE;
                  IF err != -30 THEN
                    EXIT;
                  END IF;
            END;
            IF SQL%NOTFOUND THEN
               EXIT;
            END IF;
            commit;
          END LOOP;
          execute immediate 'drop user ' || l_username || ' cascade';
          exit;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              exit;
            WHEN OTHERS THEN
              err := SQLCODE;
              IF err = -1918 THEN
                EXIT;
              ELSE
                IF err = -1940 THEN
                   NULL;
                ELSE
                   DBMS_OUTPUT.PUT_LINE('not 1940 err' || err);
                   c := c+1;
                   IF c > 50 THEN
                      RAISE;
                   END IF;
                END IF;
              END IF;
        END;
      end loop;
    end;
    commit;

end;

这个SQL不停的出现,是在做一个轮询,估计是卡在哪里了
判断这个SESSION的逻辑,其是在杀dbsnmp用户,检查了下dbsnmp,发现有2个KILL状态的dbsnmp用户的SESSION。
在OS上干掉,OK。

另外说下resmgr:become active这个Scheduler类的等待,应该是由于数据库在quiesce模式,其他非SYSDBA权限的SESSION等待

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8242091/viewspace-668233/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-06

  • 博文量
    251
  • 访问量
    1042183