반응형
이번에 7.3 으로 ER Win Version UP 했숨다~! 그거에 맞춰서 DB Oracle 에는 테이블에 Comment 컬럼이 있어요.
토드에서 테이블명 입력 후 F4 키를 누르시면 Table Description 을 볼 수 있습니다



이제 저녀석을 Reverse 해서 저 Comment 값을 Logical 로 변경하는 ER Win 작업을 해 보겠습니다.



* Reverse Engineer 를 사용하여 DB 내용 값을 긁어오기

1. Tools - Reverse Engineer.. 를 선택합니다.



2. 어떤 타입의 DB 내용과 Logical 도 함께 긁어올 것인지 Physical 만 긁어 올 것인지 선택합니다.

 Oracle 10g 이므로 Oracle 을 선택 하였습니다 ^^
Next 를 누릅니다.



3. Option 을 선택 합니다.

전, 선택된 사용자만 가져올 것이기 떄문에 Owners 를 선택하여 사용자 스키마 명을 써 주었습니다

Infra 탭에서는 Primary Key(주키) 값 과 Relations (관계) 를 함께 보여줄 것이기 떄문에 체크 합니다.
Physical 및 Logical 의 이름은 모두 대문자로 볼 것 이기 떄문에 UPPER 를 선택하였습니다.

설정이 끝나면 Next 누릅니다.



4. Oracle Connection 화면 창이 뜨네요.

Database : Oracle 10g/11g  (오라클 10g 이므로..)
Authentication : Database Authentication ( 디비 사용자 할꺼임 -0-)
User Name : 사용자 명
Password : 패스워드

Connection String : SID
 명(자기 로컬일 경우)을 써 줍니다.

외부 데이터로 붙을 때에는  Connection String : nerv.kr/xe 이런식으로 써 줍니다.

< 이전 ERWin 4.1 버전에는 ip 주소 까지 써주었는데... 이번 7버전은 없네요 -_-;;; 
tns.ora 파일에서 설정해 준 값으로 가나 봅니다..>

설정이 끝나면 Connect 를 누릅니다.



5. Reverse Engineer 의 상태 값이 뜨네요... 막~ 읽힐꺼예요.. 조금 시간적 여유를 가지세요! ^-^



6. 중간 중간 물어봅니다. 아까 Infra 탭에서 Primary Key 와 Relation 에 대한걸 물어보네요... Yes 를 누릅니다.



7. 쨔-잔~!! ERD 가 뽑아져 나왔네요! ^-^




자, 바로 이어서 Logical 을 Comment 로 바꾸는거 나갑니다~! ^-^



* ERD Comment 를  Logical 로 변경하기

8. Logical 로 변경할 테이블을 선택 합니다. 
(선택하면 아래처럼 빨간 네모 박스처럼 선택된 테이블은 윗대가리가 까맣네요! ^-^)
전체 선택 할꺼면 Ctrl + A



9. 다음엔 무슨작업을 할꺼냐면... 중요!!!!!!!!

Logical 변경 값에 따라 Physical 값도 같이 변경 되기 때문에 둘을 분리 하는 작업입니다.
위에서 테이블을 선택 한 다음 마우스 오른쪽을 누른 후 Harden Physical Names 를 선택합니다.

그럼 Logical 이름과 Physical 이름이 따로 가게 됩니다 ^^



상태 창에 다음과 같은  Action 이 쭈욱~ 떨어지게 됩니다 ^^



10. 뭐가 변경되었는지 궁금하신지 보여 드리겠습니다. 

Model - Columns.. 를 선택합니다.



11. Rename  을 선택합니다.



12. Harden Physical Names 을 선택 하기 이전에는 다음과 같이 Attrivute* 이렇게 " * " 표시 모양이 있는데 Harden Physical Names  을 선택한 후에는 " * " 표시가 없습니다 ^^

변경전 >>


변경후>>


13. Physical 을 Logical 로 변경 합니다 (단축기는 Ctrl + Up & Down)



14.  Model - Domain Dictionary .. 를 선택합니다.



15. 
Edit Mode  : Logical 
Name Inherited by Attribute:* : %ColumnComment 
로 설정 합니다.

Name Inherited by Attrbute 의 값은 Macro Toolbox 를 누르면 선택이 가능합니다.



Attribute Macro  에 보면, 



%ColumnComment 를 선택 한 후 Insert Macro 한 후 Close  합니다.



16.  다음과 같이 %ColumnComment 만을 남겨두고 %AttDomain 이 남아 있다면 지우고 OK 를 누릅니다. ^^



17. Model - Attributes.. 를 선택 합니다. (계속 Logical 모드임)



18. 메시지가 뜨네요~! ^^ 확인을 누릅니다.



19. Reset 을 누릅니다.




20. 

Resetting Attribute : Reset all attributes in model  (ERD 전체 변경)
Select Properties to Reset : Name

을 선택 한 후 OK 를 누릅니다.

Only attribute PAGE_COMPONENT_ID 라고 되어 있는건 
: (해당 컬럼 값의 속성만 변경 - PAGE_COMPONENT_ID 컬럼 )
All attribute of entity PAGE_COMPONENT 라고 되어 있는건 
: (해당 테이블에 속해있는 속성만 변경 - PAGE_COMPONENT 테이블)



21. 테이블 내에서 중복되는 이름(Comment) 에 대해서 나옵니다. 
이때 Help 는 누르면 자세한 도움말을 볼 수 있습니다. (Ok, cancle, rename 에 관하여 영문 설명이 나옵니다)
(중복 안되게 변경해 주면 됩니다)



22. 이름으로 변경 된 화면을 감상 하실수 있습니다 ^-^ OK 를 눌러주세요!



23. Logical 일때의 모습입니다.



24. Physical 일때의 모습입니다.



테이블 명은 안바뀌는게 조금 아숩네요 -ㅅ-
혹, 테이블 명도 Comment 로 변경되는걸아시는분은 댓글 남겨 주세요~! ^_^

Comment 로 변경 안되더라도, 생 작업으로 변경 해 보도록 하겠습니다.


25. Model - Attribute 를 선택합니다.
Entity 에 변경할 테이블을 선택 한 후 Entity 이름 옆의 .... 를 누릅니다.



26. Name 이 있죠?!
저 Name 을 한글로 변경 한 후 OK 누르시면 됩니다 ^-^




출처: http://joke00.tistory.com/168 [Smile virus]




Harden Logical Names를 선택해 준 이유는 아래도 써 놨듯이, 이 작업을 수행하지 않으면, Column의 Comment가 변경되면 논리명도 자동으로 변경되기 때문입니다. ERwin r7에서는 다행이 이 기능을 지원하기 때문에 이후의 Comment 변경이 논리명에 영향을 주지 않도록 할 수 있습니다.

논리명과 물리명에 대한 수정 작업을 위해서는 다신 논리모델과 물리모델에서 전체를 선택하고 Unharden Logical Name과 Unharden Physical Name을 선택하면 됩니다 ^^

출처: http://joke00.tistory.com/168 [Smile virus]

반응형
반응형

오라클 SR 처리를 위해

아래와 같은 정보를 수집하면 편하다...

ulimit -a : 메모리 정보

uname -a : OS 정보

adrci : 문제가 발생한 내역 압축하기 (ips 명령 사용)

opatch : 현재 패치 내역 조회하기



testdb01:/oracle_test] ulimit -a

time(seconds)        unlimited

file(blocks)         unlimited

data(kbytes)         2000000

stack(kbytes)        8192

memory(kbytes)       unlimited

coredump(blocks)     4194303

testdb01:/oracle_test] uname -a

HP-UX testdb01 B.11.23 U ia64 1770507378 unlimited-user license



testdb01:/tmp] adrci


ADRCI: Release 11.1.0.7.0 - Production on Sat Jan 13 09:25:50 2018


Copyright (c) 1982, 2007, Oracle.  All rights reserved.


ADR base = "/oralog_test/dblog"

adrci> show problem


ADR Home = /oralog_test/dblog/diag/rdbms/testdb/testdb1:

*************************************************************************

PROBLEM_ID           PROBLEM_KEY                                                 LAST_INCIDENT        LASTINC_TIME                             

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

14                   ORA 600 [kjuscv]                                            1630464              2018-01-12 22:36:29.336735 +09:00       

13                   ORA 600 [kjucvl:!busy]                                      1630463              2018-01-12 22:36:25.059486 +09:00         

14 rows fetched


adrci> show incident


ADR Home = /oralog_test/dblog/diag/rdbms/testdb/testdb1:

*************************************************************************

INCIDENT_ID          PROBLEM_KEY                                                 CREATE_TIME                              

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

1630464              ORA 600 [kjuscv]                                            2018-01-12 22:36:29.336735 +09:00       

1630463              ORA 600 [kjucvl:!busy]                                      2018-01-12 22:36:25.059486 +09:00       

 

50 rows fetched


adrci> ips pack problem 13 in /tmp

Generated package 9 in file /tmp/ORA600kju_20180113092623_COM_1.zip, mode complete

adrci> ips pack problem 14 in /tmp 

Generated package 10 in file /tmp/ORA600kju_20180113092815_COM_1.zip, mode complete

adrci> ips pack incident 1630464 in /tmp

Generated package 11 in file /tmp/ORA600kju_20180113092948_COM_1.zip, mode complete

adrci> ips pack incident 1630463 in /tmp

Generated package 12 in file /tmp/ORA600kju_20180113093112_COM_1.zip, mode complete


opatch lsinventory

반응형
반응형

오라클 import 과정중에


아래와 같이 에러를 만났다


ora-00257 archiver error. connect internal only until freed


원인은 


아카이브 full로 인해 발생


근데 문제는 ASM 디스크 였다


아래의 쿼리를 통해 조회하면 archive err 상태를 확인 가능하다


SQL> select * from v$archive_dest;



방법은 수동 삭제와 자동 삭제가 있고


개발서버라 고민없이 RMAN으로 접속하여 자동으로 지웠다.


수동삭제


Subject:  How To Delete Archive Log Files Out Of +Asm? 

Doc ID:  Note:300472.1

The information in this document applies to: 

Oracle Server - Enterprise Edition - Version: 10.1.0.3

Information in this document applies to any platform.

Goal

How to delete archive log files out of +ASM? 

Fix

1. Run the following SQL to find the full path for the archivelog files.

SELECT CONCAT('+'||gname, SYS_CONNECT_BY_PATH(aname,'/')) full_path,

dir, sys FROM (SELECT g.name gname, a.parent_index pindex, a.name aname,

a.reference_index rindex, a.ALIAS_DIRECTORY dir, a.SYSTEM_CREATED sys

FROM v$asm_alias a, v$asm_diskgroup g

WHERE a.group_number = g.group_number)

START WITH (MOD(pindex, POWER(2, 24))) = 0

CONNECT BY PRIOR rindex = pindex

ORDER BY dir desc, full_path asc;

The results will look similar to the following.

+DSKGRP1/MAXCP/ARCHIVELOG/2004_11_15/thread_1_seq_970.1236.1

2. When the file is created by Oracle the format in +ASM is:

   DISKGROUP_NAME/db_name/file_type/creation_date/<file_name>.

This SQL will generate the SQL necessary to delete all archivelogs out of +ASM.

Note: Change the <diskgroup> and <dbname> to the actual values from what is returned from previous SQL output.

select 'alter diskgroup DSKGRP1 drop file

''<diskgroup>/<dbname>/ARCHIVELOG/'|| to_char(b.creation_date,'YYYY_MM_DD') ||'/'|| a.name||''';'

from v$asm_alias a, v$asm_file b

where a.group_number = b.group_number

and a.file_number = b.file_number

and b.type='ARCHIVELOG'

order by a.name;

This will generate SQL similar to the following.

alter DISKGROUP DSKGRP1 drop file  '+DSKGRP1/MAXCP/ARCHIVELOG/2004_11_15/thread_1_seq_970.1236.1';


자동삭제


$> rman target /


RMAN> crosscheck archivelog all;


RMAN> delete noprompt archivelog all;


참고 : http://interpiastory.tistory.com/21

http://kooremo.tistory.com/entry/ora00257archiver-error-Connect-internal-only-until-freed

http://database.sarang.net/?inc=read&aid=30826&criteria=oracle&subcrit=&id=&limit=20&keyword=blob&page=3

반응형
반응형

impdp 할때나 오류가 발생하면

3가지 해결 방법이 있는거 같으나...

mount 를 통해 깔끔하게 해결하는것을 권장....


expdp failed with ORA-31641: unable to create dump file ORA-27054: NFS file system where the file is created or resides is not mounted with correct options


expdp failed with ORA-31641: unable to create dump file ORA-27054: NFS file system where the file is created or resides is not mounted with correct options

While performing expdp on database getting below error. This is known error and workaround is available to fix it.

DataPump export fails with below errors:
Export: Release 11.2.0.1.0 - Production on Sun Nov 25 21:00:36 2016
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-31641: unable to create dump file "/devotd_dpump/expdp_metadata_vspp_sun.dmp"
ORA-27054: NFS file system where the file is created or resides is not mounted with correct options
Additional information: 3
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


This is the common error DBA faces. Reason for getting this error may be bug or incorrect option while mounting the NFS mount point. Also this known bug.


Solution 
The solution which worked in this case was to set the below event which disables the mount point parameter checking:
sqlplus / as sysdba
alter system set events '10298 trace name context forever, level 32';

Or:

Set the following event in the init.ora
event="10298 trace name context forever, level 32"

Or 
setting event is workaround provided by oracle if this not help you then kindly mount the NFS mount point with correct option as below-
# mount -F nfs -o rw,bg,hard,rsize=32768,wsize=32768,vers=3,forcedirectio,nointr,proto=tcp,suid host:/folder1/to1 /folder2/to2


Reference - ORA-27054: NFS file system where the file is created or resides is not mounted with correct options (Doc ID 781349.1)


반응형
반응형

impdp ORA-31640 ORA-31693 ORA-19505 ORA-27037


금일 IMPDP 명령어로


상콤하게 import 작업을 하다가 위와 같은 ora 에러르 만났다...


처음엔 깜놀 했다가


parallel 옵션 을 사용할 때 dump 파일을 모든 rac 노드가  읽지 못하기 때문이라고 알게되었다


cluster=N 옵션을 통해 해결 가능하다


아래는 원문이다.


When I am trying to import schema, The impdp is failed to open dump file. see below script I am using.

$ cat parfile.par
USERID='/ as sysdba'
DIRECTORY=IMP_DP
DUMPFILE=SMARTSUPPY_SCHEMA.dmp
logfile=SMARTSUPPY_SCHEMA_09nov2014.log
parallel=10
SCHEMAS='SMARTSUPPY_SCHEMA'

I got below error while import..

ORA-31693: Table data object "SMARTSUPPY_SCHEMA"."BPM_TRANS_90000":"P297" failed to load/unload and is being skipped due to error:
ORA-31640: unable to open dump file "/export/APSDBSR-1351/SMARTSUPPY_SCHEMA.dmp" for read
ORA-19505: failed to identify file "/export/APSDBSR-1351/SMARTSUPPY_SCHEMA.dmp"
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
. . imported "SMARTSUPPY_SCHEMA"."BPM_TRANS_90000":"P315"      265.3 MB 1484775 rows
. . imported "SMARTSUPPY_SCHEMA"."TRC_HOP_T_90000":"P139"      219.7 MB 1402774 rows

The issue is due to I am using PARALLEL=10, so the dump file directory not being accessible from all nodes in the RAC. When we use PARALLEL > 1 option the child thread will be started in other node to complete the job faster, when job started in other node the dump file can't access the file. Due to this we receive this error. To fix the issue either you place the dump file to be accessed from all the nodes in that RAC environment or use cluster=N option.

Added cluster=N parameter in parfile and started the import again. 

$ cat parfile.par
USERID='/ as sysdba'
DIRECTORY=IMP_DP
DUMPFILE=SMARTSUPPY_SCHEMA.dmp
logfile=SMARTSUPPY_SCHEMA_09nov2014.log
parallel=10
SCHEMAS='SMARTSUPPY_SCHEMA'
CLUSTER=N
$

$ nohup impdp parfile=parfile.par &
[1] 27620
> nohup: ignoring input and appending output to `nohup.out'
$
$ jobs -l
[1]+ 27620 Running                 nohup impdp parfile=parfile.par &
$

$ tail -f SMARTSUPPY_SCHEMA_09nov2014.log
Master table "SYS"."SYS_IMPORT_SCHEMA_03" successfully loaded/unloaded
Starting "SYS"."SYS_IMPORT_SCHEMA_03":  /******** AS SYSDBA parfile=parfile.par
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "SMARTSUPPY_SCHEMA"."BPM_COMPONENTS_90000":"P475"  1.956 GB 6711857 rows
. . imported "SMARTSUPPY_SCHEMA"."BPM_COMPONENTS_90000":"P480"  1.965 GB 6794127 rows
. . imported "SMARTSUPPY_SCHEMA"."BPM_COMPONENTS_90000":"P474"  1.958 GB 6727517 rows
. . imported "SMARTSUPPY_SCHEMA"."BPM_COMPONENTS_90000":"P479"  1.921 GB 6616816 rows
. . imported "SMARTSUPPY_SCHEMA"."BPM_COMPONENTS_90000":"P478"  1.903 GB 6512491 rows
. . imported "SMARTSUPPY_SCHEMA"."BPM_COMPONENTS_90000":"P481"  1.909 GB 6618578 rows

Hope this will help you.. :)

Best Regards,
Chowdari


출처 : http://mbc-dba.blogspot.kr/2014/11/impdp-ora-31640-ora-31693-ora-19505-ora.html

반응형
반응형

pctfree 

 

 a) 수정 시 늘어나는 데이타를 수용하기 위한 공간이다.     

 b) 디풀트는 10이나 빈번히 수정이 되면서 null 이었다가 데이타가 채워지는 경우는 

   이 값을 약 20 혹은 30 까지 크게 설정한다.  

PCTFREE(20%) : 블록은 80% 찰때까지 행을 삽입할수 있고 20%는 기존 행 갱신할경우를 위해
빈영역으로 남겨둔다. default 10%

 

pctused 

 

재사용되기 위해 필요한 블럭의 사용량을 설정한다.디폴트는 60이나 입력,

삭제가 자주 발생하지 않는 경우는 90 정도로 큰 값을 설정하고,

수정작업이 자주 발생하면서 로우 사이즈가 증가할 때에는 40 정도로 낮은 값을 설정한다.

PCTUSED(60%) : 사용된 영역이 40%보다 작아져야 새로운 행을 삽입할수 있다.

 

freelist 

 

 a) insert 작업 시 미리 사용 가능한 블럭을 리스트하고 있다가 할당하는 곳이다.     

 b) insert 작업이 많이 발생하는 테이블이나 인덱스에서는 이 값을 증가시켜 빈 블럭을 

   할당 받기 위해 대기하는 일이 없도록 한다.

 

freelists 와 Free List Group(OPS에서만 사용됨)은

주로 OPS에서 쓰여집니다.

늘리는 것은 결과치가 1%이하나 적당한 값이 나올때까지 허용하는 한도내에서 조금씩 늘립니다.

 

그럼 이제부터 쉽게 설명해 보겠습니다.

 

PCTUSED, PCTFREE 모두 Block에 대해서 지정하는 옵션 파라미터입니다.
오라클 데이타 입출력의 최소 단위는 Block인 것은 알고 계시리라 생각합니다.
PCTFREE는 update로 인해 기존 row가 커질 경우를 대비해서 예약해두는 공간입니다.
주로 varchar2 같이 가변 길이 자료형의 경우 업데이트를 통해서 row가 커질 수 있습니다. 그래서 update로 인해 자료 사이즈가 커질 수 있는 경우에는 pctfree를 크게 주라고 이야기합니다. 너무 크게 주면 한 블록에 들어갈 수 있는 row 수가 적어지므로 비효율적이겠지요.

비유를 해볼까요? 우리가 술잔에 술을 따를 때 넘치게 따르지 않습니다. 어느 정도 여유를 두고 따르죠.
그리고 애기들 옷살 때도 몸에 꼭맞는걸 사는게 아니라 약간 큰걸 사죠. 그래야... 애기가 커서도 입을 수 있으니까요. 

PCTUSED는 데이타를 삭제했을 경우에 필요한 파라미터입니다.
PCTFREE가 10%인 블록에 row를 계속해서 insert 해서 90%까지 차게되면 이 블록은 더 이상 insert를 하지 않고 다음 블록으로 넘어가게 됩니다. 그렇다면 다시 블록에 row를 delete로 삭제하면, 이 블록이 바로 재활용이 될까요? 아닙니다. 언제 다시 Freelist로 등록되어서 다음 insert 시 사용될 수 있을지를 지정하는 것이 pctused입니다.

말이 어려운 것 같아도 비유를 해봅시다.
앞서 비유와 같이 술잔을 10% 남겨두고 90%까지 채웠습니다. 
(PCTFREE 10%)
그런데 같이 술마시던 친구가 40%를 남겨두고 한모금에 마셨습니다.
그럼 한잔을 더 따라줘야 해야할까요? 말아야할까요?
어느 시점에서 술을 더 따라줘야할지 정해주는게 PCTUSED입니다.
PCTUSED가 40%라면 40% 이하로 친구가 술잔을 비우면 더 따라줘야합니다. (즉, Block을 delete 해서 사용량이 40% 이하로 내려갔을 때...)
한국 사람은 이 수위가 더 낮지요. 첨잔을 금기시하는 음주 문화라... ^^;
한국 사람의 경우 PCTUSED가 10%쯤 될까요? 거의 바닥이 보이게 되면 그제서야 "친구 한잔 더 받게"하면서 따라주죠.

그럼 Freelist는 뭘까요?
위에선 2명이서 마셨지만... 이제 동창회 모임이라서 20명이 한꺼번에 마십니다. 기억력이 나쁜 저는 어느 친구의 잔이 비었는지 목록이 필요해집니다. 즉, insert 의후보로 쓰일 수 있는 가용한 Block의 목록을 가지고 있는게 freelist입니다. 
pctused 이하로 술잔이 비워진 친구들의 목록을 기록해두는 장부라고 해두죠.
마지막으로 freelist에 가용한 블록이 전혀 없다면 어떻게 될까요?
그러면 extents를 추가로 더 할당받아야하겠죠. 그리고 다른 새로운 블록을 할당받아야합니다. HWM(High Water Mark)도 올라가겠지요.

그럼 PCTUSED와 PCTFREE 설정의 기준을 간략히 말하자면..


1. 오로지 insert만 되는 테이블 :  이 경우에는 PCTFREE를 아주 낮게 설정하는게 한 블록을 꽉꽉 채울 수 있으므로 더 효율적이겠지요.
전혀 업데이트가 없다면 PCTFREE 0%도 가능합니다.

2. insert와 delete가 반복되는 테이블 : 위에서는 insert만 이루어졌지만 이번에는 delete 가 됩니다. 그러면 pctfree  도 낮게 설정되어야하겠지만 pctused도 낮게 설정하는게 좋습니다.
pctused가 높다는 이야기는 블록의 데이타가 조금만 delete되어도 바로 freelist에 등록되어서 다음 insert의 후보로 사용된다는 이야기고...
왔다갔다하는 빈도수가 잦아지므로 좋지 않습니다. 

3. update 로 인해 row가 커질 수 있는 경우 : 위에서 언급한 바와 같이 pctfree를 Row migration이 안생기는 수준까지 키워주는게 좋습니다.

PCTUSED가 Delete로 인해서 40% 이하로 떨어지면 Freelist에 등록이 됩니다. 즉, 이 블록은 이제 재사용해도 좋다라는 허가가 떨어집니다.
이제 insert를 하면 다시 PCTFREE 10%를 남겨놓고 90%까지는 insert가 가능해집니다.

9i부터는 ASSM(Automatic Segment Space Management) 기능을 통해서 PCTUSED와 FREELIST를 없앴습니다.
(물론 이전처럼 사용하실 수도 있습니다만...)
어쨌거나 ASSM에서는 빈블록의 목록을 Freelist가 가지고 있는게 아니라... 세그먼트의 처음 3블록이 bitmap으로 가지고 있습니다.
즉, freelist를 일일이 뒤져보지 않아도 bitmap만 보면 그 블록이 얼마나  찼는지 알 수가 있습니다.
그래서 ASSM기능을 사용할 경우 PCTUSED와 Freelist는 사용하실 수가 없으며 PCTFREE만 DBA가 지정해주면 됩니다.
freelist를 뒤지는건 순차적인 작업이므로 동시에 DML 되는게 많다면 상당한 오버헤드였거든요.
특히 다수의 노드가 하나의 스토리지를 바라다보는 RAC 클러스터 같은 환경에선 ASSM이 Manual 에 비해서 35% 정도 빠르다는 오라클 내부 벤치마크 결과가 있습니다.
저는 ASSM을 권장하는 편입니다. Freelist, pctused를 제대로 설정한다는건 경험많은 DBA에게도 쉽지 않은 일이고... freelist를 뒤지는 오버헤드도 무시할 수가 없기 때문입니다.
ASSM 기능을 사용하시려면 9iR2 버젼에 9.2.0.4 이상의 패치셋을 반드시 적용하신 후 사용하시기 바랍니다.
(LOB Type 의 경우 corruption 문제가 있고 bitmap index관련해서도 버그가 리포트 되었습니다.)



반응형
반응형

-- PENDING OFFLINE 걸린 SEGMENT 조회
  select name, xacts ACTIVE_TRANSACTIONS FROM
  v$rollname, v$rollstat where status = 'PENDING OFFLINE' and v$rollname.usn = v$rollstat.usn;
 
  -- 특정 ROLLBANK 네임으로 검색
  SELECT S.SID
       , S.USERNAME
    FROM V$ROLLNAME R
       , V$TRANSACTION T
       , V$SESSION S
   WHERE R.NAME = '_SYSSMU26_3785803917$'
     AND T.XIDUSN = R.USN
     AND S.SADDR  = T.SES_ADDR;
    
    
  -- 전체 ROLLBACK 검색 (나온 SID를 KILL 해주면 정상 복구)
  SELECT S.SID
       , S.USERNAME
    FROM V$ROLLNAME R
       , V$TRANSACTION T
       , V$SESSION S
   WHERE R.NAME IN
         (
            select name FROM
                v$rollname, v$rollstat where status = 'PENDING OFFLINE' and v$rollname.usn = v$rollstat.usn
         )
     AND T.XIDUSN = R.USN
     AND S.SADDR  = T.SES_ADDR
     ;
    
  -- ROLLBACNK 상태 검색 
  select * from v$rollstat;    
 
  -- 특정 ROLLBACK 세그먼트 ONLINE
  alter rollback segment "_SYSSMU16_678252039$" online;
 
  -- 롤백 세그먼트 rbs 테이블 스페이스 크기 확인
  SELECT FILE_NAME, BYTES
    FROM DBA_DATA_FILES
   WHERE TABLESPACE_NAME = 'RBS';
  
 
 
  SELECT * FROM DBA_ROLLBACK_SEGS;
 
  -- 언두를 1G 추가 
  alter tablespace UNDOTBS1 add datafile '/u02/data/undotbs2.dbf' size 1000M;

반응형
반응형


내부적으로 호출 시작은
dbms_stats.gather_database_stats_job_proc()


-- 11g의 기본 자동 수집 테스트는 아래로 조회 가능
select * from dba_autotask_client;

-- 내용 조회
select * from DBA_SCHEDULER_WINDOWS;

-- 각 요일별 윈도우 확인하고
WINDOW_NAME => MONDAY_WINDOW는 월요일

지금 문제가 되는 토,일의 byhour가 6으로 (기본)

업무시간중에 수행되면 안됨

-- 특정 테이블 통계 정보 수집 이력 조회
select * from dba_tab_stats_history
        where table_name = '테이블명'
          and to_char(stats_update_time, 'yyyymmdd') = '20171230'
;

 

/*
    -- 기본 토요일 repeat_interval 값
    freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0
*/
-- 토요일의 시간을 6 => 22시로 변경
-- 아래의 명령어는 Active 상태를 TRUE => FALSE 로 만듬
-- /as sysdba 로 접속
exec dbms_scheduler.close_window('SATURDAY_WINDOW');


-- 비활성화
exec dbms_scheduler.disable('SATURDAY_WINDOW');

-- 반복되는 시간 속성 설정
exec dbms_scheduler.set_attribute(name => 'SATURDAY_WINDOW', attribute => 'REPEAT_INTERVAL', value => 'freq=daily;byday=SAT;byhour=22;byminute=0; bysecond=0');

-- 지속되는 속성 설정
exec dbms_scheduler.set_attribute(name => 'SATURDAY_WINDOW', attribute => 'DURATION', value => '+000 04:00:00.000000000');

-- 활성화
exec dbms_scheduler.enable('SATURDAY_WINDOW');


-- 일요일 변경
-- 6 => 22시로 변경
-- 비활성화
exec dbms_scheduler.disable('SUNDAY_WINDOW');

-- 반복되는 시간 속성 설정
exec dbms_scheduler.set_attribute(name => 'SUNDAY_WINDOW', attribute => 'REPEAT_INTERVAL', value => 'freq=daily;byday=SUN;byhour=22;byminute=0; bysecond=0');

-- 지속되는 속성 설정
exec dbms_scheduler.set_attribute(name => 'SUNDAY_WINDOW', attribute => 'DURATION', value => '+000 04:00:00.000000000');

-- 활성화
exec dbms_scheduler.enable('SUNDAY_WINDOW');


-- 최종 내용 조회
select * from DBA_SCHEDULER_WINDOWS;

반응형
반응형

# INSTANCE NAME/ DB NAME을 확인하고 싶은데 권한이 없는 일반 유저가 확인하고 싶을때 가능
 - SYS_CONTEXT 함수는 세션정보를 얻어오는 함수 입니다.
 - USERENV : 현재 세션의 환경정보를 반환는 네임스페이스 입니다.
   SYS_CONTEXT ('namespace', 'parameter')

Oracle Docs : http://docs.oracle.com/cd/E11882_01/olap.112/e23381/row_functions079.htm


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
-- DB 이름
SELECT SYS_CONTEXT('userenv', 'db_name') db_name FROM DUAL;
DB_NAME
------------
oracle3
 
-- Instance 이름
SELECT SYS_CONTEXT('userenv', 'instance_name') instance_name FROM DUAL;
INSTANCE_NAME
------------------
oraSub3
 
-- 접속자 IP 주소
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') "My IP Address"  FROM DUAL;
 
-- DBA 여부
SELECT SYS_CONTEXT('USERENV','ISDBA') isdba FROM DUAL;
ISDBA
-------
TRUE
 
 
SELECT SYS_CONTEXT('USERENV','TERMINAL') terminal FROM DUAL;
SELECT SYS_CONTEXT('USERENV','LANGUAGE') language FROM DUAL;
SELECT SYS_CONTEXT('USERENV','SESSIONID') sessionid FROM DUAL;
SELECT SYS_CONTEXT('USERENV','INSTANCE') instance FROM DUAL;
SELECT SYS_CONTEXT('USERENV','ENTRYID') entryid FROM DUAL;
SELECT SYS_CONTEXT('USERENV','ISDBA') isdba FROM DUAL;
SELECT SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory FROM DUAL;
SELECT SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency FROM DUAL;
SELECT SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar FROM DUAL;
SELECT SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format FROM DUAL;
SELECT SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language FROM DUAL;
SELECT SYS_CONTEXT('USERENV','NLS_SORT') nls_sort FROM DUAL;
SELECT SYS_CONTEXT('USERENV','CURRENT_USER') current_user FROM DUAL;
SELECT SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid FROM DUAL;
SELECT SYS_CONTEXT('USERENV','SESSION_USER') session_user FROM DUAL;
SELECT SYS_CONTEXT('USERENV','SESSION_USERID') session_userid FROM DUAL;
SELECT SYS_CONTEXT('USERENV','PROXY_USER') proxy_user FROM DUAL;
SELECT SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid FROM DUAL;
SELECT SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain FROM DUAL;
SELECT SYS_CONTEXT('USERENV','DB_NAME') db_name FROM DUAL;
SELECT SYS_CONTEXT('USERENV','HOST') host FROM DUAL;
SELECT SYS_CONTEXT('USERENV','OS_USER') os_user FROM DUAL;
SELECT SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name FROM DUAL;
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address FROM DUAL;
SELECT SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol FROM DUAL;
SELECT SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id FROM DUAL;
SELECT SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id FROM DUAL;
SELECT SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') FROM DUAL;


출처 : http://develop.sunshiny.co.kr/681


반응형
반응형

SELECT b.username "Oracle User", a.spid "Unix PID", b.SID "Oracle Sid",

       b.serial# "Oracle Serial", b.osuser "OS User", b.machine "Computer",

       b.program "Program",

       TO_CHAR (logon_time, 'HH24:MI:SS,yyyy/mm/dd') "Login Time",

       b.action "Session Action", c.action "SQL Action", lockwait "LockWait",

       status "Status", optimizer_cost "Optimizer_cost",

       c.sql_text "SQL Text"

  FROM v$process a, v$session b, v$sql c

 WHERE

       --spid=&PID and

       a.addr = b.paddr

   AND b.sql_address = c.address

   AND b.sql_hash_value = c.hash_value;


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

SELECT b.username "Oracle User", b.SID "Oracle Sid",

       b.serial# "Oracle Serial", b.osuser "OS User", b.machine "Computer",

       b.program "Program",

       TO_CHAR (logon_time, 'HH24:MI:SS,yyyy/mm/dd') "Login Time",

       b.action "Session Action", c.action "SQL Action", lockwait "LockWait",

       status "Status", optimizer_cost "Optimizer_cost",

       c.sql_text "SQL Text"

  FROM v$session b, v$sql c

 WHERE b.sql_address = c.address AND b.sql_hash_value = c.hash_value;



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


 SELECT BS.USERNAME "Blocking User",

 

BS.USERNAME "DB User",

 

WS.USERNAME "Waiting User",

 

BS.SID "SID",

 

WS.SID "WSID",

 

BS.SERIAL# "Serial#",

 

BS.SQL_ADDRESS "address",

 

BS.SQL_HASH_VALUE "Sql hash",

 

BS.PROGRAM "Blocking App",

 

WS.PROGRAM "Waiting App",

 

BS.MACHINE "Blocking Machine",

 

WS.MACHINE "Waiting Machine",

 

BS.OSUSER "Blocking OS User",

 

WS.OSUSER "Waiting OS User",

 

BS.SERIAL# "Serial#",

 

WS.SERIAL# "WSerial#",

 

DECODE(WK.TYPE,'MR','Media Recovery',

 

'RT','Redo Thread',

 

'UN','USER Name',

 

'TX','Transaction',

 

'TM','DML',

 

'UL','PL/SQL USER LOCK',

 

'DX','Distributed Xaction',

 

'CF','Control FILE',

 

'IS','Instance State',

 

'FS','FILE SET',

 

'IR','Instance Recovery',

 

'ST','Disk SPACE Transaction',

 

'TS','Temp Segment',

 

'IV','Library Cache Invalidation',

 

'LS','LOG START OR Switch',

 

'RW','ROW Wait',

 

'SQ','Sequence Number',

 

'TE','Extend TABLE',

 

'TT','Temp TABLE',

 

WK.TYPE) LOCK_TYPE,

 

DECODE(HK.LMODE,0,'None',

 

1,'NULL',

 

2,'ROW-S (SS)',

 

3,'ROW-X (SX)',

 

4,'SHARE',

 

5,'S/ROW-X (SSX)',

 

6,'EXCLUSIVE',

 

TO_CHAR(HK.LMODE)) MODE_HELD,

 

DECODE(WK.REQUEST,0,'None',

 

1,'NULL',

 

2,'ROW-S (SS)',

 

3,'ROW-X (SX)',

 

4,'SHARE',

 

5,'S/ROW-X (SSX)',

 

6,'EXCLUSIVE',

 

TO_CHAR(WK.REQUEST)) MODE_REQUESTED,

 

TO_CHAR(HK.ID1) LOCK_ID1,

 

TO_CHAR(HK.ID2) LOCK_ID2,

 

DECODE(HK.BLOCK,0,'NOT Blocking', /* Not blocking any other processes */

 

1,'Blocking', /* This lock blocks other processes */

 

2,'Global', /* This lock is global, so we can't tell */

 

TO_CHAR(HK.BLOCK)) BLOCKING_OTHERS

 

FROM V$LOCK HK,

 

V$SESSION BS,

 

V$LOCK WK,

 

V$SESSION WS

 

WHERE HK.BLOCK = 1

 

AND HK.LMODE != 0

 

AND HK.LMODE != 1

 

AND WK.REQUEST != 0

 

AND WK.TYPE (+) = HK.TYPE

 

AND WK.ID1 (+) = HK.ID1

 

AND WK.ID2 (+) = HK.ID2

 

AND HK.SID = BS.SID (+)

 

AND WK.SID = WS.SID (+)

 

AND (BS.USERNAME IS NOT NULL)

 

AND (BS.USERNAME <> 'SYSTEM')

 

AND (BS.USERNAME <> 'SYS')

 

ORDER BY 1;




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



SELECT c.owner, c.object_name, c.object_type,

       fu.user_name locking_fnd_user_name,

       fl.start_time locking_fnd_user_login_time, vs.module, vs.machine,

       vs.osuser, vlocked.oracle_username, vs.SID, vp.pid,

       vp.spid AS os_process, vs.serial#, vs.status, vs.saddr, vs.audsid,

       vs.process

  FROM fnd_logins fl,

       fnd_user fu,

       v$locked_object vlocked,

       v$process vp,

       v$session vs,

       dba_objects c

 WHERE vs.SID = vlocked.session_id

   AND vlocked.object_id = c.object_id

   AND vs.paddr = vp.addr

   AND vp.spid = fl.process_spid(+)

   AND vp.pid = fl.pid(+)

   AND fl.user_id = fu.user_id(+)

   AND c.object_name LIKE '%' || UPPER ('&tab_name_leaveblank4all') || '%'

   AND NVL (vs.status, 'XX') != 'KILLED'; --<-change it 

반응형

+ Recent posts