ORA-12519

DB/ORACLE 2015. 3. 5. 10:13

ORA-12519, TNS:no appropriate service handler found


최대 프로세스 개수가 부족한 경우 발생 할 수 있으니

sys 계정으로 들어가


SQL> ALTER system SET processes=100 scope=spfile;

SQL> shutdown immediate;

SQL> startup


select * from v$resource_limit;

process 상태 확인

반응형
Posted by 질주하는구
,

날짜 구간이 길어짐에 따라 에러가 다음과 같이 발생하였다.

Mysql::Error: Incorrect key file for table ‘/tmp/#sql_61a9_0.MYI’; try to repair it


-' analyze table [테이블 명] ' 으로 테이블 상태가 깨진 것인지 확인 해본다.

-status : error 로 깨져있었음 -> 'repair table [테이블 명] ' 으로 복구 시도 여전히 안됨

-mysql 의 my.conf 에서 key_buffer 크기를 늘려봄

-key_buffer:16M 에서 256M으로 수정 여전히 안됨


결국 확인 해본 결과 

-유닉스 서버 공간 부족


저장하는 공간 확인해보기.

df -H : 서버의 공간을 확인해보니 /가 77% 였다. 결국 tmp를 설정 안하면 저장되는 곳이 / 인데 공간 부족이었던것

/data1 이 1%사용이라 여기에 /data1/tmp를 만들고 my.conf 에서 tmpdir = /data1/tmp/ 로 설정해주었다.

잘 동작함 tmp를 확인해 보니 값을 가져 올때 tmp에 파일을 임시로 생성했다가 다 가져오면 지우는 것을 알 수 있었다.


이 외에도 MS-SQL이나 ORACLE의 경우에도 저장공간의 부족으로 정상동작 안하는 경우가 있을수 있으니...

잘 확인 해야 합니다.

반응형

'DB > MY-SQL' 카테고리의 다른 글

com.mysql.jdbc.PacketTooBigException: Packet for query is too large  (0) 2016.10.25
tomcat resource 설정시  (0) 2015.10.24
NOW(), SYSDATE()의 차이  (0) 2015.05.29
resource설정시 url 옵션  (0) 2015.03.09
ManagementStudio auto commit 해제  (0) 2015.03.09
Posted by 질주하는구
,

로그인한 사용자의 테이블 리스트

select * from tab

반응형
Posted by 질주하는구
,

ORA-00054: 자원이 사용중이고, NOWAIT가 지정되어 있습니다


=>

1. lock이 걸려 있는 테이블을 SELECT문으로 테이블에 lock을 걸고 있는 session을 찾는다. 


su - oracle

패스워드


SQL> sqlplus /nolog

SQL> conn /as sysdba

SQL>

select a.sid, a.serial# 

from v$session a, v$lock b, dba_objects c 

where a.sid=b.sid and 

b.id1=c.object_id and 

b.type=\'TM\' and 

c.object_name=\'테이블명\';


       SID    SERIAL#

---------- ----------

       139       1110


2. 다음 명령으로 SESSION들을 KILL한다. 


SQL> alter system kill session \'139, 1110\';

반응형
Posted by 질주하는구
,

SYS계정으로 데이터 파일 리스트를 조회

select * from dba_data_files;


테이블 스페이스 생성 

create tablespace DATASPACENAME

DATAFILE 'E:\oraclexe\oradata\XE\DATASPACENAME.dbf' SIZE  50M 

EXTENT MANAGEMENT LOCAL

SEGMENT SPACE MANAGEMENT AUTO;


임의의 계정 생성 임시 테이블을 temp로 정의


 CREATE USER USERID

 IDENTIFIED BY USERPWD

 DEFAULT TABLESPACE DATASPACENAME

 TEMPORARY TABLESPACE temp ;


접속 및 생성 권한 추가


grant connect,resource to USERID


자동 증가 옵션 지정

alter database datafile 'E:\oraclexe\oradata\XE\DATASPACENAME.dbf'

 autoextend on;



반응형
Posted by 질주하는구
,

시간 관련 함수

DB/ORACLE 2015. 3. 4. 16:16

SELECT TRUNC(TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS')) || ' day ' ||

       TRUNC(MOD((TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS')),1)*24) || ' hour ' ||

       TRUNC(MOD((TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS'))*24,1)*60) || ' minute ' ||

       TRUNC(ROUND(MOD((TO_DATE('20010502223443','YYYYMMDDHH24MISS')-TO_DATE('20010501213344','YYYYMMDDHH24MISS'))*24*60,1)*60)) || ' sec '

       " Time Interval "

FROM DUAL ;

반응형
Posted by 질주하는구
,

오라클 CLOB를 사용하는 방법중 OraclePreparedStatement 사용해야 하는 경우


// 오라클 JDBC Driver에서 제공하는 OraclePreparedStatement를 import한다.

import oracle.jdbc.OraclePreparedStatement;


// CLOB 데이터 타입을 insert 또는 update할 경우 PreparedStatement 

// 선언 시 OraclePreparedStatement로 선언한다.

OraclePreparedStatement opstmt = null;


// Connection으로부터 prepardStatement를 가져올 때 형변환을 한다.

opstmt = (OraclePreparedStatement)con.preparedStatement(query);


// CLOB 형태의 데이터에 대한 opstmt세팅

opstmt.setStringForClob(n, string);

반응형
Posted by 질주하는구
,

ms-sql서버 작업시 신 버전에서(2005이상) 에서 * 등의 쿼리문을 사용 하려고 하면

호환성 레벨을 80이하로 맞춰야 한다는 문구가 나오는 경우가 있다

물론 LEFT OUTER JOIN등의 쿼리문을 사용해야 하겠지만 기존 소스 유지보수 혹은

부득이한 경우 아래의 쿼리문을 싱행해 준다


EXEC sp_dbcmptlevel '디비네임', '80';

반응형
Posted by 질주하는구
,

MS-SQL에서 INSERT문을 출력 해야 하는 경우 쿼리문을 이용해서 특정 테이블의 INSERT문을 출력 할 수 있습니다.

(SQL MENAGEMENT STUDIO의 데이터베이스별 태스크>데이터내보내기 로 가지고 올 수도 있습니다.)


프로시저를 생성 하고

use master 

go 

 

if exists (select name from sysobjects where name = 'sp_generate_insert_script') 

begin 

  drop proc sp_generate_insert_script 

  print 'old version of sp_generate_insert_script dropped' 

end 

go 

 

create procedure sp_generate_insert_script 

                 @tablename_mask varchar(30) = NULL 

as 

begin 


 

-- NOTE: If, when executing in the Query Analyzer, the result is truncated, you can remedy 

--       this by choosing Query / Current Connection Options, choosing the Advanced tab and 

--       adjusting the value of 'Maximum characters per column'. 

--       Unchecking 'Print headers' will get rid of the line of dashes. 

 

  declare @tablename       varchar (128) 

  declare @tablename_max   varchar (128) 

  declare @tableid         int 

  declare @columncount     numeric (7,0) 

  declare @columncount_max numeric (7,0) 

  declare @columnname      varchar (30) 

  declare @columntype      int 

  declare @string          varchar (30) 

  declare @leftpart        varchar (8000)    /* 8000 is the longest string SQLSrv7 can 

EXECUTE */ 

  declare @rightpart       varchar (8000)    /* without having to resort to concatenation      

*/ 

  declare @hasident        int 

 

  set nocount on 

 

  -- take ALL tables when no mask is given (!) 

  if (@tablename_mask is NULL) 

  begin 

    select @tablename_mask = '%' 

  end 

 

  -- create table columninfo now, because it will be used several times 

 

  create table #columninfo 

  (num      numeric (7,0) identity, 

   name     varchar(30), 

   usertype smallint) 

 

 

  select name, 

         id 

    into #tablenames 

    from sysobjects 

   where type in ('U' ,'S') 

     and name like @tablename_mask 

 

  -- loop through the table #tablenames 

 

  select @tablename_max  = MAX (name), 

         @tablename      = MIN (name) 

    from #tablenames 

 

  while @tablename <= @tablename_max 

  begin 

    select @tableid   = id 

      from #tablenames 

     where name = @tablename 

 

    if (@@rowcount <> 0) 

    begin 

      -- Find out whether the table contains an identity column 

      select @hasident = max( status & 0x80 ) 

        from syscolumns 

       where id = @tableid 

 

      truncate table #columninfo 

 

      insert into #columninfo (name,usertype) 

      select name, type 

        from syscolumns C 

       where id = @tableid 

         and type <> 37            -- do not include timestamps 

 

      -- Fill @leftpart with the first part of the desired insert-statement, with the fieldnames 

 

      select @leftpart = 'select ''insert into '+@tablename 

      select @leftpart = @leftpart + '(' 

 

      select @columncount     = MIN (num), 

             @columncount_max = MAX (num) 

        from #columninfo 

      while @columncount <= @columncount_max 

      begin 

        select @columnname = name, 

               @columntype = usertype 

          from #columninfo 

         where num = @columncount 

        if (@@rowcount <> 0) 

        begin 

          if (@columncount < @columncount_max) 

          begin 

            select @leftpart = @leftpart + @columnname + ',' 

          end 

          else 

          begin 

            select @leftpart = @leftpart + @columnname + ')' 

          end 

        end 

 

        select @columncount = @columncount + 1 

      end 

 

      select @leftpart = @leftpart + ' values(''' 

 

      -- Now fill @rightpart with the statement to retrieve the values of the fields, correctly formatted 

 

      select @columncount     = MIN (num), 

             @columncount_max = MAX (num) 

        from #columninfo 

 

      select @rightpart = '' 

 

      while @columncount <= @columncount_max 

      begin 

        select @columnname = name, 

               @columntype = usertype 

          from #columninfo 

         where num = @columncount 

 

        if (@@rowcount <> 0) 

        begin 

 

          if @columntype in (39,47) /* char fields need quotes (except when entering NULL); 

                                    *  use char(39) == ', easier readable than escaping 

                                    */ 

          begin 

            select @rightpart = @rightpart + '+' 

            select @rightpart = @rightpart + 'ISNULL(' + replicate( char(39), 4 ) + '+replace(' + 

@columnname + ',' + replicate( char(39), 4 ) + ',' + replicate( char(39), 6) + ')+' + replicate

( char(39), 4 ) + ',''NULL'')' 

          end 

 

          else if @columntype = 35 /* TEXT fields cannot be RTRIM-ed and need quotes   */ 

                                   /* convert to VC 1000 to leave space for other fields */ 

          begin 

            select @rightpart = @rightpart + '+' 

            select @rightpart = @rightpart + 'ISNULL(' + replicate( char(39), 4 ) + '+replace

(convert(varchar(1000),' + @columnname + ')' + ',' + replicate( char(39), 4 ) + ',' + 

replicate( char(39), 6 ) + ')+' + replicate( char(39), 4 ) + ',''NULL'')' 

          end 

 

          else if @columntype in (58,61,111) /* datetime fields */ 

          begin 

            select @rightpart = @rightpart + '+' 

            select @rightpart = @rightpart + 'ISNULL(' + replicate( char(39), 4 ) + '+convert

(varchar(20),' + @columnname + ')+'+ replicate( char(39), 4 ) + ',''NULL'')' 

          end 

 

          else   /* numeric types */ 

          begin 

            select @rightpart = @rightpart + '+' 

            select @rightpart = @rightpart + 'ISNULL(convert(varchar(99),' + @columnname 

+ '),''NULL'')' 

          end 

 

 

          if ( @columncount < @columncount_max) 

          begin 

            select @rightpart = @rightpart + '+'',''' 

          end 

 

        end 

        select @columncount = @columncount + 1 

      end 

 

    end 

 

    select @rightpart = @rightpart + '+'')''' + ' from ' + @tablename 

 

    -- Order the select-statements by the first column so you have the same order for 

    -- different database (easy for comparisons between databases with different creation orders) 

    select @rightpart = @rightpart + ' order by 1' 

 

    -- For tables which contain an identity column we turn identity_insert on 

    -- so we get exactly the same content 

 

    if @hasident > 0 

       select 'SET IDENTITY_INSERT ' + @tablename + ' ON' 

 

    exec ( @leftpart + @rightpart ) 

 

    if @hasident > 0 

       select 'SET IDENTITY_INSERT ' + @tablename + ' OFF' 

 

    select @tablename      = MIN (name) 

      from #tablenames 

     where name            > @tablename 

  end 

 

end


해당 계정으로 아래 내용을 변경후 실행


use TEST_DATABASE(DB이름)

go


DECLARE cur_konan_Test CURSOR FAST_FORWARD

FOR

SELECT 'template'(테이블 이름)


OPEN cur_konan_Test


DECLARE @v_name VARCHAR(100)


FETCH NEXT FROM cur_konan_Test INTO @v_name


WHILE @@FETCH_STATUS = 0

BEGIN

print  char(10) + @v_name + ' 스크립팅중 ' + char(10)

print '--------------------------------------------------'

exec ('EXEC sp_generate_insert_script ''' + @v_name + '''')

FETCH NEXT FROM cur_konan_Test INTO @v_name

END


--커서 CLOSE

CLOSE cur_konan_Test


--커서 DEALLOCATE

DEALLOCATE cur_konan_Test

GO

반응형
Posted by 질주하는구
,

오라클 사용중 특정 index를 쿼리문에서 지정 해야 하는 경우 사용하는 

쿼리문 작성 방식 입니다.


/*+ INDEX ( table [index [index]...] ) */

ex>

select /*+ INDEX(idx_emp_job) */ 

       ename, 

       job 

from emp 

where job= '프로그래머';


DELETE /*+ INDEX(idx_emp_status)*/ 

FROM emp_status

WHERE status = '휴직';


그외 INDEX 문구 부분에 INDEX_ASC , INDEX_DESC 등의 정렬을 지정하여 힌트를 사용 할 수도 있습니다.

역시 번외로 FULL , NO_INDEX 등을 사용해서 풀스캔(FULL) , 인덱스 비사용(NO_INDEX)등의 

정의를 할 수 있습니다.


ex>

select /*+ FULL(emp) */ ename, sal

from emp

where sex = 'M'


select /*+ NO_INDEX(emp) */ ename, sal

from emp where sex = 'M';

반응형
Posted by 질주하는구
,