New features of SQL & PLSQL
Hi
Could anyone please guide me to the oracle documentation where I can find the new features of SQL and PLSQL?
Thanks
What Oracle calls new features is not necessarily everything that is a new feature.
Here are my personal lists:
http://www.morganslibrary.org/reference/new_in_11gR1.html
http://www.morganslibrary.org/reference/new_in_11gR2.html
http://www.morganslibrary.org/reference/new_11_2_0_2.html
http://www.morganslibrary.org/reference/new_11_2_0_3.html <-- still being built
These lists include undocumented unsupported features as well as supported ones so review for a better understanding of the Oracle database but only implement those you find in the online Oracle docs and which are supported. You, the user, assume all risks for making bad choices.
Similar Messages
-
New features for SQL Developer.
SQL Developer should include assistance to set up backups with RMAN, expdp, impdp and create, delete and modify tablespaces.
Roberto.You can raise enhancement requests in the SQLDeveloper exchange.
-
Possible new feature for SQL Data modeler: grouping tables by subfolder/
When creating models of more than 500 tables. it would be nice if there was a way to be able group sets of tables into subfolders.
while I might have a centralized schema, meaning the physical schema inside a database can have all 500 tables.
for example:
I might choose to group tables by product.
HR folder contains all my HR_<tables>
OrderEntry folder contains all my OE_<tables>
Inventory folder conatins all my INV_<tables>
this will help to view in the explorer window when searching for a table.I might choose to group tables by product.
HR folder contains all my HR_<tables>
OrderEntry folder contains all my OE_<tables>
Inventory folder conatins all my INV_<tables>You can use subviews for that. Subview can be created in different ways:
- drag&drop from browser
- using selected objects on diagram
- context menu for table in browser
- context menu for subview in browser - you can create similar subview and use it as starting point
- context menu for schema object in relational model - such subview becomes schema bound - you can update it later with tables added/removed to/from that svchema
Philip -
NEW FEATURE:AUTOTRACE IN SQL*PLUS 3.3(EXECUTION PLAN)
제품 : SQL*PLUS
작성날짜 : 2003-10-07
NEW FEATURE:AUTOTRACE IN SQL*PLUS 3.3
======================================
Autotrace는 SQL*Plus 3.3부터 지원하는 New feature로서 기존에는 init.ora에
SQL_TRACE=TRUE를 setting 후 얻어진 trace file을 TKPROF란 utility를
이용하여 SQL 문의 수행 경로, 각종 통계 정보를 얻었다.
그러나, SQL*Plus 3.3부터는 이것을 간단히 처리할 수 있는 방법을 제공한다.
1. SQL*Plus를 실행하여 scott user로 접속한 후, plan table을 생성한다.
#sqlplus scott/tiger
SQL>@$ORACLE_HOME/rdbms/admin/utlxplan
2. 다음에 sys user에서 PLUSTRACE란 ROLE을 만든다.
SVRMGR>connect internal;
SVRMGR>create role plustrace;
SVRMGR>grant select on v_$sesstat to plustrace;
SVRMGR>grant select on v_$statname to plustrace;
SVRMGR>grant select on v_$session to plustrace;
SVRMGR>grant plustrace to dba with admin option;
SVRMGR>grant plustrace to scott;
비고) 위의 grant 문은 client에 SQL*Plus 3.3이 install되어 있는 경우
C:ORAWIN95\PLUS33\PLUSTRCE.SQL이라는 script에 기록되어 있다.
다음과 같이 실행해 주면 된다.
1> connect sys/manager
2> @$ORACLE_HOME/sqlplus/admin/plustrce.sql
3> grant plustrace to scott;
3. 다음에는 scott user로 connect하여 작업한다.
#sqlplus scott/tiger
SQL>set autotrace on
SQL>select * from emp;
Execution Plan
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'EMP'
Statistics
389 recursive calls
5 db block gets
53 consistent gets
12 physical reads
0 redo size
1049 bytes sent via SQL*Net to client
239 bytes received via SQL*Net from client
4 SQL*Net round-trips to/from client
0 sorts (memory)
0 sorts (disk)
13 rows processed
4. 참고로 set autotrace에는 여러가지 option을 부여해 작업할 수도 있다.
예)set autotrace on => Explain plan and statistics.
set autotrace on explain => Explain plan only.
set autotrace traceonly => select된 결과는 빼고 trace만 display
시킴.
set autotrace on statistics=> sql statement execution statistics.
5. 서버 버젼과 상관없다.
Server가 7.2 version 이하일지라도 clinet에 SQL*Plus 3.3이 install되어
있으면 client에서 sqlplus 3.3을 구동시켜 server에 접속하여 위와 같이
작업하면 무리없이 작업이 가능하다.
Reference Documents
<Note:43214.1>Hi Roman,
I don't have an Oracle 9.2 database readily available, but it works fine on 10g XE. Please note 3.1 is not certified with 9i:
http://www.oracle.com/technetwork/developer-tools/sql-developer/certification-096745.html
Regards,
Gary
SQL Developer Team -
New White Paper: "Oracle 9i PL/SQL New Features"
The July issue of the Pipeline Newsletter includes an 8-page feature article entitled "Oracle 9i PL/SQL New Features", written by Sandeepan Banerjee, of Oracle's PL/SQL Development Team. Click on the URL below for the newsletter:
http://www.revealnet.com/newsletter-v2/newsletter_0701.htm
In this article, you will read about:
- Native Compilation of PL/SQL
- Bulk Binds and Bulk Dynamic SQL
- Common SQL Parser
- Pipelined, Parallelized Table Functions
- Transparent Performance Improvements
- PL/SQL and XML
- DBMS_XMLGEN
- URI_References
- HTTP "Cookie" Support in PL/SQL
Visit www.revealnet.com and subscribe to the Pipeline Newsletter for monthly articles tips and code utilities for Oracle professionals.
Best wishes,
Cam White
RevealNetI have some questions to the opdx.
[list]
[*] What do I need to use the opdx. There is a link on the ifs page to a demopage with download but it is broken. SO PLEASE list up everything I need.
[*] are there some samples how to use the opdx, OR is there a fully functional OPDX with which I can play?
[list]
Thank you very much -
PL/SQL New Features for Oracle 10g
Hi,
If anybody asks what are the new features in PL/SQL for Oracle 10g version, what would be the answer?
Thanks,
Mrinmoyuser3001930 wrote:
Hi,
If anybody asks what are the new features in PL/SQL for Oracle 10g version, what would be the answer?
Thanks,
MrinmoyI would say: Who cares about 10g features nowadays. And they I would tell them about the new 11g features (that I remember). -
OBE SQL Dev 1.5 New Features has broken link to file sqldevmngdb.zip
Hi there,
It appears that one of the file download links (*sqldevmngdb.zip*) in the Prerequisites for OBE Tutorial Oracle SQL Developer 1.5 New Features is broken.
[http://www.oracle.com/technology/obe/hol08/sqldev_mngdb/sqldev15nf/files/sqldevmngdb.zip]
Can you please repair this and update me when that has been done.
Have a great day.
Kind Regards,
Gary.Gary,
Thanks, I'll get that sorted, but until we do, (don't laugh), the second half of the link actually works.
Sue -
FUNCTION-BASED INDEX ( ORACLE 8I NEW FEATURE )
제품 : ORACLE SERVER
작성날짜 : 2004-08-16
FUNCTION-BASED INDEX ( ORACLE 8I NEW FEATURE )
==============================================
SCOPE
10g Standard Edition(10.1.0) 이상 부터 Function-based Index 기능이 지원된다.
Explanation
1. 개요
Function-based index는, 함수(function)이나 수식(expression)으로 계산
된 결과에 대해 인덱스를 생성하여 사용할 수 있는 기능을 제공한다.
질의 수행 시 해당 함수나 수식을 처리하여 결과를 가져 오는 것이 아니라,
인덱스 형태로 존재하는 미리 계산되어 있는 결과를 가지고 처리하므로
성능 향상을 기할 수 있다.
2. 제약사항
1) aggregate function 에 대한 function-based index 생성 불가.
(예 : sum(...) )
2) LOB, REF, nested table 컬럼에 대한 function-based index 생성 불가.
3. 주요 특징
1) cost-based optimizer에 의해 사용됨.
2) B*Tree / bitmap index로 생성 가능.
3) 산술식 (arithmetic expression), PLSQL function, SQL built-in
function 등에 적용 가능.
4) 함수나 수식으로 처리된 결과에 대한 range scan 가능
5) NLS SORT 지원
6) SELECT/DELETE를 할 때마다 함수나 수식의 결과를 계산하는 것이 아니라
INSERT/UPDATE 시 계산된 값을 인덱스에 저장.
7) 질의 속도 향상
8) object column이나 REF column에 대해서는 해당 object에 정의된
method에 대해 function-based index 생성 가능.
4. 생성 방법
CREATE [UNIQUE | BITMAP ] INDEX <index_name>
ON <tablename> (<index-expression-list>)
<index-expression-list> -> { <column_name> | <column_expression> }
예) CREATE INDEX EMP_NAME_INDEX ON EMP (UPPER(ENAME));
CREATE INDEX EMP_SAL_INDEX ON EMP( SAL + COMM, empno);
* Function-based index를 생성하기 위해서는 QUERY REWRITE 권한이
부여 되어 있어야만 한다.
예) GRANT QUERY REWRITE TO SCOTT;
5. Function-Based Index 사용을 위한 사전 작업
1) Function-based index는 cost based optimizer에서만 사용 가능하므로,
테이블에 대해 미리 analyze 해 주는 것이 바람직하다.
그리고 init 파일에서 OPTIMIZER_MODE 를 FIRST_ROWS 나 ALL_ROWS 등으
로 지정하거나 HINT 등을 사용하여 cost based optimizer가 사용되도록
한다.
2) init 파일에서 COMPATIBLE 파라미터 값을 8.1 이상으로 설정되어 있어야
한다.
( 예 : COMPATIBLE = 8.1.6 )
3) session/instance level 에서 QUERY_REWRITE_ENABLED 값이 TRUE 지정
되어 있어야 한다.
( 예 : ALTER SESSION SET QUERY_REWRITE_ENABLED = TRUE; )
6. 예제
1) init 파라미터에서 다음과 같이 지정
compatible = 8.1.6 (반드시 8.1이상이어야 한다)
query_rewrite_enabled = true
query_rewrite_integrity = trusted
2) SCOTT 유저에서 function_based_index 생성
create index idx_emp_lower_ename
on emp
( lower(ename) ) ;
3) EMP table analyze
analyze table emp compute statistics ;
4) PLAN_TABLE 생성
@ ?/rdbms/admin/utlxplan.sql
5) Cost based optimizer 선택
alter session set optimizer_mode = FIRST_ROWS ;
6) Query 실행
explain plan set statement_id='qry1' FOR
select empno, ename
from emp
where lower(ename) = 'ford' ;
7) PLAN 분석
SELECT LPAD(' ',2*level-2)||operation||' '||options||' '||object_name query_plan
FROM plan_table
WHERE statement_id='qry1'
CONNECT BY prior id = parent_id
START WITH id = 0 order by id ;
-> 결과
QUERY_PLAN
SELECT STATEMENT
TABLE ACCESS BY INDEX ROWID EMP
INDEX RANGE SCAN IDX_EMP_LOWER_ENAME
7. 결론
Function-based index는 적절하게 사용될 경우 성능상의 많은 이점을 가져
온다. Oracle8i Designing and Tuning for Performance에서도 가능한 한
Function-based index를 사용하는 것을 권장하고 있으며, LOWER(), UPPER()
등의 함수를 사용하여 불가피하게 FULL TABLE SCAN을 하는 경우에 대해서도
효과적으로 처리해 줄 수 있는 방안이라 할 수 있다.
Reference Documents
-------------------Partha:
From the Oracle8i Administrators Guide:
"Table owners should have EXECUTE privileges on the functions used in function-based indexes.
For the creation of a function-based index in your own schema, you must be
granted the CREATE INDEX and QUERY REWRITE system privileges. To create
the index in another schema or on another schemas tables, you must have the
CREATE ANY INDEX and GLOBAL QUERY REWRITE privileges."
Hope this helps.
Peter -
What are the new features of Oracle 10g over Oracle9i
Hi Grus..
i want to know what are the new features of oracle 10g over Oracle 9i as well oracle 11g over 10g.. can any one give me the detailed document.
Because I'm struggling each and every time while the interviewer asked above question.
It's very helpful for me if any one give me the detailed document regarding above question
Thanks In Advance
Arun
Edited by: Arun on Oct 23, 2010 10:19 AMHi,
Just check below link..would be helpful..
http://www.oracle.com/global/ap/openworld/ppt_download/database_manageability%2011g%20overview_230.pdf
and
Each release of Oracle has many differences, and Oracle 10g is a major re-write of the Oracle kernel from Oracle 9i. While there are several hundred new features and other differences between 9i and 10g, here are the major differences between Oracle9i and Oracle10g:
Major changes to SQL optimizer internals
Oracle Grid computing
AWR and ASH tables incorporated into Oracle Performance Pack and Diagnostic Pack options
Automated Session History (ASH) materializes the Oracle Wait Interface over time
Data Pump replaces imp utility with impdp
Automatic Database Diagnostic Monitor (ADDM)
SQLTuning Advisor
SQLAccess Advisor
Rolling database upgrades (using Oracle10g RAC)
dbms_scheduler package replaces dbms_job for scheduling
and you need to refer oracle documentation for sql, plsql references where you will know particular enhancements made...
thanks
Prasanth
Edited by: Onenessboy on Oct 23, 2010 10:22 AM -
Oracle 10G New Feature........Part 1
Dear all,
from last couple of days i was very busy with my oracle 10g box,so i think this is right time to
share some intresting feature on 10g and some internal stuff with all of you.
Have a look :-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Oracle 10g Memory and Storage Feature.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1.Automatic Memory Management.
2.Online Segment Shrink
3.Redolog Advisor, checkpointing
4.Multiple Temporary tablespace.
5.Automatic Workload Repository
6.Active Session History
7.Misc
a)Rename Tablespace
b)Bigfile tablespace
c)flushing buffer cache
8.ORACLE INTERNAL
a)undocumented parameter (_log_blocks_during_backup)
b)X$ view (x$messages view)
c)Internal Structure of Controlfile
1.Automatic memory management
================================
This feature reduce the overhead of oracle DBA.previously mostly time we need to set diff oracle SGA parameter for
better performance with the help of own experience,advice views and by monitoring the behaviour
of oracle database.
this was just time consuming activity.........
Now this feature makes easy life for oracle DBA.
Just set SGA_TARGET parameter and it automatically allocate memory to different SGA parameter.
it focus on DB_CACHE_SIZE
SHARED_POOL_SIZE
LARGE_POOL
JAVA_POOL
and automatically set it as
__db_cache_size
__shared_pool_size
__large_pool_size
__java_pool_size
check it in alert_log
MMAN(memory manager) process is new in 10g and this is responsible for sga tuning task.
it automatically increase and decrease the SGA parameters value as per the requirement.
Benefit:- Maximum utlization of available SGA memory.
2.Online Segment Shrink.
==========================
hmmmmm again a new feature by oracle to reduce the downtime.Now oracle mainly focus on availablity
thats why its always try to reduce the downtime by intrducing new feature.
in previous version ,reducing High water mark of table was possible by
Exp/imp
or
alter table move....cmd. but on these method tables was not available for normal use for long hrs if it has more data.
but in 10g with just few command we can reduce the HWmark of table.
this feature is available for ASSM tablespaces.
1.alter table emp enable row movement.
2.alter table emp shrink space.
the second cmd have two phases
first phase is to compact the segment and in this phase DML operations are allowed.
second phase(shrink phase)oracle shrink the HWM of table, DML operation will be blocked at that time for short duration.
So if want to shrink the HWM of table then we should use it with two diff command
first compact the segment and then shrink it on non-peak hrs.
alter table emp shrink space compact. (This cmd doesn't block the DML operation.)
and alter table emp shrink space. (This cmd should be on non-peak hrs.)
Benefit:- better full table scan.
3.Redolog Advisor and checkpointing
================================================================
now oracle will suggest the size of redo log file by V$INSTANCE_RECOVERY
SELECT OPTIMAL_LOGFILE_SIZE
FROM V$INSTANCE_RECOVERY
this value is influence with the value of FAST_START_MTTR_TARGET .
Checkpointing
Automatic checkpointing will be enable after setting FAST_START_MTTR_TARGET to non-zero value.
4.Multiple Temporary tablespace.
==================================
Now we can manage multiple temp tablespace under one group.
we can create a tablespace group implicitly when we include the TABLESPACE GROUP clause in the CREATE TEMPORARY TABLESPACE or ALTER TABLESPACE statement and the specified tablespace group does not currently exist.
For example, if group1 is not exists,then the following statements create this groups with new tablespace
CREATE TEMPORARY TABLESPACE temp1 TEMPFILE '/u02/oracle/data/temp01.dbf'
SIZE 50M
TABLESPACE GROUP group1;
--Add Existing temp tablespace into group by
alter tablespace temp2 tablespace group group1.
--we can also assign the temp tablespace group on database level as default temp tablespace.
ALTER DATABASE <db name> DEFAULT TEMPORARY TABLESPACE group1;
benefit:- Better I/O
One sql can use more then one temp tablespace
5.AWR(Automatic Workload Repository):-
================================== AWR is built in Repository and Central point of Oracle 10g.Oracle self managing activities
is fully dependent on AWR.by default after 1 hr, oracle capure all database uses information and store in AWR with the help of
MMON process.we called it Memory monitor process.and all these information are kept upto 7 days(default) and after that it automatically purge.
we can generate a AWR report by
SQL> @?/rdbms/admin/awrrpt
Just like statspack report but its a advance and diff version of statspack,it provide more information of Database as well as OS.
it show report in Html and Text format.
we can also take manually snapshot for AWR by
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END;
**The STATISTICS_LEVEL initialization parameter must be set to the TYPICAL or ALL to enable the Automatic Workload Repository.
[oracle@RMSORA1 oracle]$ sqlplus / as sysdba
SQL*Plus: Release 10.1.0.2.0 - Production on Fri Mar 17 10:37:22 2006
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> @?/rdbms/admin/awrrpt
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
4174002554 RMSORA 1 rmsora
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: text
Type Specified: text
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
* 4174002554 1 RMSORA rmsora RMSORA1
Using 4174002554 for database Id
Using 1 for instance number
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing <return> without
specifying a number lists all completed snapshots.
Listing the last 3 days of Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
rmsora RMSORA 16186 16 Mar 2006 17:33 1
16187 16 Mar 2006 18:00 1
16206 17 Mar 2006 03:30 1
16207 17 Mar 2006 04:00 1
16208 17 Mar 2006 04:30 1
16209 17 Mar 2006 05:00 1
16210 17 Mar 2006 05:31 1
16211 17 Mar 2006 06:00 1
16212 17 Mar 2006 06:30 1
16213 17 Mar 2006 07:00 1
16214 17 Mar 2006 07:30 1
16215 17 Mar 2006 08:01 1
16216 17 Mar 2006 08:30 1
16217 17 Mar 2006 09:00 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 16216
Begin Snapshot Id specified: 16216
Enter value for end_snap: 16217
End Snapshot Id specified: 16217
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_16216_16217.txt. To use this name,
press <return> to continue, otherwise enter an alternative.
Benefit:- Now DBA have more free time to play games.....................:-)
Advance version of statspack
more DB and OS information with self managing capabilty
New Automatic alert and database advisor with the help of AWR.
6.Active Session History:-
==========================
V$active_session_history is view that contain the recent session history.
the memory for ASH is comes from SGA and it can't more then 5% of Shared pool.
So we can get latest and active session report from v$active_session_history view and also get histortical data of
of session from DBA_HIST_ACTIVE_SESS_HISTORY.
v$active_session_history include some imp column like:-
~SQL identifier of SQL statement
~Object number, file number, and block number
~Wait event identifier and parameters
~Session identifier and session serial number
~Module and action name
~Client identifier of the session
7.Misc:-
========
Rename Tablespace:-
=================
in 10g,we can even rename a tablespace by
alter tablespace <tb_name> rename to <tb_name_new>;
This command will update the controlfile,data dictionary and datafile header,but dbf filename will be same.
**we can't rename system and sysaux tablespace.
Bigfile tablespace:-
====================
Bigfile tablespace contain only one datafile.
A bigfile tablespace with 8K blocks can contain a 32 terabyte datafile.
Bigfile tablespaces are supported only for locally managed tablespaces with automatic segment-space management.
we can take the advantage of bigfile tablespace when we are using ASM or other logical volume with RAID.
without ASM or RAID ,it gives poor response.
syntax:-
CREATE BIGFILE TABLESPACE bigtbs
Flushing Buffer Cache:-
======================
This option is same as flushing the shared pool,but only available with 10g.
but i don't know, whats the use of this command in prod database......
anyway we can check and try it on test server for tuning n testing some query etc....
SQL> alter system flush buffer_cache;
System altered.
++++++++++++++++++
8.Oracle Internal
++++++++++++++++++
Here is some stuff that is not related with 10g but have some intresting things.
a)undocumented parameter "_log_blocks_during_backup"
++++++++++++++++++++++++
as we know that oracle has generate more redo logs during hotbackup mode because
oracle has to maintain the a complete copy of block into redolog due to split block.
we can also change this behaviour by setting this parameter to False.
If Oracle block size equals the operating system block size.thus reducing the amount of redo generated
during a hot backup.
WITHOUT ORACLE SUPPORT DON'T SET IT ON PROD DATABASE.THIS DOCUMENT IS JUST FOR INFORMATIONAL PURPOSE.
b)some X$ views (X$messages)
++++++++++++++++
if you are intresting in oracle internal architecture then x$ view is right place for getting some intresting things.
X$messages :-it show all the actions that a background process do.
select * from x$messages;
like:-
lock memory at startup MMAN
Memory Management MMAN
Handle sga_target resize MMAN
Reset advisory pool when advisory turned ON MMAN
Complete deferred initialization of components MMAN
lock memory timeout action MMAN
tune undo retention MMNL
MMNL Periodic MQL Selector MMNL
ASH Sampler (KEWA) MMNL
MMON SWRF Raw Metrics Capture MMNL
reload failed KSPD callbacks MMON
SGA memory tuning MMON
background recovery area alert action MMON
Flashback Marker MMON
tablespace alert monitor MMON
Open/close flashback thread RVWR
RVWR IO's RVWR
kfcl instance recovery SMON
c)Internal Structure of Controlfile
++++++++++++++++++++++++++++++++++++
The contents of the current controlfile can be dumped in text form.
Dump Level Dump Contains
1 only the file header
2 just the file header, the database info record, and checkpoint progress records
3 all record types, but just the earliest and latest records for circular reuse record types
4 as above, but includes the 4 most recent records for circular reuse record types
5+ as above, but the number of circular reuse records included doubles with each level
the session must be connected AS SYSDBA
alter session set events 'immediate trace name controlf level 5';
This dump show lots of intresting information.
it also show rman recordes if we used this controlfile in rman backup.
Thanks
Kuljeet Pal SinghYou can find each doc in html and pdf format on the Documentation Library<br>
You can too download all the documentation in html format to have all on your own computer here (445.8MB)<br>
<br>
Nicolas. -
(V7.3)RDBMS 7.3 Enterprise Edition NEW FEATURE에 대한 Q&A
제품 : ORACLE SERVER
작성날짜 : 2004-08-13
(V7.3)RDBMS 7.3 Enterprise Edition NEW FEATURE에 대한 Q&A
=========================================================
1. Q) Oracle 7 Release 7.3의 new feature들을 간단하게 알고 싶습니다.
A) 다음과 같이 요약하여 설명드리겠습니다.
New features of 7.3.3 are :Direct load to cluster
Can use backup from before RESETLOGS
New features of 7.3 are :histograms
hash joins
star join enhancement
standby databases
parallel union-all
dynamic init.ora configuration
direct path export
compiled triggers
fast create index
multiple LRU latches
updatable join views
LSQL cursor variable enhancement
replication enhancement
ops processor affinity
Net 2 load balancing
XA scaling/recovery
thread safe pro*c/oci
DB verify
new pl/sql packages
new pl/sql features
bitmap indexes
2. Q) Oracle 7 Release 7.2와 7.3의 새로운 Parallel feature에는 어떤 것이
있습니까?
A) Oracle 7 parallel query 에 의한 parallel operation에는 다음과 같은 내
용이 있습니다.
> Parallel Data Loading : conventional and direct-path, to the same
table or multiple tables concurrently.
> Parallel Query : table scans, sorts, joins, aggregates, duplicate
elimination, UNION and UNION ALL(7.3)
> Parallel Subqueries : in INSERT, UPDATE, DELETE statements.
> Parallel Execution : of application code(user-defined SQL functions)
> Parallel Joins :
nested loop,
sort-merge,
star join optimization(creation of cartesian products plus the
nested loop join),
hash joins(7.3).
> Parallel Anti-Joins : NOT IN(7.3).
> Parallel Summarization(CREATE TABLE AS SELECT) :
query and insertion of rows into a rollup table.
> Parallel Index Creation(CREATE INDEX) :
table scans, sorts, index fragment construction.
3. Q) Release 7.2와 7.3에서 추가된 optimization 기능에는 어떤 내용이 있습
니까?
A) 다음과 같은 기능들이 있습니다.
1> Direct Database Reads
Parallel query 프로세스들은 필터링이나, 소팅, 조인과 같은 작업을 수행하
기 위해서는 아주 큰 테이블을 scanning해야 합니다. Direct Database Reads는
read efficiency와 성능의 향상을 위해 contiguous memory read를 가능하게 해
줍니다. 또한, concurrent OLTP와 같은 작업을 수행시 따르는 경합을 없애기 위
해 버퍼 캐쉬를 bypass합니다.
2> Direct Database Writes
Parallel query 프로세스들은 intermediate sort runs, summarization
(CREATE TABLE AS SELECT), index creation(CREATE INDEX)과 같은 작업의 수행
결과를 디스크에 종종 기록해야 합니다.
Direct Database Writes는 write efficiency와 성능의 향상을 위해 direct
contiguous memory로 하여금 contiguous disk writes를 가능하게 해줍니다.
또한, concurrent OLTP 작업과 DBWR 프로세스에 의한 경합을 없애기 위해 버
퍼 캐쉬를 bypass합니다.
결론적으로, Direct Database Reads와 Writes는 concurrent OLTP와 DSS 작
업에 따르는 복잡한 부하를 조절하면서 Oracle 7 서버를 분리된 형태로, 또한 최
적의 튜닝을 가능하게 해줍니다.
3> Asynchronous I/O
Oracle 7은 이미 sorts, summarization, index creation, direct-path
loading 에 대한 asynchronous write 기능을 제공하고 있습니다.
Release 7.3부터는 보다 나은 성능의 향상을 위해 asynchronous read-ahead
기능을 제공하여 최대한 processing과 I/O의 병행성을 증가시켜 줍니다.
4> Parallel Table Creation
CREATE TABLE ... AS SELECT ...와 같은 구문을 제공하여 상세한 데이타를
갖는 큰 테이블의 조회된 결과를 저장하기 위해 임시 테이블을 생성합니다.
이 기능은 보통 intermediate operation의 결과를 저장하기 위해 drill-down
분석을 할 때 사용됩니다.
5> Support for the Star Query Optimization
Oracle 7은 수행 속도의 향상을 위해 star 스키마가 존재하고, star query
optimization을 invoke합니다. Star query는 먼저 여러 개의 작은 테이블을
join하고, 그런 후에, 그 결과를 하나의 큰 테이블로 join합니다.
6> Intelligent Function Shipping
Release 7.3부터 parallel query를 처리하는 coordinator 프로세스는
non-shared memory machine(cluster 또는 MPP) 내의 노드들을 처리하기 위해
디스크나 데이타들 간의 유사성에 대해 인식하게 될 것입니다.
이 사실에 근거하여, coordinator는 data들이 machine의 shared
interconnect를 통해 전달될 필요가 없다는 점에서, 특정 node-disk pair로 수
행되고 있는 프로세스들에게 parallel query operation을 지정할 수 있습니다.
이 기능은 연관된 cost나 overhead없이 'shared nothing' 소프트웨어 아키텍
쳐의 잇점을 제공하면서 효율성과 성능, 확장성을 개선할 수 있습니다.
7> Histograms
Release 7.3부터 Oracle optimizer는 테이블의 컬럼 내에 있는 데이타 값의
분포에 관한 더 많은 정보를 이용할 수 있습니다. Value와 상대적 빈도수를 나타
내는 histogram은 optimizer에게 index의 상대적 'selectivity'에 관한 정보와
어떤 index를 사용해야할 것인가에 관한 더 좋은 아이디어를 제공해 줄 것입니다.
적절한 선택을 한다면, query의 수행시간을 몇 분, 심지어 몇 시간씩이나 단축
시킬 수가 있습니다.
8> Parallel Hash Joins
Release 7.3부터 Oracle 7은 join 처리시간의 단축을 위하여 hash join을 제
공합니다. 해슁 테크닉을 사용하면 join을 하기 위해 데이타를 소트하지 않아도
되며, 기존에 존재하는 인덱스를 사용하지 않으면서 'on-the-fly' 라는 개념을 제
공합니다.
따라서, star schema 데이타베이스에 전형적으로 적용되는 small-to-large
테이블 join의 수행 속도를 향상시킬 것입니다.
9> Parallel UNION and UNION ALL
Release 7.3부터 Oracle 7은 UNION과 UNION ALL과 같은 set operator를 사
용하여 완전히 parallel하게 query를 수행할 수 있습니다. 이러한 operator를 사
용하면, 큰 테이블들을 여러 개의 작은 테이블의 집합으로 나누어 처리하기가 훨
씬 쉬워질 것입니다.
4. Q) Release 7.3에는 어떤 제품들이 있습니까?
A) Oracle 7 서버 Release 7.3.3에 대한 제품 리스트는 다음과 같습니다.
단, 모든 플랫폼들이 리스트된 모든 제품들을 지원하지는 않습니다.
[ Product ] [ Revision ]
Advanced replication option 7.3.3.0.0
Parallel Query Option 7.3.3.0.0
Parallel Server Option 7.3.3.0.0
Oracle 7 Server 7.3.3.0.0
Distributed Database Option 7.3.3.0.0
Oracle*XA 7.3.3.0.0
Oracle Spatial Data Option 7.3.3.0.0
PL/SQL 2.3.3.0.0
ICX 7.3.3.0.0
OWSUTL 7.3.3.0.0
Slax 7.3.3.0.0
Context Option 2.0.4.0.0
Pro*C 2.2.3.0.0
Pro*PL/I 1.6.27.0.0
Pro*Ada 1.8.3.0.0
Pro*COBOL 1.8.3.0.0
Pro*Pascal 1.6.27.0.0
Pro*FORTRAN 1.8.3.0.0
PRO*CORE 1.8.3.0.0
Sqllib 1.8.3.0.0
Codegen 7.3.3.0.0
Oracle CORE 2.3.7.2.0
SQL*Module Ada 1.1.5.0.0
SQL*Module C 1.1.5.0.0
Oracle CORE 3.5.3.0.0
NLSRTL 2.3.6.1.0
Oracle Server Manager 2.3.3.0.0
Oracle Toolkit II(Dependencies of svrmgr) DRUID 1.1.7.0.0
Multi-Media APIs(MM) 2.0.5.4.0
OACORE 2.1.3.0.0
Oracle*Help 2.1.1.0.0
Oracle 7 Enterprise Backup Utility 2.1.0.0.2
NLSRTL 3.2.3.0.0
SQL*Plus 3.3.3.0.0
Oracle Trace Daemon 7.3.3.0.0
Oracle MultiProtocol Interchange 2.3.3.0.0
Oracle DECnet Protocol Adapter 2.3.3.0.0
Oracle LU6.2 Protocol Adapter 2.3.3.0.0
Oracle Names 2.0.3.0.0
Advanced Networking Option 2.3.3.0.0
Oracle TCP/IP Protocol Adapter 2.3.3.0.0
Oracle Remote Operations 1.3.3.0.0
Oracle Named Pipes Protocol Adapter 2.3.3.0.0
Oracle Intelligent Agent 7.3.3.0.0
SQL*Net APPC 2.3.3.0.0
SQL*Net/DCE 2.3.3.0.0
Oracle OSI/TLI Protocol Adapter 2.3.3.0.0
Oracle SPX/IPX Protocol Adapter 2.3.3.0.0
NIS Naming Adapter 2.3.3.0.0
NDS Naming Adapter 2.3.3.0.0
Oracle Installer 4.0.1P.S. I have checked the CD rom itself by doing the installation in our classroom on a Windows XP Pro machine and it loaded like a charm. I have been emailing and calling Compaq customer support on this issue, and I've done everything they've suggested, including a Quick Format of the hard drive. I am still getting the same results. I have been able to load a small program (Palm Desktop) on the Compaq without a problem, so I don't think it's the CD drive that's the problem, either. Thanks for any help you can give me!!! Deborah
-
A potential bug on the new feature (12c) of Identity Column?
Hi,
I am testing a newly introduced feature of Identity Column in Oracle 12c. I used EclipseLink (JPA) to access the database.
I may have found a potential bug with this feature. I am getting "ORA-30667: cannot drop NOT NULL constraint on a DEFAULT ON NULL column" when I try to insert a row. My code doesn't explicitly drop "NOT NULL" constraint.
When I delete all the tables under the user and re-define the user and the tables, the error disappear.
Here are the details:
Error:
DatabaseException Internal Exception: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1 ORA-30667: cannot drop NOT NULL constraint on a DEFAULT ON NULL column Error Code: 604 Call: INSERT INTO MyTable (ID, SOMEID, SOMEDATE) VALUES (?, ?, ?) bind => [null, 100100147, 2013-11-29 Query: InsertObjectQuery(cus.entity.MyTable@1a9ea5b)
Table definition:
CREATE TABLE MyTable (id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
someId INT NOT NULL,
someDate DATE NOT NULL,
PARTITION BY range(someDate)
interval(numtodsinterval(1,'year'))
SUBPARTITION BY HASH ( someId)
SUBPARTITIONS 20
PARTITION p0 VALUES LESS THAN (TO_DATE('01-12-2013', 'DD-MM-YYYY'))
Could anyone tell me if there might be a bug associated with the new feature or if there was something wrong with my code?
I would be appreciated if anyone can help."here is a reproducible test case in the SCOTT schema - if it reproduces for you open an SR with Oracle"
Yes. I have just followed the instruction you posted and managed to re-produce the same error I reported earlier. Here are the details of the script output following your posted instruction:
table MYTABLE dropped.
purge recyclebin
table MYTABLE created.
1 rows inserted.
table MYTABLE dropped.
OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIME DROPTIME DROPSCN PARTITION_NAME CAN_UNDROP CAN_PURGE RELATED BASE_OBJECT PURGE_OBJECT SPACE
BIN$6NCDTxmXTb2QBpUWF0kGqw==$0 SYS_C0010655 DROP INDEX USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030808 NO YES 98789 98789 98812 8
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:30:56 2013-12-01:10:32:17 4030812 NO NO 98790 98789 98789 0
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 NO NO 98833 98789 98789 1024
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 NO NO 98833 98789 98789 1024
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 NO NO 98833 98789 98789 1024
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 NO NO 98833 98789 98789 1024
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 NO NO 98833 98789 98789 1024
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 NO NO 98833 98789 98789 1024
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 NO NO 98833 98789 98789 1024
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 NO NO 98833 98789 98789 1024
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 NO NO 98833 98789 98789 1024
BIN$Ka0sgN7XRBeCsjyXTQ76cA==$0 MYTABLE DROP Table Composite Partition USERS 2013-12-01:10:31:37 2013-12-01:10:32:17 4030812 & -
BLOCK CORRUPTION (ORA-1578) 처리 (ORACLE 8I NEW FEATURE)
제품 : ORACLE SERVER
작성날짜 : 2002-05-31
BLOCK CORRUPTION (ORA-1578) 처리 (ORACLE 8I NEW FEATURE)
========================================================
PURPOSE
Block Corruption의 처리 방안에 대해 알아본다.
Problem Description
block corruption 시 10210, 10211,10231 의 event 를 사용해서
해당 block 을 skip 할 수도 있지만 V8.1 이상에서는
dbms_repair.fix_corrupt_blocks ,
dbms_repair.skip_corrupt_block 를 이용하여
corrupt가 발생한 block을 detect하고 skip, 또는 repair해주는 방안이
제시되고 있다.
Workaround
Solution Description
- 먼저 detecting 을 위해 db_block_checking =true 를 init.ora 에 set
- dbms_repair 의 package 를 사용하는데 이 package 는 dbmsrpr.sql,
prvtrpr.plb를 수행한다 .
- sys 로 접속하여 package 를 실행한다.
다음의 예제를 살펴보자
T1 테이블에 corrupt 된 block 이 있다고 가정한다.
SQL> desc t1
Name Null? Type
COL1 NOT NULL NUMBER(38)
COL2 CHAR(512)
SQL> analyze table t1 validate structure;
analyze table t1 validate structure
ERROR at line 1:
ORA-01498: block check failure - see trace file
이때 ANALYZE로 부터 발생된 trace file 에 corrupt 된 block 에 3 row 의
(nrows = 3) data 가 있음을 알수 있다고 가정하자.
DBMS_REPAIR.ADMIN_TABLES (repair and orphan key)
================================================
ADMIN_TABLES 은 table 을 위한 repair table과,인덱스를 위한 orphan key
tables을 제공한다.
SQL> @adminCreate
SQL> connect sys/change_on_install
Connected.
SQL>
SQL> -- Repair Table
SQL>
SQL> declare
2 begin
3 -- Create repair table
4 dbms_repair.admin_tables (
5 -- table_name => 'REPAIR_TABLE',
6 table_type => dbms_repair.repair_table,
7 action => dbms_repair.create_action,
8 tablespace => 'USERS'); -- default TS of SYS if not specified
9 end;
10 /
PL/SQL procedure successfully completed.
SQL> select owner, object_name, object_type
2 from dba_objects
3 where object_name like '%REPAIR_TABLE';
OWNER OBJECT_NAME OBJECT_TYPE
SYS DBA_REPAIR_TABLE VIEW
SYS REPAIR_TABLE TABLE
SQL>
SQL> -- Orphan Key Table
SQL>
SQL> declare
2 begin
3 -- Create orphan key table
4 dbms_repair.admin_tables (
5 table_type => dbms_repair.orphan_table,
6 action => dbms_repair.create_action,
7 tablespace => 'USERS'); -- default TS of SYS if not specified
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> select owner, object_name, object_type
2 from dba_objects
3 where object_name like '%ORPHAN_KEY_TABLE';
OWNER OBJECT_NAME OBJECT_TYPE
SYS DBA_ORPHAN_KEY_TABLE VIEW
SYS ORPHAN_KEY_TABLE TABLE
DBMS_REPAIR.CHECK_OBJECT
=========================
CHECK_OBJECT procedure 는 기술된 object를 check 하고, repair 를 위한 정보를 수집하기 위함이다.
SQL> @checkObject
SQL> set serveroutput on
SQL>
SQL> declare
2 rpr_count int;
3 begin
4 rpr_count := 0;
5 dbms_repair.check_object (
6 schema_name => 'SYSTEM',
7 object_name => 'T1',
8 repair_table_name => 'REPAIR_TABLE',
9 corrupt_count => rpr_count);
10 dbms_output.put_line('repair count: ' || to_char(rpr_count));
11 end;
12 /
repair count: 1
PL/SQL procedure successfully completed.
SQL> desc repair_table
Name Null? Type
OBJECT_ID NOT NULL NUMBER
TABLESPACE_ID NOT NULL NUMBER
RELATIVE_FILE_ID NOT NULL NUMBER
BLOCK_ID NOT NULL NUMBER
CORRUPT_TYPE NOT NULL NUMBER
SCHEMA_NAME NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
BASEOBJECT_NAME VARCHAR2(30)
PARTITION_NAME VARCHAR2(30)
CORRUPT_DESCRIPTION VARCHAR2(2000)
REPAIR_DESCRIPTION VARCHAR2(200)
MARKED_CORRUPT NOT NULL VARCHAR2(10)
CHECK_TIMESTAMP NOT NULL DATE
FIX_TIMESTAMP DATE
REFORMAT_TIMESTAMP DATE
SQL> select object_name, block_id, corrupt_type, marked_corrupt,
2 corrupt_description, repair_description
3 from repair_table;
OBJECT_NAME BLOCK_ID CORRUPT_TYPE MARKED_COR
CORRUPT_DESCRIPTION
REPAIR_DESCRIPTION
T1 3 1 FALSE
kdbchk: row locked by non-existent transaction
table=0 slot=0
lockid=32 ktbbhitc=1
mark block software corrupt
Data Extraction
===============
repair table에 의하면 file 6 ,block 3 에 corrupt 이 났음을 알수 있다
그러나 아직 이 block 은 corrupt 로 mark 되어 있지 않으므로 필요 data 를
추출하여야 한다.
1. ALTER SYSTEM DUMP (nrows = 3) 에 의해 block안에 있는 row수를 결정한다.
2. corrupt object를 select 하여 가능한 정보를 추출한다.
SQL> -- The following query can be used to salvage data from a corrupt block.
SQL> -- Creating a temporary table facilitates data insertion.
SQL> create table temp_t1 as
2 select * from system.t1
3 where dbms_rowid.rowid_block_number(rowid) = 3
4 and dbms_rowid.rowid_to_absolute_fno (rowid, 'SYSTEM','T1') = 6;
Table created.
SQL> select col1 from temp_t1;
COL1
2
3
DBMS_REPAIR.FIX_CORRUPT_BLOCKS (ORA-1578)
============================================
FIX_CORRUPT_BLOCKS procedure는 repair table 의 정보를 이용하여 corrupt
blocks 을 fix 한다
그러나 아직 full table scan 시 여전히 error 가 발생한다
SQL> declare
2 fix_count int;
3 begin
4 fix_count := 0;
5 dbms_repair.fix_corrupt_blocks (
6 schema_name => 'SYSTEM',
7 object_name => 'T1',
8 object_type => dbms_repair.table_object,
9 repair_table_name => 'REPAIR_TABLE',
10 fix_count => fix_count);
11 dbms_output.put_line('fix count: ' || to_char(fix_count));
12 end;
13 /
fix count: 1
PL/SQL procedure successfully completed.
SQL> select object_name, block_id, marked_corrupt
2 from repair_table;
OBJECT_NAME BLOCK_ID MARKED_COR
T1 3 TRUE
SQL> select * from system.t1;
select * from system.t1
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 6, block # 3)
ORA-01110: data file 6: '/tmp/ts_corrupt.dbf'
DBMS_REPAIR.DUMP_ORPHAN_KEYS
==============================
DUMP_ORPHAN_KEYS는 corrupt data 에 해당하는 index 를 나타내 준다
SQL> select index_name from dba_indexes
2 where table_name in (select distinct object_name from repair_table);
INDEX_NAME
T1_PK
SQL> @dumpOrphanKeys
SQL> set serveroutput on
SQL>
SQL> declare
2 key_count int;
3 begin
4 key_count := 0;
5 dbms_repair.dump_orphan_keys (
6 schema_name => 'SYSTEM',
7 object_name => 'T1_PK',
8 object_type => dbms_repair.index_object,
9 repair_table_name => 'REPAIR_TABLE',
10 orphan_table_name => 'ORPHAN_KEY_TABLE',
11 key_count => key_count);
12 dbms_output.put_line('orphan key count: ' || to_char(key_count));
13 end;
14 /
orphan key count: 3
PL/SQL procedure successfully completed.
SQL> desc orphan_key_table
Name Null? Type
SCHEMA_NAME NOT NULL VARCHAR2(30)
INDEX_NAME NOT NULL VARCHAR2(30)
IPART_NAME VARCHAR2(30)
INDEX_ID NOT NULL NUMBER
TABLE_NAME NOT NULL VARCHAR2(30)
PART_NAME VARCHAR2(30)
TABLE_ID NOT NULL NUMBER
KEYROWID NOT NULL ROWID
KEY NOT NULL ROWID
DUMP_TIMESTAMP NOT NULL DATE
SQL> select index_name, count(*) from orphan_key_table
2 group by index_name;
INDEX_NAME COUNT(*)
T1_PK 3
Note: orphan key table의 index 는 다시 rebuild 되어야 한다.
DBMS_REPAIR.SKIP_CORRUPT_BLOCKS
===============================
SKIP_CORRUPT_BLOCKS 은 table 과 index 의 corrupt block 을 skip 하는 것을 enable/disable 을 실시한다.
Suggestion: SKIP_CORRUPT_BLOCKS 가 enabled되면 orphan key table의 모든
index 는 모두 rebuild 되어야 한다. ( all index associated with object
if DUMP_ORPHAN_KEYS was omitted).
SQL> @skipCorruptBlocks
SQL> declare
2 begin
3 dbms_repair.skip_corrupt_blocks (
4 schema_name => 'SYSTEM',
5 object_name => 'T1',
6 object_type => dbms_repair.table_object,
7 flags => dbms_repair.skip_flag);
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> select table_name, skip_corrupt from dba_tables
2 where table_name = 'T1';
TABLE_NAME SKIP_COR
T1 ENABLED
SQL> -- rows in corrupt block skipped, no errors on full table scan
SQL> select * from system.t1;
COL1 COL2
4 dddd
5 eeee
--> Notice the pk index has not yet been corrected.
SQL> insert into system.t1 values (1,'aaaa');
insert into system.t1 values (1,'aaaa')
SQL> select * from system.t1 where col1 = 1;
no rows selected
DBMS_REPAIR.REBUILD_FREELISTS
===============================
REBUILD_FREELISTS rebuilds freelists for the specified object.
SQL> declare
2 begin
3 dbms_repair.rebuild_freelists (
4 schema_name => 'SYSTEM',
5 object_name => 'T1',
6 object_type => dbms_repair.table_object);
7 end;
8 /
PL/SQL procedure successfully completed.
Rebuild Index
=============
Note: Every index identified in the orphan key table should be rebuilt to
ensure consistent results.
SQL> alter index system.t1_pk rebuild online;
Index altered.
SQL> insert into system.t1 values (1, 'aaaa');
1 row created.
SQL> select * from system.t1;
COL1 COL2
4 dddd
5 eeee
1 aaaa
Reference Document
------------------Try look to alert<SID>.log file for full error report (you could paste it here).
Also from alert log you could get real values for db_block_buffers and shared_pool_size parameters that used during instance startup. -
MULTIPLE ARCHIVER PROCESSES FAQ ( ORACLE 8I NEW FEATURE )
제품 : ORACLE SERVER
작성날짜 : 2002-04-19
MULTIPLE ARCHIVER PROCESSES FAQ ( ORACLE 8I NEW FEATURE )
=========================================================
PURPOSE
1. LOG_ARCHIVE_MAX_PROCESSES가 하는 역할
2. LOG_ARCHIVE_MAX_PROCESSES 값은 동적으로 변경 가능한지 여부
3. Archiver process의 갯수가 동적으로 바뀌는 메카니즘
4. 어떤 archiver process가 online log를 archive시켰는지 판단 방법
Explanation
1. LOG_ARCHIVE_MAX_PROCESSES가 하는 역할
Oracle 8i에는 다중 archive destination을 지원하며, 단일 archiver의
부하를 줄여주기 위해 multiple archiver process를 사용할 수 있다.
LOG_ARCHIVE_MAX_PROCESSES 파라미터로 구동시킬 최대 ARCH 프로세스의
갯수를 지정하면 된다.
만약 LOG_ARCHIVE_START 값이 TRUE로 지정되어 있다면 인스턴스 구동시
init 파일에 지정된 LOG_ARCHIVE_MAX_PROCESSES에 지정된 값을 읽어
들인다. 만약 LOG_ARCHIVE_START 값이 true인데 LOG_ARCHIVE_MAX_PROCESSES
값이 별도로 지정되어 있지 않을 경우에는 arc0 프로세스만을 구동시킨다.
LOG_ARCHIVE_MAX_PROCESSES 값이 별도로 지정되었을 경우 (1 - 10 범위),
arc0, arc1 과 같은 추가 프로세스를 구동시킨다.
하지만, 이 파라미터 값을 기본값 1이 아닌 다른 값으로 명시적으로 지정할
필요는 없다. 왜냐하면, 시스템에서 몇개의 ARCn 프로세스가
필요한지를 판단하여, 추가 ARCn 프로세스를 생성하기 때문이다.
2. LOG_ARCHIVE_MAX_PROCESSES 값은 동적으로 변경 가능한지 여부
alter system 명령에서 set LOG_ARCHIVE_MAX_PROCESSES=n 으로
지정하여 동적으로 값을 변경할 수 있다. 이때 n은 1 부터 10사이의
값이어야 한다. 하지만, LOG_ARCHIVE_START 값이 FALSE로 지정되어
있을 경우에는, 명령을 실행시켜도 아무런 영향을 미치지
못한다.
3. Archiver process의 갯수가 동적으로 바뀌는 메카니즘
만약 LOG_ARCHIVE_START 값이 TRUE로 지정되어 있다면, 오라클에서는
구동시 하나의 archiver process (ARC0)를 구동시킨다. 이 파라미터
값은 필요시 LATER SYSTEM 명령으로 지정된 갯수만큼의
archive process를 구동시킬 수 있다.
예)
SVRMGRL>alter system set LOG_ARCHIVE_MAX_PROCESSES=4;
위 명령을 실행 시키면 다음과 같은 절차에 따라 ARC1, ARC2, ARC3를
추가한다.
1) Shadow process는 primary archive process에게 프로세스 갯수를
늘릴 것을 요청한다.
2) Archiver process는 kcrrschd 함수를 호출한다. (kcrrschd:
다중 arch process를 schedule)
3) 만약 요청된 process의 갯수가 현재 사용중인 archiver process
갯수보다 작은지 확인한다. 만약 새로 지정된 값이 적거나, ARCHIVING이
DISABLE 된 상태라면 다른 조치를 취하지 않고 return 한다. 그렇지
않다면 지원되는 최대 갯수인 10을 넘는지 확인하고 10을 넘을 경우에는
프로세스의 갯수를 10으로 지정한다.
4) Scheduler 함수는 kcrxs{} structure에 대한 latch를 확보한다.
여기서 kcrxs{} structure는 ARCH Activation status를 나타낸다.
5) Scheduler 함수는 지정된 process 갯수 만큼 loop를 돌면서
schedule된 상태를 structure KCRRSCHED에 반영시킨다.
6) 그리고 나서 latch를 release 시킨 후 kcrrsmp 함수를 ( kcrrsmp:
다중 arch processs 구동 ) 호출한다.
7) kcrrsmp 함수는 kcrrxs{} structure (ARCH 구동 상태)에 대한 latch를
확보하여 code 실행을 serialize 시켜 이 함수가 동시에 실행되더라도
한번에 하나씩 실행될 수 있도록 한다.
8) pending 상태에 있는 archiver process를 스케쥴링 하고, dead process가
있으면 clean up 시킨다.
9) 그리고 나서 이 함수는 지정된 process 갯수 만큼 loop를 돌면서
KCRRSCHED 상태를 KCRRSTART으로 바꾸어, archiver process들을
구동 준비 상태로 만든다.
10) latch를 release 시킨 후 ARCH 프로세스를 구동시킨다.
11) kcrrsmp함수는 latch를 다시 획득한다. 각각의 archiver 프로세스는
자기 자신을 activate 시킬 것을 통보 받는다. archiver process는
자기 자신을 activate 시킨 후 alert file에 관련 사항을 기록한다.
12) 호출을 하는 함수는 모든 archiver process가 자기 자신을
activate 시키고, kcrrxs structure의 내용을 갱신할 때 까지
sleep 상태에서 대기한다.
13) 끝으로, 현재 archiver process의 갯수가 요청된 archiver process
의 갯수와 일치 하면, latch를 release 시키고 break 한다. ( C
에서의 break )
alert. log 에는 위 과정이 다음과 같이 반영된다.
sql: prodding the archiver
ALTER SYSTEM SET log_archive_max_processes=4;
Tue Jul 13 02:15:14 1999
ARC0: changing ARC1 KCRRNOARCH->KCRRSCHED
ARC0: changing ARC2 KCRRNOARCH->KCRRSCHED
ARC0: changing ARC3 KCRRNOARCH->KCRRSCHED
ARC0: STARTING ARCH PROCESSES
ARC0: changing ARC1 KCRRSCHED->KCRRSTART
ARC0: changing ARC2 KCRRSCHED->KCRRSTART
ARC0: changing ARC3 KCRRSCHED->KCRRSTART
ARC0: invoking ARC1
Tue Jul 13 02:15:15 1999
ARC1: changing ARC1 KCRRSTART->KCRRACTIVE
Tue Jul 13 02:15:15 1999
ARC0: Initializing ARC1
ARC0: ARC1 invoked
ARC0: invoking ARC2
ARC1 started with pid=10
ARC1: Archival started
Tue Jul 13 02:15:15 1999
ARC2: changing ARC2 KCRRSTART->KCRRACTIVE
Tue Jul 13 02:15:15 1999
ARC0: Initializing ARC2
ARC2 와 ARC3도 동일한 절차를 따른다.
흥미로운 사실은 프로세스의 갯수를 줄일 수도 있다는 것이다. 예를 들어
다음과 같은 명령을 실행시킬 경우
SVRMGRL>alter system set LOG_ARCHIVE_MAX_PROCESSES=2;
다음과 같은 작업이 순서대로 실행된다.
1) shadow process는 현재 active 상태인 archiver process와 접속을 한다.
2) archiverprocess는 kcrrxmp 함수를 호출한다. ( kcrrxmp: 다중
Arch process 정지 )
3) kcrrxmp 함수는 kcrrxs{} structure에 (ARCH 구동 상태) 대한 latch를 획득하여 다른 프로세스에서 structure를 동시에 병경하지 않도록 한다.
4) 새로 요청된 archiver process의 갯수가 현재 사용중인 archiver process
의 갯수보다 작은지 확인한다.
5) 만약 작다면, archiver process 목록 가운데, 가장 최근에 schedule
되어, archival 작업에 schedule 차례가 금방 돌아 오지 않을 프로세스를
찾아낸다.
6) 각각의 프로세스에 대해 KCRRACTIVE 상태에서 KCRRSHUTDN로 상태를
변경할 것을 요청한다.
7) 상태가 바뀌면, OS에서 해당 프로세스를 종료시키도록 하고, 상태를
KCRRDEAD로 바꾼다. 관련된 상태 정보가 정리되고 kcrrxs{} structure의
내용이 갱신된다.
6) ,7) 과정은 지정된 archiver process 갯수로 줄어들 때 까지
반복된다.
8) 새로운 archiver process의 갯수로 kcrrxs structure 내용이 갱신된다.
9) latch를 release 시킨다.
상태 변동은 다음과 같이 alert. log 파일에 반영된다.
sql: prodding the archiver
Tue Jul 13 00:34:20 1999
ARC3: changing ARC0 KCRRACTIVE->KCRRSHUTDN
ARC3: sending ARC0 shutdown message
ARC3: changing ARC1 KCRRACTIVE->KCRRSHUTDN
ARC3: sending ARC1 shutdown message
ARC3: received prod
Tue Jul 13 00:34:20 1999
ALTER SYSTEM SET log_archive_max_processes=2;
Tue Jul 13 00:34:20 1999
ARCH shutting down
ARC0: Archival stopped
ARC0: changing ARC0 KCRRSHUTDN->KCRRDEAD
Tue Jul 13 00:34:20 1999
ARCH shutting down
ARC1: Archival stopped
ARC1: changing ARC1 KCRRSHUTDN->KCRRDEAD
4. 어떤 archiver process가 online log를 archive시켰는지 판단 방법
Archiver process는 round-robin 방식으로 archiving 작업을 수행하도록
schedule 된다. 만약 다중 archiver process가 부하에 따라 activate 된
경우는 여러가지 경우의 수가 있을 수 있다. Oracle 8i에서는 다중
archive log dest를 지원하면서 archive log에 대한 duplexing을 지원
하기 때문에, 어떤프로세스가 log file을 archive 시켰는지를 기록할 필요가
있다.
Oracle 8i에서 archival 작업은 성공할 때 마다 trace file에 archiver
process 명을 기록한다.
다음은 관련 trace file의 주요 내용이다.
Instance name: v815
Redo thread mounted by this instance: 1
Oracle process number: 12
Unix process pid: 3658, image: oracle@oracle8i (ARC3)
*** Session ID:(12. 1) 1999. 07. 13. 02. 15. 15. 000
*** 1999. 07. 13. 02. 15. 15. 000
*** 1999. 07. 13. 02. 33. 06. 000
ARC3: Begin archiving log# 1 seq# 38 thrd# 1
ARC3: VALIDATE
ARC3: PREPARE
ARC3: INITIALIZE
ARC3: SPOOL
ARC3: Creating archive destination 1 : '/bigdisk/oracle8i/dbs/arch/1_38.
dbf'
ARC3: Archiving block 1 count 1 to : '/bigdisk/oracle8i/dbs/arch/1_38.
dbf'
ARC3: Closing archive destination 1 : /bigdisk/oracle8i/dbs/arch/1_38.
dbf
ARC3: FINISH
ARC3: Archival success destination 1 : '/bigdisk/oracle8i/dbs/arch/1_38.
dbf'
ARC3: COMPLETE, all destinations archived
ARC3: ArchivedLog entry added: /bigdisk/oracle8i/dbs/arch/1_38. dbf
ARC3: ARCHIVED
*** 1999. 07. 13. 02. 33. 06. 000
ARC3: Completed archiving log# 1 seq# 38 thrd# 1
이 정보를 가지고, archive process 3이 log sequence 38번을
destination 1 :/bigdisk/oracle8i/dbs/arch 에 archive 시킨 것을 알 수 있다.
Reference Ducumment
<Note:73163.1>제품 : ORACLE SERVER
작성날짜 : 2002-04-19
MULTIPLE ARCHIVER PROCESSES FAQ ( ORACLE 8I NEW FEATURE )
=========================================================
PURPOSE
1. LOG_ARCHIVE_MAX_PROCESSES가 하는 역할
2. LOG_ARCHIVE_MAX_PROCESSES 값은 동적으로 변경 가능한지 여부
3. Archiver process의 갯수가 동적으로 바뀌는 메카니즘
4. 어떤 archiver process가 online log를 archive시켰는지 판단 방법
Explanation
1. LOG_ARCHIVE_MAX_PROCESSES가 하는 역할
Oracle 8i에는 다중 archive destination을 지원하며, 단일 archiver의
부하를 줄여주기 위해 multiple archiver process를 사용할 수 있다.
LOG_ARCHIVE_MAX_PROCESSES 파라미터로 구동시킬 최대 ARCH 프로세스의
갯수를 지정하면 된다.
만약 LOG_ARCHIVE_START 값이 TRUE로 지정되어 있다면 인스턴스 구동시
init 파일에 지정된 LOG_ARCHIVE_MAX_PROCESSES에 지정된 값을 읽어
들인다. 만약 LOG_ARCHIVE_START 값이 true인데 LOG_ARCHIVE_MAX_PROCESSES
값이 별도로 지정되어 있지 않을 경우에는 arc0 프로세스만을 구동시킨다.
LOG_ARCHIVE_MAX_PROCESSES 값이 별도로 지정되었을 경우 (1 - 10 범위),
arc0, arc1 과 같은 추가 프로세스를 구동시킨다.
하지만, 이 파라미터 값을 기본값 1이 아닌 다른 값으로 명시적으로 지정할
필요는 없다. 왜냐하면, 시스템에서 몇개의 ARCn 프로세스가
필요한지를 판단하여, 추가 ARCn 프로세스를 생성하기 때문이다.
2. LOG_ARCHIVE_MAX_PROCESSES 값은 동적으로 변경 가능한지 여부
alter system 명령에서 set LOG_ARCHIVE_MAX_PROCESSES=n 으로
지정하여 동적으로 값을 변경할 수 있다. 이때 n은 1 부터 10사이의
값이어야 한다. 하지만, LOG_ARCHIVE_START 값이 FALSE로 지정되어
있을 경우에는, 명령을 실행시켜도 아무런 영향을 미치지
못한다.
3. Archiver process의 갯수가 동적으로 바뀌는 메카니즘
만약 LOG_ARCHIVE_START 값이 TRUE로 지정되어 있다면, 오라클에서는
구동시 하나의 archiver process (ARC0)를 구동시킨다. 이 파라미터
값은 필요시 LATER SYSTEM 명령으로 지정된 갯수만큼의
archive process를 구동시킬 수 있다.
예)
SVRMGRL>alter system set LOG_ARCHIVE_MAX_PROCESSES=4;
위 명령을 실행 시키면 다음과 같은 절차에 따라 ARC1, ARC2, ARC3를
추가한다.
1) Shadow process는 primary archive process에게 프로세스 갯수를
늘릴 것을 요청한다.
2) Archiver process는 kcrrschd 함수를 호출한다. (kcrrschd:
다중 arch process를 schedule)
3) 만약 요청된 process의 갯수가 현재 사용중인 archiver process
갯수보다 작은지 확인한다. 만약 새로 지정된 값이 적거나, ARCHIVING이
DISABLE 된 상태라면 다른 조치를 취하지 않고 return 한다. 그렇지
않다면 지원되는 최대 갯수인 10을 넘는지 확인하고 10을 넘을 경우에는
프로세스의 갯수를 10으로 지정한다.
4) Scheduler 함수는 kcrxs{} structure에 대한 latch를 확보한다.
여기서 kcrxs{} structure는 ARCH Activation status를 나타낸다.
5) Scheduler 함수는 지정된 process 갯수 만큼 loop를 돌면서
schedule된 상태를 structure KCRRSCHED에 반영시킨다.
6) 그리고 나서 latch를 release 시킨 후 kcrrsmp 함수를 ( kcrrsmp:
다중 arch processs 구동 ) 호출한다.
7) kcrrsmp 함수는 kcrrxs{} structure (ARCH 구동 상태)에 대한 latch를
확보하여 code 실행을 serialize 시켜 이 함수가 동시에 실행되더라도
한번에 하나씩 실행될 수 있도록 한다.
8) pending 상태에 있는 archiver process를 스케쥴링 하고, dead process가
있으면 clean up 시킨다.
9) 그리고 나서 이 함수는 지정된 process 갯수 만큼 loop를 돌면서
KCRRSCHED 상태를 KCRRSTART으로 바꾸어, archiver process들을
구동 준비 상태로 만든다.
10) latch를 release 시킨 후 ARCH 프로세스를 구동시킨다.
11) kcrrsmp함수는 latch를 다시 획득한다. 각각의 archiver 프로세스는
자기 자신을 activate 시킬 것을 통보 받는다. archiver process는
자기 자신을 activate 시킨 후 alert file에 관련 사항을 기록한다.
12) 호출을 하는 함수는 모든 archiver process가 자기 자신을
activate 시키고, kcrrxs structure의 내용을 갱신할 때 까지
sleep 상태에서 대기한다.
13) 끝으로, 현재 archiver process의 갯수가 요청된 archiver process
의 갯수와 일치 하면, latch를 release 시키고 break 한다. ( C
에서의 break )
alert. log 에는 위 과정이 다음과 같이 반영된다.
sql: prodding the archiver
ALTER SYSTEM SET log_archive_max_processes=4;
Tue Jul 13 02:15:14 1999
ARC0: changing ARC1 KCRRNOARCH->KCRRSCHED
ARC0: changing ARC2 KCRRNOARCH->KCRRSCHED
ARC0: changing ARC3 KCRRNOARCH->KCRRSCHED
ARC0: STARTING ARCH PROCESSES
ARC0: changing ARC1 KCRRSCHED->KCRRSTART
ARC0: changing ARC2 KCRRSCHED->KCRRSTART
ARC0: changing ARC3 KCRRSCHED->KCRRSTART
ARC0: invoking ARC1
Tue Jul 13 02:15:15 1999
ARC1: changing ARC1 KCRRSTART->KCRRACTIVE
Tue Jul 13 02:15:15 1999
ARC0: Initializing ARC1
ARC0: ARC1 invoked
ARC0: invoking ARC2
ARC1 started with pid=10
ARC1: Archival started
Tue Jul 13 02:15:15 1999
ARC2: changing ARC2 KCRRSTART->KCRRACTIVE
Tue Jul 13 02:15:15 1999
ARC0: Initializing ARC2
ARC2 와 ARC3도 동일한 절차를 따른다.
흥미로운 사실은 프로세스의 갯수를 줄일 수도 있다는 것이다. 예를 들어
다음과 같은 명령을 실행시킬 경우
SVRMGRL>alter system set LOG_ARCHIVE_MAX_PROCESSES=2;
다음과 같은 작업이 순서대로 실행된다.
1) shadow process는 현재 active 상태인 archiver process와 접속을 한다.
2) archiverprocess는 kcrrxmp 함수를 호출한다. ( kcrrxmp: 다중
Arch process 정지 )
3) kcrrxmp 함수는 kcrrxs{} structure에 (ARCH 구동 상태) 대한 latch를 획득하여 다른 프로세스에서 structure를 동시에 병경하지 않도록 한다.
4) 새로 요청된 archiver process의 갯수가 현재 사용중인 archiver process
의 갯수보다 작은지 확인한다.
5) 만약 작다면, archiver process 목록 가운데, 가장 최근에 schedule
되어, archival 작업에 schedule 차례가 금방 돌아 오지 않을 프로세스를
찾아낸다.
6) 각각의 프로세스에 대해 KCRRACTIVE 상태에서 KCRRSHUTDN로 상태를
변경할 것을 요청한다.
7) 상태가 바뀌면, OS에서 해당 프로세스를 종료시키도록 하고, 상태를
KCRRDEAD로 바꾼다. 관련된 상태 정보가 정리되고 kcrrxs{} structure의
내용이 갱신된다.
6) ,7) 과정은 지정된 archiver process 갯수로 줄어들 때 까지
반복된다.
8) 새로운 archiver process의 갯수로 kcrrxs structure 내용이 갱신된다.
9) latch를 release 시킨다.
상태 변동은 다음과 같이 alert. log 파일에 반영된다.
sql: prodding the archiver
Tue Jul 13 00:34:20 1999
ARC3: changing ARC0 KCRRACTIVE->KCRRSHUTDN
ARC3: sending ARC0 shutdown message
ARC3: changing ARC1 KCRRACTIVE->KCRRSHUTDN
ARC3: sending ARC1 shutdown message
ARC3: received prod
Tue Jul 13 00:34:20 1999
ALTER SYSTEM SET log_archive_max_processes=2;
Tue Jul 13 00:34:20 1999
ARCH shutting down
ARC0: Archival stopped
ARC0: changing ARC0 KCRRSHUTDN->KCRRDEAD
Tue Jul 13 00:34:20 1999
ARCH shutting down
ARC1: Archival stopped
ARC1: changing ARC1 KCRRSHUTDN->KCRRDEAD
4. 어떤 archiver process가 online log를 archive시켰는지 판단 방법
Archiver process는 round-robin 방식으로 archiving 작업을 수행하도록
schedule 된다. 만약 다중 archiver process가 부하에 따라 activate 된
경우는 여러가지 경우의 수가 있을 수 있다. Oracle 8i에서는 다중
archive log dest를 지원하면서 archive log에 대한 duplexing을 지원
하기 때문에, 어떤프로세스가 log file을 archive 시켰는지를 기록할 필요가
있다.
Oracle 8i에서 archival 작업은 성공할 때 마다 trace file에 archiver
process 명을 기록한다.
다음은 관련 trace file의 주요 내용이다.
Instance name: v815
Redo thread mounted by this instance: 1
Oracle process number: 12
Unix process pid: 3658, image: oracle@oracle8i (ARC3)
*** Session ID:(12. 1) 1999. 07. 13. 02. 15. 15. 000
*** 1999. 07. 13. 02. 15. 15. 000
*** 1999. 07. 13. 02. 33. 06. 000
ARC3: Begin archiving log# 1 seq# 38 thrd# 1
ARC3: VALIDATE
ARC3: PREPARE
ARC3: INITIALIZE
ARC3: SPOOL
ARC3: Creating archive destination 1 : '/bigdisk/oracle8i/dbs/arch/1_38.
dbf'
ARC3: Archiving block 1 count 1 to : '/bigdisk/oracle8i/dbs/arch/1_38.
dbf'
ARC3: Closing archive destination 1 : /bigdisk/oracle8i/dbs/arch/1_38.
dbf
ARC3: FINISH
ARC3: Archival success destination 1 : '/bigdisk/oracle8i/dbs/arch/1_38.
dbf'
ARC3: COMPLETE, all destinations archived
ARC3: ArchivedLog entry added: /bigdisk/oracle8i/dbs/arch/1_38. dbf
ARC3: ARCHIVED
*** 1999. 07. 13. 02. 33. 06. 000
ARC3: Completed archiving log# 1 seq# 38 thrd# 1
이 정보를 가지고, archive process 3이 log sequence 38번을
destination 1 :/bigdisk/oracle8i/dbs/arch 에 archive 시킨 것을 알 수 있다.
Reference Ducumment
<Note:73163.1> -
INVOKER'S RIGHT ( ORACLE 8I NEW FEATURE )
제품 : PL/SQL
작성날짜 : 2000-05-31
INVOKER'S RIGHT ( ORACLE 8I NEW FEATURE )
==============================================
AUTHID와 SQL_NAME_RESOLVE에 대해 CURRENT_USER, DEFINER를 지정
8.1 현재 버젼에서는 AUTHID = CURRENT_USER 일때는 SQL_NAME_RESOLVE =
CURRENT_USER, AUTHID = DEFINERE 일때는 SQL_NAME_RESOLVE = DEFINER만
가능
- AUTHID , SQL_NAME_RESOLVE = DEFINER
scott 이라는 user에 다음과 같은 stored procedure를 정의했을때
foo 라는 user에서는 scott.emp 나 scott.empcount 에 대한
select priviledge, insert priveledge가 없어도 name_count에
대한 execute priveledge를 가지고 있으면 실행 가능하다.
그 이유는 name_count를 invoke 시킨 user가 foo라고 할 지라도
내부적으로는 scott의 priveledge를 가지고 name_count라는
procedure가 실행 되기 때문이다.
create or replace procedure name_count
authid definer as
n number;
begin
select count(*) into n from scott.emp;
insert into empcount values(n);
end;
- AUTHID , SQL_NAME_RESOLVE = CURRENT_USER
scott이라는 user에서 다음과 같은 stored procedure를 정의했을
때 foo 라는 user에서 name_count에 대한 execute priveledge를
가지고 있다고 할 지라도 scott.emp 에 대한 select priveledge를
가지고 있지 못하면 name_count를 실행 할 수 없다. 또한
empcount table은 scott.empcount가 아니라, foo.empcount 테이블
을 뜻하는데, 그 이유는 authid 와 sql_name_resolve가
current_user로 지정이 되어 있기 때문이다.
foo 라는 user에 scott.emp 테이블에 대한 select priviledge를
grant 해 주고, empcount 테이블을 만든후 실행 시키면
scott.emp의 row 갯수를 foo.empcount 테이블에 insert 시키게
된다.
create or replace procedure name_count
authid current_user as
n number;
begin
select count(*) into n from scott.emp;
insert into empcount values(n);
end;Seems that you are right ... iSQLPlus is not referenced in the Oracle8i documentation and was probably not available until Oracle9i
However, it is certainly possible to install only the iSQLPlus capability of 9i (and probably10g) and configure the tnsnames.ora for the iSQLPlus installation to communicate with an 8i database.
This is partially discussed here http://download-west.oracle.com/docs/cd/B10501_01/server.920/a90842/ch3.htm#1005835
Works ... as long as the use is willing to accept the lesser capability of Oracle8i ...
Maybe you are looking for
-
How do I download a webpage in order to add designs f.e.?
I am not sure if this is the appropriate forum, ... Let's say I am designing a new logo for a client. Now I like to build in this logo to their existing webpage so that the client can see, how the logo is integrated in their site. How would I do this
-
Setting environment variable Forms 10.1.2.0.2 (10g)
Hi, We are migrating forms from 6i to 10g(10.1.2.0.2). We want to run reports in batch form Forms 10g and setting these environment variable. Please let me know correct path for these variables in Application Server. FORMS_PATH= FORMS_OUTPUT= FORMS_M
-
BADI USER/EXIT for inserting cust. data after the Pruch. Requsitio is SAVED
Hi all, Is there any BADI or USER EXIT available for the transaction ME51N to save some customer data fields in a separta Z table , after the data is saved from the Purcahse requistion . I have used the customer exit MEREQ001 for additing the custo
-
Calling stored procedure in Access but data stored in SQL
Our data is stored in SQL, but due to some restriction I need to make stored procedure in Access instead of SQL. I created the relevant link in Access to call the tables in SQL. Whenever I invoke the SQL database in Access, a login screen will appear
-
Any known issues with using JAI-CVM10, Rev. D in Random Trigger Mode w/ PCI-1409
I am using a JAI-CVM10, Rev. D camera with a PCI-1409 framegrabber. I am having trouble getting it to work in random trigger mode. I used the example vi for JAI-CVM10, Rev. F and am able to get a picture using the internal trigger. However, I lose th