생계/OERR2017. 9. 21. 17:34

INSERT /*+ append */ INTO AAA SELECT /*+ parallel(A 8) full(A) */ * FROM BBB;

 

SELECT COUNT(*) FROM AAA;

append 로 insert 하고 select 를 하면 ora-12838 에러가 난다.

 

 

[oracle@ora01:/ORACLE]$oerr ora 12838

12838, 00000, "cannot read/modify an object after modifying it in parallel"

// *Cause: Within the same transaction, an attempt was made to add read or

// modification statements on a table after it had been modified in parallel

// or with direct load. This is not permitted.

// *Action: Rewrite the transaction, or break it up into two transactions:

// one containing the initial modification and the second containing the

// parallel modification operation.

 

 

rollback을 하던지 commit 을 해야함..

 

append 나 parallel 로 수정을 하는 트랜잭션은 작업 끝나면 commit 이나 rollback으로 트랜잭션을 

완료를 해야 수정한 부분에 대해서 조회나 DML 작업이 가능함.

 

 

 

 

 

 

 

 

반응형
Posted by 돌고래트레이너
생계/기타2017. 9. 19. 10:45

인포믹스 DB 상태 안좋을 때 덤프 떠놓기


onstat -a > output.dmp
=> 전체 관한 로그 ( 5분간격)


onstat -k | grep x
=> exclusive 로 잡는 세션 확인


onmode -z 세션id
=> 프로세스 kill


onstat -g sql 0 > sql.dmp ( 1분 간격)
=> 전체 sql 확인

          '-' => 이미 처리된

         나머지 => 아직 처리 안된

세션 아이디 확인 해보구
계속 처리가 안되는지 모니터링

반응형
Posted by 돌고래트레이너
생계/Sybase2017. 9. 14. 15:31

* Sybase ASE 의 데이터를 IQ 로 이관하기


1) ASE data를 bcp out 
 
bcptest 을 bcp out 으로 덤프 떨군다.


set rowcount 10

select * into bcptest
from ....
 
sybase@/sybase/DBA/lkj/work> bcp dba..bcptest out bcptest.txt -Usa -Ppassword -t'||' -r'\n' -c


2) .txt 파일을 IQ 로 ftp 전송


3) IQ에서 load 하는 쉘 작성


dipiq1:/sybase_iq/iq154/DBA

vi load.sql
----------------------------------
load table tb_test(col1, col2,....)
from '/sybase/tmp/tb_test.bcp'
QUOTES OFF
ESCAPES OFF
FORMAT BCP
ROW DELIMITED BY '\n'
DELIMITED BY '||'
;
----------------------------------

3) 실행

dbisql -c dsn=DBA -q load.sql > load.out





 

반응형

'생계 > Sybase' 카테고리의 다른 글

오라클 12c CDB common 유저 생성  (0) 2017.12.14
Sybase Storage정보  (0) 2017.09.11
Sybase 성능분석 로그 편집 쉘  (0) 2017.09.09
Sybase DB사용량  (0) 2017.09.09
Sybase session kill  (0) 2017.09.09
Posted by 돌고래트레이너
생계/Oracle2017. 9. 13. 17:49


여러개의 반복되는 쿼리 수동으로 만들기 귀찮을 때... 

비싼 오라클에게 일을 맡기자.


예를 들어 AAA 테이블의 data 를 select 해서 AAA2 로 insert 하는 경우

insert into AAA2 select * from AAA

이렇게 하면 된다. 

하지만 AAA 의 데이터량이 많아서 운영중에 대량 insert 하기 부담스러운 상황일 경우..

마침 AAA 테이블의 key_date 컬럼이 있다고 치고 key_date 의 값에 따라 쪼개서 insert 를 할수 있다. 


i.e) insert into AAA2 select * from AAA 

where key_date between TO_DATE('20170915') +9/24 and TO_DATE('20170915') +10/24 

and key_date < TO_DATE('20170915') +10/24;


이런식으로 9월 15일 9시부터 10시 까지의 데이터를 insert 하고 10시 부터 11시 계속 1시간 단위로 
쪼개서 SQL 을 실행시킬수 있다. 

근데 만약, 시간을 많이 쪼개야 한다거나 테이블이 AAA 와 동일하게 BBB, CCC, DDD 도 있다면..


손으로 일일이 작성하기 귀찮고 오타가 날 확률도 높아진다.


아래처럼 해보자.


select 'INSERT INTO '||TAB||'2 SELECT * FROM '||TAB||' WHERE KEY_DATE BETWEEN TO_DATE('||''''||'20170914'||''''||
        ') +'||(17 + RN) ||'/24 and TO_DATE('||''''||'20170914'||''''||') +'||(18 + RN)||'/24 and KEY_DATE < TO_DATE('||''''||'20170914'||''''||') +'||(18 + RN)||'/24;'  stmt
from 
        (SELECT 'AAA' AS TAB FROM DUAL 
         UNION ALL 
         SELECT 'BBB' FROM DUAL
         UNION ALL
         SELECT 'CCC' FROM DUAL
         UNION ALL
         SELECT 'DDD' FROM DUAL
         )T,
         (SELECT ROWNUM RN
             FROM DBA_TABLES
           WHERE ROWNUM < 7
          )  
 ORDER BY TAB, RN 


========= 결과물 ===========================================================

INSERT INTO AAA SELECT * FROM AAA WHERE KEY_DATE BETWEEN TO_DATE('20170914') +18/24 and TO_DATE('20170914') +19/24 and KEY_DATE < TO_DATE('20170914') +19/24;
INSERT INTO AAA SELECT * FROM AAA WHERE KEY_DATE BETWEEN TO_DATE('20170914') +19/24 and TO_DATE('20170914') +20/24 and KEY_DATE < TO_DATE('20170914') +20/24;
INSERT INTO AAA SELECT * FROM AAA WHERE KEY_DATE BETWEEN TO_DATE('20170914') +20/24 and TO_DATE('20170914') +21/24 and KEY_DATE < TO_DATE('20170914') +21/24;
INSERT INTO AAA SELECT * FROM AAA WHERE KEY_DATE BETWEEN TO_DATE('20170914') +21/24 and TO_DATE('20170914') +22/24 and KEY_DATE < TO_DATE('20170914') +22/24;
INSERT INTO AAA SELECT * FROM AAA WHERE KEY_DATE BETWEEN TO_DATE('20170914') +22/24 and TO_DATE('20170914') +23/24 and KEY_DATE < TO_DATE('20170914') +23/24;
INSERT INTO AAA SELECT * FROM AAA WHERE KEY_DATE BETWEEN TO_DATE('20170914') +23/24 and TO_DATE('20170914') +24/24 and KEY_DATE < TO_DATE('20170914') +24/24;
INSERT INTO BBB SELECT * FROM BBB WHERE KEY_DATE BETWEEN TO_DATE('20170914') +18/24 and TO_DATE('20170914') +19/24 and KEY_DATE < TO_DATE('20170914') +19/24;
INSERT INTO BBB SELECT * FROM BBB WHERE KEY_DATE BETWEEN TO_DATE('20170914') +19/24 and TO_DATE('20170914') +20/24 and KEY_DATE < TO_DATE('20170914') +20/24;
INSERT INTO BBB SELECT * FROM BBB WHERE KEY_DATE BETWEEN TO_DATE('20170914') +20/24 and TO_DATE('20170914') +21/24 and KEY_DATE < TO_DATE('20170914') +21/24;
INSERT INTO BBB SELECT * FROM BBB WHERE KEY_DATE BETWEEN TO_DATE('20170914') +21/24 and TO_DATE('20170914') +22/24 and KEY_DATE < TO_DATE('20170914') +22/24;
INSERT INTO BBB SELECT * FROM BBB WHERE KEY_DATE BETWEEN TO_DATE('20170914') +22/24 and TO_DATE('20170914') +23/24 and KEY_DATE < TO_DATE('20170914') +23/24;
INSERT INTO BBB SELECT * FROM BBB WHERE KEY_DATE BETWEEN TO_DATE('20170914') +23/24 and TO_DATE('20170914') +24/24 and KEY_DATE < TO_DATE('20170914') +24/24;
INSERT INTO CCC SELECT * FROM CCC WHERE KEY_DATE BETWEEN TO_DATE('20170914') +18/24 and TO_DATE('20170914') +19/24 and KEY_DATE < TO_DATE('20170914') +19/24;
INSERT INTO CCC SELECT * FROM CCC WHERE KEY_DATE BETWEEN TO_DATE('20170914') +19/24 and TO_DATE('20170914') +20/24 and KEY_DATE < TO_DATE('20170914') +20/24;
INSERT INTO CCC SELECT * FROM CCC WHERE KEY_DATE BETWEEN TO_DATE('20170914') +20/24 and TO_DATE('20170914') +21/24 and KEY_DATE < TO_DATE('20170914') +21/24;
INSERT INTO CCC SELECT * FROM CCC WHERE KEY_DATE BETWEEN TO_DATE('20170914') +21/24 and TO_DATE('20170914') +22/24 and KEY_DATE < TO_DATE('20170914') +22/24;
INSERT INTO CCC SELECT * FROM CCC WHERE KEY_DATE BETWEEN TO_DATE('20170914') +22/24 and TO_DATE('20170914') +23/24 and KEY_DATE < TO_DATE('20170914') +23/24;
INSERT INTO CCC SELECT * FROM CCC WHERE KEY_DATE BETWEEN TO_DATE('20170914') +23/24 and TO_DATE('20170914') +24/24 and KEY_DATE < TO_DATE('20170914') +24/24;
INSERT INTO DDD SELECT * FROM DDD WHERE KEY_DATE BETWEEN TO_DATE('20170914') +18/24 and TO_DATE('20170914') +19/24 and KEY_DATE < TO_DATE('20170914') +19/24;
INSERT INTO DDD SELECT * FROM DDD WHERE KEY_DATE BETWEEN TO_DATE('20170914') +19/24 and TO_DATE('20170914') +20/24 and KEY_DATE < TO_DATE('20170914') +20/24;
INSERT INTO DDD SELECT * FROM DDD WHERE KEY_DATE BETWEEN TO_DATE('20170914') +20/24 and TO_DATE('20170914') +21/24 and KEY_DATE < TO_DATE('20170914') +21/24;
INSERT INTO DDD SELECT * FROM DDD WHERE KEY_DATE BETWEEN TO_DATE('20170914') +21/24 and TO_DATE('20170914') +22/24 and KEY_DATE < TO_DATE('20170914') +22/24;
INSERT INTO DDD SELECT * FROM DDD WHERE KEY_DATE BETWEEN TO_DATE('20170914') +22/24 and TO_DATE('20170914') +23/24 and KEY_DATE < TO_DATE('20170914') +23/24;
INSERT INTO DDD SELECT * FROM DDD WHERE KEY_DATE BETWEEN TO_DATE('20170914') +23/24 and TO_DATE('20170914') +24/24 and KEY_DATE < TO_DATE('20170914') +24/24;


자신의 상황에 따라 응용이 가능하다. 






반응형

'생계 > Oracle' 카테고리의 다른 글

oracle 12c silent mode 설치  (0) 2017.12.13
스키마모드 datapump 테스트  (0) 2017.12.06
오라클 datafile resize  (0) 2017.11.06
ORACLE 파티션테이블  (0) 2017.09.10
오라클 autotrace 옵션  (0) 2017.09.08
Posted by 돌고래트레이너
생계/Sybase2017. 9. 11. 01:58

-- 1. DB 별

SELECT  "HOST명"=@@servername,     
    "디바이스명" = substring(d.name, 1, 20),     
    "물리적디바이스명"=d.phyname,      
    "DB명" = db_name(u.dbid),     
    "할당(MB)" = str(round(u.size /(512.0/(@@maxpagesize/@@pagesize)),2),12,1),     
    "가용(MB)"=  str(round(curunreservedpgs(u.dbid,u.lstart,u.unreservedpgs)/ (512.0/(@@maxpagesize/@@pagesize)),2),12,1) ,     
    "사용율(%)"= str(round(  ((u.size-curunreservedpgs(u.dbid,u.lstart,u.unreservedpgs))*100.0/u.size),2),12,1) ,     
    "SegMap설명" = case segmap when 4 then "LOG"     
                   else "DATA" end,   
    convert(varchar(8),u.crdate,112) as crdate   
FROM   master.dbo.sysdevices d,      
     master.dbo.sysusages u      
WHERE  u.vdevno = d.vdevno

 

-- 2. device 별

SELECT  "HOST명"=@@servername,     
    "디바이스명" = substring(d.name, 1, 20),     
    "물리적디바이스명"=d.phyname,      
    "DB명" = db_name(u.dbid),     
    "할당(MB)" = str(round(u.size /(512.0/(@@maxpagesize/@@pagesize)),2),12,1),     
    "가용(MB)"=  str(round(curunreservedpgs(u.dbid,u.lstart,u.unreservedpgs)/ (512.0/(@@maxpagesize/@@pagesize)),2),12,1) ,     
    "사용율(%)"= str(round(  ((u.size-curunreservedpgs(u.dbid,u.lstart,u.unreservedpgs))*100.0/u.size),2),12,1) ,     
    "SegMap설명" = case segmap when 4 then "LOG"     
                   else "DATA" end,   
    convert(varchar(8),u.crdate,112) as crdate   
FROM   master.dbo.sysdevices d,      
     master.dbo.sysusages u      
WHERE   u.vdevno = d.vdevno

 

 -- 3. 테이블 사이즈

  select convert(varchar(30),o.name) as table_name,
    row_count(db_id(), o.id) as row_count,
    data_pages(db_id(), o.id) as pages,
    (data_pages(db_id(), o.id)*(@@maxpagesize/1024))/1024 as MB
 from sysobjects o
where type='U'
and name='테이블명'
order by table_name

반응형

'생계 > Sybase' 카테고리의 다른 글

오라클 12c CDB common 유저 생성  (0) 2017.12.14
BCP 로 ASE 에서 IQ 로 데이터 이관  (0) 2017.09.14
Sybase 성능분석 로그 편집 쉘  (0) 2017.09.09
Sybase DB사용량  (0) 2017.09.09
Sybase session kill  (0) 2017.09.09
Posted by 돌고래트레이너
생계/Oracle2017. 9. 10. 22:23

 -- 1.  파티션 테이블 생성

create table PT_TEST(
  NO NUMBER NOT NULL,
  NAME VARCHAR2(10) NULL
)
PARTITION BY RANGE(no)
(
     PARTITION PT_0 VALUES LESS THAN (0)
);


 -- 2. 파티션 테이블 추가

alter table PT_TEST ADD PARTITION PT_1 VALUES LESS THAN (5);
alter table PT_TEST ADD PARTITION PT_2 VALUES LESS THAN (10);

alter table PT_TEST ADD PARTITION PT_3 VALUES LESS THAN (15);

 -- 3. 테스트 데이터 INSERT
INSERT INTO PT_TEST VALUES (1 , 'A');
INSERT INTO PT_TEST VALUES (2 , 'B');
INSERT INTO PT_TEST VALUES (3 , 'C');
INSERT INTO PT_TEST VALUES (4 , 'D');
INSERT INTO PT_TEST VALUES (5 , 'E');
INSERT INTO PT_TEST VALUES (6 , 'F');
INSERT INTO PT_TEST VALUES (7 , 'G');
INSERT INTO PT_TEST VALUES (8 , 'H');
INSERT INTO PT_TEST VALUES (9 , 'I');
INSERT INTO PT_TEST VALUES (10 , 'J');
INSERT INTO PT_TEST VALUES (11 , 'K');

 

 -- 확인

SELECT * FROM PT_TEST
SELECT * FROM PT_TEST PARTITION (PT_1);
SELECT * FROM PT_TEST PARTITION (PT_2);

 

 -- 3. 파티션 삭제

ALTER TABLE  PT_TEST DROP PARTITION pt_1;

 

 -- 4. 파티션 이름 변경

ALTER TABLE PT_TEST RENAME PARTITION PT_1 TO PT_111;

 

-- 5.  파티션 TRUNCATE

ALTER TABLE pt_test TRUNCATE PARTITION PT_2;


-- 6. 파티션 exchange 

ALTER TABLE PT_TEST EXCHANGE PARTITION PT_2  WITH TABLE TEST  WITHOUT VALIDATION;


-- 7. 파티션 테이블 통계정보 

exec dbms_stats.gather_table_stats(cascade=>true,ownname=>'A',tabname=>'PT_TEST',partname=>'PT_2',

estimate_percent=>10,degree=>5,granularity=>'PARTITION');


반응형

'생계 > Oracle' 카테고리의 다른 글

oracle 12c silent mode 설치  (0) 2017.12.13
스키마모드 datapump 테스트  (0) 2017.12.06
오라클 datafile resize  (0) 2017.11.06
오라클 스크립트 생성 SQL  (0) 2017.09.13
오라클 autotrace 옵션  (0) 2017.09.08
Posted by 돌고래트레이너
생계/Sybase2017. 9. 9. 00:08

- Sybase 성능 분석 리포트 결과를 편집하는 쉘

 

isql 에서 sp_sysmon 을 실행하면 많은 항목들에 대한 결과가 나오는데

이중에서 내가 필요한 항목은 달랑 3개 (Engine Utilization, Data Cache Management, Procedure Cache Management)

정기적으로 보고 하는 자료이기에 매번 수동 편집하지 않고 실행만 하면 자동 편집되는 쉘을 만들었습니다.

 

비슷한 요구사항의 작업 시에 참고하기실...

grep -n 으로 원하는 내용의 라인수 출력,

파일 한줄씩 읽어들여 배열에 저장,

sed -n 으로 원하는 부분만 편집 등을 사용했습니다. 

 

 

01_exec_sysmon.sh  : isql 에서 sp_sysmon 실행

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

DATE=`date +%Y%m%d%H%M`

echo $DATE

isql -Usa -w400 -P1111 << 'EOF' >> ./logs/sysmon.log.$DATE
sp_sysmon '00:05:00'
go
exit
EOF
----------------------------------------------------------

 

 

02_make_editsh.sh : 분석로그를 편집하는 쉘을 만들기 위한 전 단계 (sed 에 변수($) 처리가 잘 안되서

                              echo 를 redirect 해서 결과를 쉘로 만들기

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

echo '\n'
echo '\n'
echo '### beginning of the shell ###'
echo '\n'

filename=`ls -l ./logs/sysmon.log.* | grep "^-" | tail -1 | awk '{print $9 }'`

echo 'The name of the result file is :' $filename
echo '\n'
echo '\n'

grep -n "Engine Utilization" $filename | awk '{print $1}' > filename.tmp
grep -n "Data Cache Management" $filename | awk '{print $1}' >> filename.tmp
grep -n "Procedure Cache Management" $filename | awk '{print $1}' >> filename.tmp

#cat filename.tmp

sed -e s/:/'  '/g filename.tmp | awk '{print $1}' > filename2.tmp

#cat filename2.tmp

index=0
while read line ; do
    ary[$index]="$line"
    index=$(($index+1))
done < filename2.tmp

a=${ary[0]}
b=${ary[1]}
c=${ary[2]}

aa=`expr $a + 23`
bb=`expr $b + 13`
cc=`expr $c + 7`

echo 'sed -n '\'$a','$aa'p'\' $filename '> engine_busy.log' > edit_log.sh
echo 'sed -n '\'$b','$bb'p'\' $filename '> cache_hit.log'   >> edit_log.sh
echo 'sed -n '\'$c','$cc'p'\' $filename '> procedure_cache.log' >> edit_log.sh

echo '\n'
echo '#### before executing editing shell ####'
echo '\n'

sh ./edit_log.sh

echo '#### done executing the editing shell ####'
echo '\n'

 

03_print_result.sh  : 편집된 결과 출력

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

echo '  ######################################################################### '
echo '\n'
cat engine_busy.log
echo '\n'
echo '  ######################################################################### '
echo '\n'
cat cache_hit.log
echo '\n'
echo '  ######################################################################### '
echo '\n'
cat procedure_cache.log
echo '\n'

 

반응형

'생계 > Sybase' 카테고리의 다른 글

BCP 로 ASE 에서 IQ 로 데이터 이관  (0) 2017.09.14
Sybase Storage정보  (0) 2017.09.11
Sybase DB사용량  (0) 2017.09.09
Sybase session kill  (0) 2017.09.09
Sybase User resource 제한  (0) 2017.09.08
Posted by 돌고래트레이너
생계/Sybase2017. 9. 9. 00:07

select t.HOST명, t.디바이스명, t.물리적디바이스명, t.DB명, t.할당, t.가용, t.사용율, t.SegMap설명, t.crdate
from
(
SELECT      
"HOST명"=@@servername,     
"디바이스명" = substring(d.name, 1, 20),     
"물리적디바이스명"=d.phyname,      
"DB명" = db_name(u.dbid),     
"할당" = round(u.size /(512.0/(@@maxpagesize/@@pagesize)),2),     
"가용"=  round(curunreservedpgs(u.dbid,u.lstart,u.unreservedpgs)/ (512.0/(@@maxpagesize/@@pagesize)),2) ,     
"사용율"= round(  ((u.size-curunreservedpgs(u.dbid,u.lstart,u.unreservedpgs))*100.0/u.size),2) ,     
"SegMap설명" = case segmap when 4 then "LOG"     
               else "DATA" end,   
convert(varchar(8),u.crdate,112) as crdate,1 col
FROM      
master.dbo.sysdevices d,      
master.dbo.sysusages u      
WHERE   u.vdevno = d.vdevno
and d.phyname not in ('/dev/rmt4','/dev/rst0')
and db_name(u.dbid) not in ('master','sybsystemdb','sybsystemprocs','tempdb','tempdb2')     
union all
SELECT      
"HOST명"=@@servername,     
"디바이스명" = substring(d.name, 1, 20),     
"물리적디바이스명"=d.phyname,      
"DB명" = db_name(u.dbid),     
"할당" = round(u.size /(512.0/(@@maxpagesize/@@pagesize)),2),     
"가용"=  round(curunreservedpgs(u.dbid,u.lstart,u.unreservedpgs)/ (512.0/(@@maxpagesize/@@pagesize)),2) ,     
"사용율"= round(  ((u.size-curunreservedpgs(u.dbid,u.lstart,u.unreservedpgs))*100.0/u.size),2) ,     
"SegMap설명" = case segmap when 4 then "LOG"     
               else "DATA" end,   
convert(varchar(8),u.crdate,112) as crdate, 2 col   
FROM      
master.dbo.sysdevices d,      
master.dbo.sysusages u      
WHERE   u.vdevno = d.vdevno
and d.phyname not in ('/dev/rmt4','/dev/rst0')
and db_name(u.dbid) in ('master','sybsystemdb','sybsystemprocs','tempdb','tempdb2')     
) t
ORDER BY col, DB명

 

 

 

sybase 15.7 기준

반응형

'생계 > Sybase' 카테고리의 다른 글

Sybase Storage정보  (0) 2017.09.11
Sybase 성능분석 로그 편집 쉘  (0) 2017.09.09
Sybase session kill  (0) 2017.09.09
Sybase User resource 제한  (0) 2017.09.08
Sybase 테이블 관련  (0) 2017.09.08
Posted by 돌고래트레이너
생계/Sybase2017. 9. 9. 00:00
1) isql 접속

isql -Usa -w400     

 

2) lock session check

sp_lock

-- lock check

sp_who

-- session check

spid 확인

 

3) kill 세션

 

kill 'spid'

 

반응형

'생계 > Sybase' 카테고리의 다른 글

Sybase 성능분석 로그 편집 쉘  (0) 2017.09.09
Sybase DB사용량  (0) 2017.09.09
Sybase User resource 제한  (0) 2017.09.08
Sybase 테이블 관련  (0) 2017.09.08
Sybase Role관련  (0) 2017.09.08
Posted by 돌고래트레이너
생계/Sybase2017. 9. 8. 23:57

# ASE

 

 

-- 건수제한

sp_modify_resource_limit '계정', NULL,'at all times',row_count,건수,2,4,1

 

-- 시간제한

sp_modify_resource_limit ‘계정’, NULL,'at all times',elapsed_time,시간,2,4,6

ex) sp_modify_resource_limit 'testuser', NULL,'at all times',row_count,200,2,4,1

확인 : sp_help_resource_limit 

 

#IQ

​sp_iqcheckoptions

set option 계정.QUERY_ROWS_RETURNED_LIMIT ='1000'

반응형

'생계 > Sybase' 카테고리의 다른 글

Sybase 성능분석 로그 편집 쉘  (0) 2017.09.09
Sybase DB사용량  (0) 2017.09.09
Sybase session kill  (0) 2017.09.09
Sybase 테이블 관련  (0) 2017.09.08
Sybase Role관련  (0) 2017.09.08
Posted by 돌고래트레이너