You are on page 1of 37

ORA

5 O
r 5 O

B C N
O 0 47
A
c A
L O
A l A
O A
O U
k A

P
http://yangtingkun.net
O www.enmotech.com ORA

ORA-600(16164)
alert O MERGE alert O
P
Errors in file /u1/oracle/admin/repdb01/bdump/repdb01_j000_20925.trc:
ORA-00600: internal error code, arguments: [16164], [0], [], [], [], [], [], []

trace O P
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [16164], [0], [], [], [], [], [], []
Current SQL statement for this session:
MERGE /*+ append */ INTO
MIS2_USER U
USING (SELECT A.ID USER_ID, A.CODE CODE, A.ENABLE_FLAG USER_ENABLE_FLAG,
B.ENABLE_FLAG ORG_ENABLE_FLAG, A.NAME USER_NAME, B.NAME ORG_NAME,
C.DATA_ORG_ID ORG_ID, A.CREATE_DATE CREATE_DATE
FROM GPO_USR_USER A, GPO_USR_ORG B, GPO_REG_ORG C
WHERE A.ORG_ID = B.ID AND B.REG_ORG_ID = C.ID AND C.FACTORY_FLAG = '1'
UNION ALL
SELECT A.ID USER_ID, A.USER_CODE CODE, A.ENABLE_FLAG USER_ENABLE_FLAG,
B.ENABLE_FLAG ORG_ENABLE_FLAG, A.USER_NAME USER_NAME, B.NAME ORG_NAME,
A.DEFAULT_ORGID ORG_ID, A.CREATE_DATE CREATE_DATE
FROM USR_USER A, CAT_ORG B
WHERE A.DEFAULT_ORGID = B.ID AND B.ORG_TYPE = '1') B
ON (U.USER_ID = B.USER_ID)
WHEN MATCHED THEN
UPDATE
SET U.CODE = B.CODE,
U.USER_ENABLE_FLAG = B.USER_ENABLE_FLAG,
U.ORG_ENABLE_FLAG = B.ORG_ENABLE_FLAG,
U.USER_NAME = B.USER_NAME,
U.ORG_NAME = B.ORG_NAME,
U.ORG_ID = B.ORG_ID
WHEN NOT MATCHED THEN
INSERT (USER_ID, CODE, USER_ENABLE_FLAG, ORG_ENABLE_FLAG,
USER_NAME, ORG_NAME, ORG_ID, CREATE_DATE)
VALUES (B.USER_ID, B.CODE, B.USER_ENABLE_FLAG, B.ORG_ENABLE_FLAG,
B.USER_NAME, B.ORG_NAME, B.ORG_ID, B.CREATE_DATE)
----- PL/SQL Call Stack -----
object line object
handle number name
6b1cea980 474 procedure MIS2.P_INIT_DATA
6a33fd260 1 anonymous block
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+328 CALL ksedst()+0 FFFFFFFF7FFF5350 ?
000000000 ? 000000000 ?
00000003E ?
FFFFFFFF7FFF5BE8 ?
1031D56C8 ?
kgeriv()+208 PTR_CALL 0000000000000000 000000000 ? 000103400 ?

D132D
O www.enmotech.com ORA

0001035D9 ? 000102C00 ?
1035D9000 ? 1035D9C28 ?
kgeasi()+180 CALL kgeriv()+0 1035D9E88 ? 1036C7148 ?

SQL MERGE O Metalink i O Bug MERGE Metalink


Doc IDP2754863.8 k Oracle O
Bug Bug No. 2754863 Oi k Bug O
O PSQL k CURSOR O
k ROWNUM Oracle O O
U Metalink k
U patch O
patch O k
k e ?
O
P
SQL> MERGE /*+ append */ INTO
2 MIS2_USER U
3 USING (SELECT A.ID USER_ID,
4 A.CODE CODE,
5 A.ENABLE_FLAG USER_ENABLE_FLAG,
6 B.ENABLE_FLAG ORG_ENABLE_FLAG,
7 A.NAME USER_NAME,
8 B.NAME ORG_NAME,
9 C.DATA_ORG_ID ORG_ID,
10 A.CREATE_DATE CREATE_DATE
11 FROM GPO_USR_USER A, GPO_USR_ORG B, GPO_REG_ORG C
12 WHERE A.ORG_ID = B.ID
13 AND B.REG_ORG_ID = C.ID
14 AND C.FACTORY_FLAG = '1'
15 UNION ALL
16 SELECT A.ID USER_ID,
17 A.USER_CODE CODE,
18 A.ENABLE_FLAG USER_ENABLE_FLAG,
19 B.ENABLE_FLAG ORG_ENABLE_FLAG,
20 A.USER_NAME USER_NAME,
21 B.NAME ORG_NAME,
22 A.DEFAULT_ORGID ORG_ID,
23 A.CREATE_DATE CREATE_DATE
24 FROM USR_USER A, CAT_ORG B
25 WHERE A.DEFAULT_ORGID = B.ID
26 AND B.ORG_TYPE = '1') B
27 ON (U.USER_ID = B.USER_ID)
28 WHEN MATCHED THEN
29 UPDATE
30 SET U.CODE = B.CODE,
31 U.USER_ENABLE_FLAG = B.USER_ENABLE_FLAG,
32 U.ORG_ENABLE_FLAG = B.ORG_ENABLE_FLAG,
33 U.USER_NAME = B.USER_NAME,
34 U.ORG_NAME = B.ORG_NAME,
35 U.ORG_ID = B.ORG_ID

D133D
O www.enmotech.com ORA

36 WHEN NOT MATCHED THEN


37 INSERT
38 (USER_ID,
39 CODE,
40 USER_ENABLE_FLAG,
41 ORG_ENABLE_FLAG,
42 USER_NAME,
43 ORG_NAME,
44 ORG_ID,
45 CREATE_DATE)
46 VALUES
47 (B.USER_ID,
48 B.CODE,
49 B.USER_ENABLE_FLAG,
50 B.ORG_ENABLE_FLAG,
51 B.USER_NAME,
52 B.ORG_NAME,
53 B.ORG_ID,
54 B.CREATE_DATE)
55 ;
MIS2_USER U
*
ERROR at line 2:
ORA-00600: internal error code, arguments: [16164], [0], [], [], [], [], [], []

O
SQLO APPEND SQL e g O

P
SQL> MERGE INTO
2 MIS2_USER U
3 USING (SELECT A.ID USER_ID,
.
.
.
54 B.CREATE_DATE)
55 ;
MERGE INTO
*
ERROR at line 1:
ORA-30926: unable to get a stable set of rows in the source tables

O O ORA-600 k
ORA-30926 k O ORA-30926 O
Oracle k ORA-600 O O
ORA-30926 O Oracle P
ORA-30926 unable to get a stable set of rows in the source tables
Cause: A stable set of rows could not be got because of a large amount of DML activity or a
non-deterministic where clause.
Action: Remove any non-deterministic where clauses and reissue the DML.

D134D
O www.enmotech.com ORA

DML O O

U O Metalink U ORA-30926 Doc ID: 471956.1


O PThis error occurs with the Cost based Optimizer but not with RULE.
O e RULE O P
SQL> MERGE /*+ RULE */ INTO
2 MIS2_USER U
3 USING (SELECT A.ID USER_ID,
.
.
.
54 B.CREATE_DATE)
55 ;
MIS2_USER U
*
ERROR at line 2:
ORA-30926: unable to get a stable set of rows in the source tables

O O k RULE
1 O U RULE 2 RULE k O
ORA-30926
MERGE O MERGE O USING ON
k t ?
O MIS2_USER O e P
SQL> SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME
2 FROM USER_CONS_COLUMNS WHERE CONSTRAINT_NAME =
3 (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS
4 WHERE TABLE_NAME = 'MIS2_USER' AND CONSTRAINT_TYPE = 'P') AND OWNER = USER;
CONSTRAINT_NAME TABLE_NAME COLUMN_NAME
------------------------------ ------------------------------ ------------------------
PK_MIS2_USER MIS2_USER USER_ID
1 row selected.
SQL> SELECT COUNT(*), COUNT(DISTINCT USER_ID) FROM MIS2_USER;
COUNT(*) COUNT(DISTINCTUSER_ID)
---------- ----------------------
28268 28268

USER_ID MIS2_USER c O MIS2_USER O

e UNION ALL kO P
SQL> SELECT COUNT(*), COUNT(DISTINCT USER_ID) FROM
2 (SELECT A.ID USER_ID,
3 A.CODE CODE,
4 A.ENABLE_FLAG USER_ENABLE_FLAG,
5 B.ENABLE_FLAG ORG_ENABLE_FLAG,
6 A.NAME USER_NAME,
7 B.NAME ORG_NAME,
8 C.DATA_ORG_ID ORG_ID,

D135D
O www.enmotech.com ORA

9 A.CREATE_DATE CREATE_DATE
10 FROM GPO_USR_USER A, GPO_USR_ORG B, GPO_REG_ORG C
11 WHERE A.ORG_ID = B.ID
12 AND B.REG_ORG_ID = C.ID
13 AND C.FACTORY_FLAG = '1'
14 UNION ALL
15 SELECT A.ID USER_ID,
16 A.USER_CODE CODE,
17 A.ENABLE_FLAG USER_ENABLE_FLAG,
18 B.ENABLE_FLAG ORG_ENABLE_FLAG,
19 A.USER_NAME USER_NAME,
20 B.NAME ORG_NAME,
21 A.DEFAULT_ORGID ORG_ID,
22 A.CREATE_DATE CREATE_DATE
23 FROM USR_USER A, CAT_ORG B
24 WHERE A.DEFAULT_ORGID = B.ID
25 AND B.ORG_TYPE = '1');
COUNT(*) COUNT(DISTINCTUSER_ID)
---------- ----------------------
29060 27125

k O k
kO i k UNION ALL t USER_ID
kO SQLP
SQL> MERGE INTO
2 MIS2_USER U
3 USING (SELECT A.ID USER_ID,
4 A.CODE CODE,
5 A.ENABLE_FLAG USER_ENABLE_FLAG,
6 B.ENABLE_FLAG ORG_ENABLE_FLAG,
7 A.NAME USER_NAME,
8 B.NAME ORG_NAME,
9 C.DATA_ORG_ID ORG_ID,
10 A.CREATE_DATE CREATE_DATE
11 FROM GPO_USR_USER A, GPO_USR_ORG B, GPO_REG_ORG C
12 WHERE A.ORG_ID = B.ID
13 AND B.REG_ORG_ID = C.ID
14 AND C.FACTORY_FLAG = '1'
15 UNION ALL
16 SELECT A.ID USER_ID,
17 A.USER_CODE CODE,
18 A.ENABLE_FLAG USER_ENABLE_FLAG,
19 B.ENABLE_FLAG ORG_ENABLE_FLAG,
20 A.USER_NAME USER_NAME,
21 B.NAME ORG_NAME,
22 A.DEFAULT_ORGID ORG_ID,
23 A.CREATE_DATE CREATE_DATE
24 FROM USR_USER A, CAT_ORG B
25 WHERE A.DEFAULT_ORGID = B.ID
26 AND B.ORG_TYPE = '1'
27 AND A.ID NOT IN
28 (
29 SELECT A.ID FROM GPO_USR_USER A, GPO_USR_ORG B, GPO_REG_ORG C

D136D
O www.enmotech.com ORA

30 WHERE A.ORG_ID = B.ID


31 AND B.REG_ORG_ID = C.ID
32 AND C.FACTORY_FLAG = '1'
33 )
34 ) B
35 ON (U.USER_ID = B.USER_ID)
36 WHEN MATCHED THEN
37 UPDATE
38 SET U.CODE = B.CODE,
39 U.USER_ENABLE_FLAG = B.USER_ENABLE_FLAG,
40 U.ORG_ENABLE_FLAG = B.ORG_ENABLE_FLAG,
41 U.USER_NAME = B.USER_NAME,
42 U.ORG_NAME = B.ORG_NAME,
43 U.ORG_ID = B.ORG_ID
44 WHEN NOT MATCHED THEN
45 INSERT
46 (USER_ID,
47 CODE,
48 USER_ENABLE_FLAG,
49 ORG_ENABLE_FLAG,
50 USER_NAME,
51 ORG_NAME,
52 ORG_ID,
53 CREATE_DATE)
54 VALUES
55 (B.USER_ID,
56 B.CODE,
57 B.USER_ENABLE_FLAG,
58 B.ORG_ENABLE_FLAG,
59 B.USER_NAME,
60 B.ORG_NAME,
61 B.ORG_ID,
62 B.CREATE_DATE)
63 ;
27125 rows merged.
SQL> ROLLBACK;
Rollback complete.

P
SQL> MERGE /*+ APPEND */ INTO
2 MIS2_USER U
3 USING (SELECT A.ID USER_ID,
.
.
.
62 B.CREATE_DATE)
63 ;
27125 rows merged.
SQL> ROLLBACK;
Rollback complete.

I Metalink O i

D137D
O www.enmotech.com ORA

O 44 2 720 2 11
r O
O U 3
k O O
U
U O U k U BugO
O 9204 U P
SQL> CONN TEST/TEST@172.25.88.94/TESTDATA

SQL> SELECT * FROM V$VERSION;


BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
SQL> CREATE TABLE T_600_16164 (ID NUMBER, NAME VARCHAR2(30));

SQL> INSERT INTO T_600_16164 SELECT ROWNUM, TNAME FROM TAB;


75
SQL> COMMIT;

SQL> MERGE INTO T_600_16164 A


2 USING (SELECT ROWNUM ID, TNAME NAME FROM TAB
3 UNION ALL
4 SELECT ROWNUM, TABLE_NAME FROM USER_TABLES) B
5 ON (A.ID = B.ID)
6 WHEN MATCHED THEN
7 UPDATE SET A.NAME = B.NAME
8 WHEN NOT MATCHED THEN
9 INSERT (ID, NAME) VALUES (B.ID, B.NAME);
MERGE INTO T_600_16164 A
*
1 :
ORA-30926:

SQL> MERGE /*+ APPEND */ INTO T_600_16164 A


2 USING (SELECT ROWNUM ID, TNAME NAME FROM TAB
3 UNION ALL
4 SELECT ROWNUM, TABLE_NAME FROM USER_TABLES) B
5 ON (A.ID = B.ID)
6 WHEN MATCHED THEN
7 UPDATE SET A.NAME = B.NAME
8 WHEN NOT MATCHED THEN
9 INSERT (ID, NAME) VALUES (B.ID, B.NAME);
MERGE /*+ APPEND */ INTO T_600_16164 A
*
1 :
ORA-00600: O : [16164], [0], [], [], [], [], [], []

D138D
O www.enmotech.com ORA

O t k O
U

ORA-942
O Java O O ORA-00942: table
or view does not exist
SQL ORA-942O SQL O k
O O
U O e Oracle O SQL SQL

O select * from usr_action O k ORA-942 O SQL


select * from USR_ACTIONO O
Java O SQLPLUS SQLDEVELOPER SQL

O k
TJSQ_TRADE O TJSQ_TRADE
O TJSQ_NDMAIN O TJSQ_TRADE k O
TJSQ_NDMAIN r k TJSQ_TRADE
g O P
BJSQ_TRADE BJSQ_NDMAIN O k
BJSQ_TRADE BJSQ_NDMAIN Og REMAP_TABLESPACE REMAP_SCHEMA
TJSQ_TRADE TJSQ_NDMAIN
O BJSQ_TRADE O
TJSQ_TRADE O REMAP_SCHEMA i
kO O
O e O e
O r
DBMS_METADATA O k BJSQ_TRADE TJSQ_TRADE O
BJSQ_NDMAIN TJSQ_NDMAIN O O
TJSQ_NDMAIN TJSQ_TRADE BJSQ_NDMAIN BJSQ_TRADE
e O e
O trace Oracle SQL k e
SQLPLUS O O Java
Java k O O O
SQL O O SQL ALTER SESSION SET

D139D
O www.enmotech.com ORA

SQL_TRACE = TRUE O ALTER SESSION SELECT


U O O O
Oracle O Java O
O O
SQL_TRACEO t traceOi
Java O DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION P
SQL> SELECT SID, SERIAL#
2 FROM V$SESSION WHERE USERNAME = 'TJSQ_TRADE' AND MACHINE = 'kylin-TinkPad';
SID SERIAL#
---------- ----------
129 2494
130 224
147 14635
SQL> SELECT SPID FROM V$PROCESS
2 WHERE ADDR IN (SELECT PADDR FROM V$SESSION WHERE SID IN (129, 130, 147));
SPID
------------
595
744
746
SQL> EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(129, 2494, TRUE)
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(130, 224, TRUE)
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(147, 14635, TRUE)
PL/SQL procedure successfully completed.

V$SESSION c O Java Oracle


k · trace O k ID
3 SQL_TRACEOg Java SQL Pselect * from
usr_action kO Java trace Oi
kP
$ more newdemo_ora_744.trc
/data/oracle/admin/newdemo/udump/newdemo_ora_744.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /data/oracle/product/10.2
System name: Linux
Node name: yans2
Release: 2.6.9-42.0.0.0.1.ELsmp
Version: #1 SMP Sun Oct 15 15:13:57 PDT 2006
Machine: x86_64
Instance name: newdemo
Redo thread mounted by this instance: 1
Oracle process number: 37
Unix process pid: 744, image: oraclenewdemo@yans2
*** 2009-03-18 09:47:08.552
*** SERVICE NAME:(SYS$USERS) 2009-03-18 09:47:08.552
*** SESSION ID:(147.14635) 2009-03-18 09:47:08.552
=====================

D140D
O www.enmotech.com ORA

PARSING IN CURSOR #2 len=25 dep=0 uid=104 oct=3 lid=104 tim=1208340652883521 hv=1367961303


ad='6ee009b0'
select * from usr_action
END OF STMT
PARSE #2:c=0,e=188,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1208340652883516
EXEC #2:c=0,e=35,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1208340652883819
FETCH #2:c=0,e=127,p=0,cr=3,cu=0,mis=0,r=10,dep=0,og=1,tim=1208340652897864
*** 2009-03-18 09:55:14.856
FETCH #2:c=0,e=77,p=0,cr=1,cu=0,mis=0,r=10,dep=0,og=1,tim=1208341127789416
FETCH #2:c=0,e=44,p=0,cr=1,cu=0,mis=0,r=10,dep=0,og=1,tim=1208341127805165
FETCH #2:c=0,e=34,p=0,cr=1,cu=0,mis=0,r=10,dep=0,og=1,tim=1208341127819547
FETCH #2:c=0,e=35,p=0,cr=1,cu=0,mis=0,r=10,dep=0,og=1,tim=1208341127831599
FETCH #2:c=0,e=31,p=0,cr=1,cu=0,mis=0,r=10,dep=0,og=1,tim=1208341127843581
.
.
.
FETCH #2:c=0,e=34,p=0,cr=1,cu=0,mis=0,r=10,dep=0,og=1,tim=1208341128460244
FETCH #2:c=0,e=30,p=0,cr=1,cu=0,mis=0,r=10,dep=0,og=1,tim=1208341128473093
FETCH #2:c=0,e=47,p=0,cr=2,cu=0,mis=0,r=4,dep=0,og=1,tim=1208341128485355
STAT #2 id=1 cnt=594 pid=0 pos=1 obj=120997 op='TABLE ACCESS FULL USR_ACTION (cr=65 pr=0 pw=0
time=670 us)'
=====================

O k trace k SQL O SQL k


k trace k O SQL_TRACEO Java O
U SQL_TRACEO k
kO SET_SQL_TRACE_IN_SESSION O SQL_TRACE
k e SET_SQL_TRACE_IN_SESSIONO k
Oracle k k SQL_TRACE O
ON ERROR SET EVENTS ErrorStack r
t O e
U k Java O SQLP O
O Java SQL
SQL_TRACE O Ui Oracle SQL eO
k U trace O SQL Java SQL O

e k g O e O k SQL
O k O SQL U r Oi
P SQL select * from usr_action select * from usr_action aO
WHERE select * from usr_action where rownum <10O
P O u O
SQL O SQL u O Oracle O
k t SQL_TRACE Oi k SQL_TRACE
O Oracle SQL
SQL O Oracle u O t

D141D
O www.enmotech.com ORA

U O P e SQLPLUS O
Java u SQL k O e O
SQL O
SQLDEVELOPER O O SQL
k ODEVELOPER O
SQLPLUS k
Java SQL O k Java SQL
k PEselect * from usr_action k WHERE · O Java
SQL O SQLPLUS
$ sqlplus tjsq_trade
SQL*Plus: Release 10.2.0.3.0 - Production on Wed Mar 18 10:12:02 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Enter password:
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> set pages 100 lines 120
SQL> set autot trace
SQL> select * from usr_action;
594 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 1947357366
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU) | Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 594 | 43956 | 4 (0) | 00:00:01 |
| 1 | TABLE ACCESS FULL | USR_ACTION | 594 | 43956 | 4 (0) | 00:00:01 |
--------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
46 consistent gets
594 rows processed
SQL> select * from usr_action ;
select * from usr_action
*
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select * from usr_action ;


594 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 1947357366
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------

D142D
O www.enmotech.com ORA

| 0 | SELECT STATEMENT | | 594 | 43956 | 4 (0)| 00:00:01 |


| 1 | TABLE ACCESS FULL| USR_ACTION | 594 | 43956 | 4 (0)| 00:00:01 |
--------------------------------------------------------------------------------

Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
46 consistent gets
594 rows processed

TJSQ_TRADE O O n
k O SQL Java SQL O k SQL
k Oi
SQLPLUS O Java u

O O u
O Oracle BugO i
u O kO i k
k g O i k O

Java SQL O k select * from usr_action O r


SQLO Pselect * from usr_module
k O USR_ACTION O u SQLO
SQL select * from usr_module V$SQL
P
SQL> COL SQL_TEXT FORMAT A30
SQL> SELECT SQL_TEXT, FIRST_LOAD_TIME, LAST_LOAD_TIME
2 FROM V$SQL
3 WHERE SQL_TEXT = 'select * from usr_module 'AND PARSING_SCHEMA_NAME = 'TJSQ_TRADE';
SQL_TEXT FIRST_LOAD_TIME LAST_LOAD_TIME
------------------------------ ----------------------- --------------------
select * from usr_module 2009-03-07/07:55:56 2009-03-18/09:39:51

O SQL O O SQL
O g 10 O k P
SQL> SELECT USERNAME, CREATED
2 FROM DBA_USERS WHERE USERNAME = 'TJSQ_TRADE';
USERNAME CREATED
------------------------------ -------------------
TJSQ_TRADE 2009-03-16 14:29:32

O TJSQ_TRADE SQL FIRST_LOAD_TIME


O TJSQ_TRADE O TJSQ_NDMAIN O
TJSQ_NDMAIN P

D143D
O www.enmotech.com ORA

SQL> SELECT USERNAME, CREATED


2 FROM DBA_USERS WHERE USERNAME = 'TJSQ_NDMAIN';
USERNAME CREATED
------------------------------ -------------------
TJSQ_NDMAIN 2009-03-16 13:30:03

O SQL TJSQ_NDMAIN O
TJSQ_NDMAINITJSQ_TRADE BJSQ_NDMAINIBJSQ_TRADE O
REMAP_SCHEMA O SQL BJSQ P
SQL> SELECT USERNAME, CREATED
2 FROM DBA_USERS WHERE USERNAME IN ('BJSQ_NDMAIN', 'BJSQ_TRADE');
USERNAME CREATED
------------------------------ -------------------
BJSQ_TRADE 2009-03-06 14:57:21
BJSQ_NDMAIN 2009-03-06 14:57:20

U SQL O SQL BJSQ_TRADE BJSQ_NDMAIN


g O Ui P
SQL> SELECT SQL_TEXT, FIRST_LOAD_TIME, LAST_LOAD_TIME
2 FROM V$SQL
3 WHERE SQL_TEXT = 'select * from usr_module '
4 AND PARSING_SCHEMA_NAME = 'BJSQ_TRADE';
SQL_TEXT FIRST_LOAD_TIME LAST_LOAD_TIME
------------------------------ ----------------------------- ----------------------------
select * from usr_module 2009-03-07/07:55:56 2009-03-07/09:14:18

BJSQ_TRADE SQL O TJSQ_TRADE SQL


O O n g
O SQL TJSQ_NDMAIN P
SQL> CONN TJSQ_NDMAIN
Enter password:
Connected.
SQL> set autot trace
SQL> select * from usr_action ;
594 rows selected.
Execution Plan
---------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
---------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 594 | 43956 | 4 (0)|
| 1 | TABLE ACCESS FULL | USR_ACTION | 594 | 43956 | 4 (0)|
---------------------------------------------------------------------
Note
-----
- 'PLAN_TABLE' is old version

Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
46 consistent gets

D144D
O www.enmotech.com ORA

TJSQ_TRADE SQLO i k
SQL> CONN TJSQ_TRADE
Enter password:
Connected.
SQL> set autot trace
SQL> select * from usr_action ;
594 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 1947357366
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 594 | 43956 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL | USR_ACTION | 594 | 43956 | 4 (0)| 00:00:01 |
--------------------------------------------------------------------------------

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
46 consistent gets

SQL OTJSQ_NDMAIN SQL O k


O TJSQ_TRADE O TJSQ_NDMAIN SQL k
k u SQL O TJSQ_TRADE O k
TJSQ_TRADE O TJSQ_NDMAIN i SQLOOracle k
O O TJSQ_NDMAIN O
TJSQ_NDMAIN O TJSQ_TRADE O t

O O TJSQ_TRADE BJSQ_TRADE
O k
P k BJSQ_NDMAIN BJSQ_TRADE g O k
BJSQ_NDMAIN BJSQ_TRADE O REMAP_SCHEMA k TJSQ_NDMAIN
TJSQ_TRADE
TJSQ_TRADE log P
[oracle@yans2 dmp]$ more imp_trade_20090316.log
;;;
Import: Release 10.2.0.3.0 - 64bit Production on Monday, 16 March, 2009 14:30:05
Copyright (c) 2003, 2005, Oracle. All rights reserved.
;;;
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Master table "TJSQ_TRADE"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
ORA-39060: table(s) dropped because of conflict with master table
Starting "TJSQ_TRADE"."SYS_IMPORT_FULL_01": tjsq_trade/******** directory=d_dmpdp
dumpfile=bjsq_trade_product_090316.dp logfile=imp
_trade_20090316.log remap_schema=bjsq_trade:tjsq_trade remap_tablespace=bjsq_trade:tjsq

D145D
O www.enmotech.com ORA

exclude=grant exclude=table_statistics
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SYNONYM/SYNONYM
ORA-31685: Object type SYNONYM:"TJSQ_TRADE"."A_DATA" failed due to insufficient privileges.
Failing sql is:
CREATE SYNONYM "TJSQ_TRADE"."A_DATA" FOR "BJSQ_NDMAIN"."A_DATA"
ORA-31685: Object type SYNONYM:"TJSQ_TRADE"."CAT_ADMIN" failed due to insufficient privileges.
Failing sql is:
CREATE SYNONYM "TJSQ_TRADE"."CAT_ADMIN" FOR "BJSQ_NDMAIN"."CAT_ADMIN"
ORA-31685: Object type SYNONYM:"TJSQ_TRADE"."CAT_AGENT" failed due to insufficient privileges.
Failing sql is:
CREATE SYNONYM "TJSQ_TRADE"."CAT_AGENT" FOR "BJSQ_NDMAIN"."CAT_AGENT"
ORA-31685: Object type SYNONYM:"TJSQ_TRADE"."CAT_AREA_MEDICARE" failed due to insufficient
privileges. Failing sql is:
.
.
.
ORA-31685: Object type SYNONYM:"TJSQ_TRADE"."CAT_AUTH_PATENT_DRUG" failed due to insufficient
privileges. Failing sql is:
CREATE SYNONYM "TJSQ_TRADE"."CAT_AUTH_PATENT_DRUG" FOR "BJSQ_NDMAIN"."CAT_AUTH_PATENT_DRUG"

O k O P
I i e O TJSQ_TRADE REMAP_SCHEMA
BJSQ_TRADE TJSQ_TRADEO BJSQ_NDMAIN TJSQ_NDMAINNO
TJSQ_TRADE O TJSQ_NDMAIN k
O O l O
i CREATE OR REPLACE O
· r O Oi
EXCLUDE=SYNONYMO O Y DBAO
i k
k OTJSQ_TRADE
k BJSQ_NDMAIN O TJSQ_NDMAIN k Java O
O O ORA-942
$ sqlplus tjsq_trade
SQL*Plus: Release 10.2.0.3.0 - Production on Wed Mar 18 17:43:38 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Enter password:
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> select * from dba_objects;
select * from dba_objects
*
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> select owner, object_name, object_type


2 from all_objects
3 where object_name = 'DBA_OBJECTS';

D146D
O www.enmotech.com ORA

OWNER OBJECT_NAME OBJECT_TYPE


------------------------------ ------------------------------ -------------------
PUBLIC DBA_OBJECTS SYNONYM

U ODBA_OBJECTS PUBLIC O O
O O
u k SQLO SQL BJSQ_NDMAIN
k BJSQ_NDMAIN O TJSQ_TRADE BJSQ_TRADE
SQL O Oracle k u BJSQ_TRADE SQL
e SQL FIRST_LOAD_TIME
SQL O SQL O i O O
Oracle TJSQ_TRADE u k SQLO SQL ORA-942
TJSQ_TRADE Oracle k BugO u SQL INVALID
O SQL k SQL O k ORA-942 O
k
SQL O u SQLO
O SQLO k
SQLO Oracle SQL O O SQL
PORA-942P O
O u SQL O SQL ORA-942
O ORA-942 SHARED_POOL Metalink O k
Bug PBug No. 6155720 O Oracle O

Oracle O 10.2.0.3 for Linux Oi O


SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

u P
SQL> CONN TJSQ_TRADE
Enter password:
Connected.
SQL> select * from usr_module ;
select * from usr_module
*
ERROR at line 1:
ORA-00942: table or view does not exist

SQL> CONN / AS SYSDBA


Connected.
SQL> ALTER SYSTEM FLUSH SHARED_POOL;

D147D
O www.enmotech.com ORA

System altered.
SQL> CONN TJSQ_TRADE
Enter password:
Connected.
SQL> SET AUTOT TRACE
SQL> select * from usr_module ;
636 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 130732051
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 636 | 51516 | 4 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL | USR_MODULE | 636 | 51516 | 4 (0)| 00:00:01 |
--------------------------------------------------------------------------------

Statistics
----------------------------------------------------------
694 recursive calls
0 db block gets
188 consistent gets
6 sorts (memory)

O kO i k O
k
O O
O A
O O
O k
i
O t O r
k
P Oracle 9204 U k SQL OFIRST_ROWS O O
SQL IN O O
Oracle I I IIN ICBO
e
O 10g
SQLO O O O 9204
9204 O O
g i g O
O k
O O i k e R
O e
O e U O k r
Oracle 10.2.0.3 for Solaris P

D148D
O www.enmotech.com ORA

SQL> SELECT * FROM V$VERSION;


BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Solaris: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
SQL> CREATE USER A1 IDENTIFIED BY A1 DEFAULT TABLESPACE USERS;

SQL> CREATE USER A2 IDENTIFIED BY A2 DEFAULT TABLESPACE USERS;

SQL> CREATE USER B1 IDENTIFIED BY B1 DEFAULT TABLESPACE USERS;

SQL> CREATE USER B2 IDENTIFIED BY B2 DEFAULT TABLESPACE USERS;

SQL> GRANT CONNECT, RESOURCE TO A1;

SQL> GRANT CONNECT, RESOURCE TO B1;

SQL> GRANT CREATE SESSION, CREATE SYNONYM TO A2;

SQL> GRANT CREATE SESSION, CREATE SYNONYM TO B2;

SQL> CONN A1/A1

SQL> CREATE TABLE T (ID NUMBER);

SQL> GRANT SELECT ON T TO A2;

SQL> CONN A2/A2

SQL> CREATE SYNONYM T FOR A1.T;

SQL> SELECT * FROM T;

SQL> CONN B1/B1

SQL> CREATE TABLE T (ID NUMBER);

SQL> GRANT SELECT ON T TO B2;

SQL> CONN B2/B2

SQL> CREATE SYNONYM T FOR A2.T;

SQL> SELECT * FROM T;


SELECT * FROM T
*
1 :
ORA-00942:

SQL> DROP SYNONYM T;

D149D
O www.enmotech.com ORA

SQL> CREATE SYNONYM T FOR B1.T;

SQL> SELECT * FROM T;


SELECT * FROM T
*
1 :
ORA-00942:

SQL> SELECT * FROM t;

SQL> SELECT * FROM T A;

P
k4 OA1IA2IB1 B2 A1 B1 k O l A2 B2
A2 A1 O
g B2 A1 A2 O ORA-942O B2 A1
B2 O B1 B2 k B1 B2 O
Oracle Bug k u SQL O SQL
k
Oi

ORA-22868
k ORA-22868
t P Oracle convert database
OFFLINE O r O
O k ORA-22868
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
EXAMPLE
YANGTK
MGMT_TABLESPACE
TEST
MGMT_ECM_DEPOT_TS
USERS
TEMP
10 rows selected.
SQL> select name from v$datafile;
NAME
------------------------------------------------------------------------------
/data/oradata/ytktran/SYSTEM01.DBF
/data/oradata/ytktran/UNDOTBS01.DBF
/data/oradata/ytktran/SYSAUX01.DBF

D150D
O www.enmotech.com ORA

/opt/ora10g/product/10.2.0/db_1/dbs/MISSING00004
/data/oradata/ytktran/EXAMPLE01.DBF
/data/oradata/ytktran/YANGTK01.DBF
/data/oradata/ytktran/MGMT.DBF
/data/oradata/ytktran/YANGTK02.DBF
/data/oradata/ytktran/TEST01.DBF
/data/oradata/ytktran/MGMT_ECM_DEPOT1.DBF
10 rows selected.
SQL> select file_name
2 from dba_data_files where tablespace_name = 'USERS';
FILE_NAME
--------------------------------------------------------------------------------
/opt/ora10g/product/10.2.0/db_1/dbs/MISSING00004

USERS P
SQL> drop tablespace users;
drop tablespace users
*
ERROR at line 1:
ORA-01549: tablespace not empty, use INCLUDING CONTENTS option

SQL> drop tablespace users including contents;


drop tablespace users including contents
*
ERROR at line 1:
ORA-22868: table with LOBs contains segments in different tablespaces

O INCLUDING CONTENTS U INCLUDING


CONTENTS Oracle k ORA-22868
O USERS k LOB O LOB LOB USERS
g
O r LOB O P
SQL> col owner format a15
SQL> col tablespace_name format a15
SQL> col column_name format a30
SQL> select a.owner, a.table_name, b.column_name, b.tablespace_name
2 from dba_tables a, dba_lobs b
3 where a.owner = b.owner
4 and a.table_name = b.table_name
5 and a.tablespace_name = 'USERS'
6 and b.tablespace_name != 'USERS';
no rows selected
SQL> select a.owner, a.table_name, b.column_name, b.tablespace_name
2 from dba_tables a, dba_lobs b
3 where a.owner = b.owner
4 and a.table_name = b.table_name
5 and a.tablespace_name = 'USERS';
no rows selected

USERS O LOB USERS g


e Oracle e U R P

D151D
O www.enmotech.com ORA

SQL> select count(*)


2 from dba_lobs where tablespace_name = 'USERS';
COUNT(*)
----------
10
SQL> select a.owner, a.table_name, b.column_name, b.tablespace_name
2 from dba_tables a, dba_lobs b
3 where a.owner = b.owner and a.table_name = b.table_name and b.tablespace_name = 'USERS';
no rows selected
SQL> select owner, table_name, column_name, tablespace_name
2 from dba_lobs where tablespace_name = 'USERS';
OWNER TABLE_NAME COLUMN_NAME TABLESPACE_NAME
----- ------------------ -------------------------------------------------- ---------------
OE LINEITEM_TABLE "PART"."SYS_XDBPD$" USERS
OE LINEITEM_TABLE SYS_XDBPD$ USERS
OE ACTION_TABLE SYS_XDBPD$ USERS
OE PURCHASEORDER "XMLDATA"."LINEITEMS"."SYS_XDBPD$" USERS
OE PURCHASEORDER "XMLDATA"."SHIPPING_INSTRUCTIONS"."SYS_XDBPD$" USERS
OE PURCHASEORDER "XMLDATA"."REJECTION"."SYS_XDBPD$" USERS
OE PURCHASEORDER "XMLDATA"."ACTIONS"."SYS_XDBPD$" USERS
OE PURCHASEORDER "XMLDATA"."SYS_XDBPD$" USERS
OE PURCHASEORDER "XMLEXTRA"."EXTRADATA" USERS
OE PURCHASEORDER "XMLEXTRA"."NAMESPACES" USERS
10 rows selected.

U PUSERS k 10 LOB O DBA_TABLES

SQL> SELECT OWNER, OBJECT_NAME, OBJECT_TYPE


2 FROM DBA_OBJECTS WHERE OBJECT_NAME = 'ACTION_TABLE';
OWNER OBJECT_NAME OBJECT_TYPE
------------------------------ ------------------------------ -------------------
OE ACTION_TABLE TABLE
SQL> SELECT OWNER, TABLE_NAME, TABLESPACE_NAME
2 FROM DBA_TABLES WHERE TABLE_NAME = 'ACTION_TABLE';
no rows selected

DBA_OBJECTS O TABLEO DBA_TABLES


CONVERT DATABASE k R
DBA_TABLES P
SQL> SET LONG 10000
SQL> SELECT TEXT
2 FROM DBA_VIEWS
3 WHERE VIEW_NAME = 'DBA_TABLES';
TEXT
--------------------------------------------------------------------------------
select u.name, o.name, decode(bitand(t.property,2151678048), 0, ts.name, null),
decode(bitand(t.property, 1024), 0, null, co.name),
decode((bitand(t.property, 512)+bitand(t.flags, 536870912)),
0, null, co.name),
decode(bitand(t.trigflag, 1073741824), 1073741824, 'UNUSABLE', 'VALID'),
decode(bitand(t.property, 32+64), 0, mod(t.pctfree$, 100), 64, 0, null),
decode(bitand(ts.flags, 32), 32, to_number(NULL),
decode(bitand(t.property, 32+64), 0, t.pctused$, 64, 0, null)),

D152D
O www.enmotech.com ORA

decode(bitand(t.property, 32), 0, t.initrans, null),


decode(bitand(t.property, 32), 0, t.maxtrans, null),
s.iniexts * ts.blocksize,
decode(bitand(ts.flags, 3), 1, to_number(NULL),
s.extsize * ts.blocksize),
s.minexts, s.maxexts,
decode(bitand(ts.flags, 3), 1, to_number(NULL),
s.extpct),
decode(bitand(ts.flags, 32), 32, to_number(NULL),
decode(bitand(o.flags, 2), 2, 1, decode(s.lists, 0, 1, s.lists))),
decode(bitand(ts.flags, 32), 32, to_number(NULL),
decode(bitand(o.flags, 2), 2, 1, decode(s.groups, 0, 1, s.groups))),
decode(bitand(t.property, 32+64), 0,
decode(bitand(t.flags, 32), 0, 'YES', 'NO'), null),
decode(bitand(t.flags,1), 0, 'Y', 1, 'N', '?'),
t.rowcnt,
decode(bitand(t.property, 64), 0, t.blkcnt, null),
decode(bitand(t.property, 64), 0, t.empcnt, null),
t.avgspc, t.chncnt, t.avgrln, t.avgspc_flb,
decode(bitand(t.property, 64), 0, t.flbcnt, null),
lpad(decode(t.degree, 32767, 'DEFAULT', nvl(t.degree,1)),10),
lpad(decode(t.instances, 32767, 'DEFAULT', nvl(t.instances,1)),10),
lpad(decode(bitand(t.flags, 8), 8, 'Y', 'N'),5),
decode(bitand(t.flags, 6), 0, 'ENABLED', 'DISABLED'),
t.samplesize, t.analyzetime,
decode(bitand(t.property, 32), 32, 'YES', 'NO'),
decode(bitand(t.property, 64), 64, 'IOT',
decode(bitand(t.property, 512), 512, 'IOT_OVERFLOW',
decode(bitand(t.flags, 536870912), 536870912, 'IOT_MAPPING', null))),
decode(bitand(o.flags, 2), 0, 'N', 2, 'Y', 'N'),
decode(bitand(o.flags, 16), 0, 'N', 16, 'Y', 'N'),
decode(bitand(t.property, 8192), 8192, 'YES',
decode(bitand(t.property, 1), 0, 'NO', 'YES')),
decode(bitand(o.flags, 2), 2, 'DEFAULT',
decode(s.cachehint, 0, 'DEFAULT', 1, 'KEEP', 2, 'RECYCLE', NULL)),
decode(bitand(t.flags, 131072), 131072, 'ENABLED', 'DISABLED'),
decode(bitand(t.flags, 512), 0, 'NO', 'YES'),
decode(bitand(t.flags, 256), 0, 'NO', 'YES'),
decode(bitand(o.flags, 2), 0, NULL,
decode(bitand(t.property, 8388608), 8388608,
'SYS$SESSION', 'SYS$TRANSACTION')),
decode(bitand(t.flags, 1024), 1024, 'ENABLED', 'DISABLED'),
decode(bitand(o.flags, 2), 2, 'NO',
decode(bitand(t.property, 2147483648), 2147483648, 'NO',
decode(ksppcv.ksppstvl, 'TRUE', 'YES', 'NO'))),
decode(bitand(t.property, 1024), 0, null, cu.name),
decode(bitand(t.flags, 8388608), 8388608, 'ENABLED', 'DISABLED'),
decode(bitand(t.property, 32), 32, null,
decode(bitand(s.spare1, 2048), 2048, 'ENABLED', 'DISABLED')),
decode(bitand(o.flags, 128), 128, 'YES', 'NO')
from sys.user$ u, sys.ts$ ts, sys.seg$ s, sys.obj$ co, sys.tab$ t, sys.obj$ o,
sys.obj$ cx, sys.user$ cu, x$ksppcv ksppcv, x$ksppi ksppi
where o.owner# = u.user#
and o.obj# = t.obj#

D153D
O www.enmotech.com ORA

and bitand(t.property, 1) = 0
and bitand(o.flags, 128) = 0
and t.bobj# = co.obj# (+)
and t.ts# = ts.ts#
and t.file# = s.file# (+)
and t.block# = s.block# (+)
and t.ts# = s.ts# (+)
and t.dataobj# = cx.obj# (+)
and cx.owner# = cu.user# (+)
and ksppi.indx = ksppcv.indx
and ksppi.ksppinm = '_dml_monitoring_enabled'

DBA_TABLES O DBA_TABLES
UP r O k
OBJ$ TAB$ P
SQL> SELECT OBJECT_ID
2 FROM DBA_OBJECTS
3 WHERE OBJECT_NAME = 'ACTION_TABLE';
OBJECT_ID
----------
52449
SQL> SELECT OBJ#, DATAOBJ#, NAME FROM OBJ$ WHERE OBJ# = 52449;
OBJ# DATAOBJ# NAME
---------- ---------- ------------------------------
52449 ACTION_TABLE
SQL> SELECT OBJ#, DATAOBJ#, TS#, BOBJ# FROM TAB$ WHERE OBJ# = 52449;
OBJ# DATAOBJ# TS# BOBJ#
---------- ---------- ---------- ----------
52449 0 52450

DATAOBJ# O O BOBJ#
52450O OBJECT_ID DBA_OBJECTS P
SQL> SELECT OWNER, OBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE
2 FROM DBA_OBJECTS
3 WHERE OBJECT_ID IN (52449, 52450);
OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
--------------- ------------------------------ ---------- -------------- ------------
OE ACTION_TABLE 52449 TABLE
OE SYS_IOT_OVER_52449 52450 52450 TABLE

ACTION_TABLE ACTION_TABLE P
SQL> SELECT OWNER, INDEX_NAME, INDEX_TYPE
2 FROM DBA_INDEXES
3 WHERE TABLE_NAME = 'ACTION_TABLE';
OWNER INDEX_NAME INDEX_TYPE
------------------------------ ------------------------------ ---------------------------
OE ACTION_TABLE_DATA IOT – TOP
OE SYS_IL0000052449C00004$$ LOB

ACTION_TABLE O LOB ORA-22868 LOB O


k t

D154D
O www.enmotech.com ORA

ORA-22868 g O e
DBA_TABLES
O LOB O P
SQL> CONN YANGTK/YANGTK
Connected.
SQL> CREATE TABLE T_INDEX_ORG
2 (ID NUMBER PRIMARY KEY,
3 NAME VARCHAR2(30),
4 OTHERS CLOB)
5 ORGANIZATION INDEX
6 INCLUDING NAME OVERFLOW;
Table created.
SQL> SELECT OWNER, OBJECT_NAME, OBJECT_ID, DATA_OBJECT_ID, OBJECT_TYPE
2 FROM DBA_OBJECTS
3 WHERE OBJECT_NAME = 'T_INDEX_ORG' AND OWNER = 'YANGTK';
OWNER OBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
--------------- ------------------------------ --------- ----------------- ------------
YANGTK T_INDEX_ORG 95205 TABLE
SQL> SELECT INDEX_NAME, INDEX_TYPE
2 FROM USER_INDEXES WHERE TABLE_NAME = 'T_INDEX_ORG';
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
SYS_IL0000095205C00003$$ LOB
SYS_IOT_TOP_95205 IOT - TOP
SQL> SELECT OBJ#, DATAOBJ#, NAME FROM SYS.OBJ$ WHERE OBJ# = 95205;
OBJ# DATAOBJ# NAME
---------- ---------- ------------------------------
95205 T_INDEX_ORG
SQL> SELECT OBJ#, DATAOBJ#, TS#, BOBJ# FROM SYS.TAB$ WHERE OBJ# = 95205;
OBJ# DATAOBJ# TS# BOBJ#
------------- ---------- ---------- ----------
95205 0 95206
SQL> SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, OBJECT_ID, DATA_OBJECT_ID
2 FROM DBA_OBJECTS WHERE OBJECT_ID = 95206;
OWNER OBJECT_NAME OBJECT_TYPE OBJECT_ID DATA_OBJECT_ID
------------ ------------------------------ ------------------- ------------ -----------
YANGTK SYS_IOT_OVER_95205 TABLE 95206 95206

k ACTION_TABLEO DBA_TABLES T_INDEX_ORG P


SQL> SELECT OWNER, TABLE_NAME, TABLESPACE_NAME
2 FROM DBA_TABLES WHERE TABLE_NAME = 'T_INDEX_ORG' AND OWNER = 'YANGTK';
OWNER TABLE_NAME TABLESPACE_NAME
--------------- ------------------------------ ------------------------------
YANGTK T_INDEX_ORG

T_INDEX_ORG ACTION_TABLE Oracle


O ACTION_TABLE e g
ACTION_TABLE P
SQL> DESC OE.ACTION_TABLE
Name Null? Type
------------------------------------------------------- -------- ------------------------

D155D
O www.enmotech.com ORA

SYS_XDBPD$ XDB.XDB$RAW_LIST_T
ACTIONED_BY VARCHAR2(10 CHAR)
DATE_ACTIONED DATE
SQL> DESC XDB.XDB$RAW_LIST_T
XDB.XDB$RAW_LIST_T VARRAY(1000) OF RAW(2000)

ACTION_TABLE O k DBMS_META
ACTION_TABLE P
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE', 'ACTION_TABLE', 'OE') FROM DUAL;
ERROR:
ORA-31603: object "ACTION_TABLE" of type TABLE not found in schema "OE"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA", line 2805
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1

no rows selected
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE_DATA', 'ACTION_TABLE', 'OE') FROM DUAL;
DBMS_METADATA.GET_DDL('TABLE_DATA','ACTION_TABLE','OE')
--------------------------------------------------------------------------------

SQL> SELECT DBMS_METADATA.GET_DDL('INDEX', 'ACTION_TABLE_DATA', 'OE') FROM DUAL;


DBMS_METADATA.GET_DDL('INDEX','ACTION_TABLE_DATA','OE')
--------------------------------------------------------------------------------
CREATE UNIQUE INDEX "OE"."ACTION_TABLE_DATA" ON "OE"."ACTION_TABLE" ("NESTED_TABLE_ID",
"SYS_NC_ARRAY_INDEX$")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS"

DBMS_METADATA TABLEI OEO


ACTION_TABLE TABLE_DATA
ACTION_TABLE c DDL O k
k ACTION_TABLE O ACTION_TABLE_DATA c
c Oc ACTION_TABLES O c
VARRAY O c
ID O VARRAY
i ACTION_TABLE kO DDL
k ACTION_TABLE O P
SQL> SELECT OWNER, TABLE_NAME, TABLE_TYPE_NAME, PARENT_TABLE_NAME
2 FROM DBA_NESTED_TABLES WHERE TABLE_NAME = 'ACTION_TABLE';
OWNER TABLE_NAME TABLE_TYPE_NAME PARENT_TABLE_NAME
---------- -------------------- ------------------------- ------------------------------
OE ACTION_TABLE ACTION_V PURCHASEORDER

e ACTION_TABLE O PPURCHASEORDER
PURCHASEORDER P

D156D
O www.enmotech.com ORA

SQL> DESC OE.PURCHASEORDER


Name Null? Type
-------------------------------------------- -------- -------------------------
TABLE of XMLTYPE(XMLSchema
"http://localhost:8080/source/schemas/poSource/xsd/purchaseOrder.xsd" Element
"PurchaseOrder") STORAGE Object-relational TYPE "PURCHASEORDER_T"
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE', 'PURCHASEORDER', 'OE') FROM DUAL;
DBMS_METADATA.GET_DDL('TABLE','PURCHASEORDER','OE')
--------------------------------------------------------------------------------
CREATE TABLE "OE"."PURCHASEORDER" OF "SYS"."XMLTYPE"
XMLSCHEMA "http://localhost:8080/source/schemas/poSource/xsd/purchaseOrder.xsd" ELEMENT
"PurchaseOrder" ID 3020 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS"
VARRAY "XMLEXTRA"."NAMESPACES" STORE AS LOB "NAMESPACES207_L"
(ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 CACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
VARRAY "XMLEXTRA"."EXTRADATA" STORE AS LOB "EXTRADATA206_L"
(ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 CACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
VARRAY "XMLDATA"."SYS_XDBPD$" STORE AS LOB "SYS_XDBPD$201_L"
(ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 CACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
VARRAY "XMLDATA"."ACTIONS"."SYS_XDBPD$" STORE AS LOB "SYS_XDBPD$202_L"
(ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 CACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
VARRAY "XMLDATA"."REJECTION"."SYS_XDBPD$" STORE AS LOB "SYS_XDBPD$203_L"
(ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 CACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
VARRAY "XMLDATA"."SHIPPING_INSTRUCTIONS"."SYS_XDBPD$" STORE AS LOB "SYS_XDBPD$204_L"
(ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 CACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
VARRAY "XMLDATA"."LINEITEMS"."SYS_XDBPD$" STORE AS LOB "SYS_XDBPD$205_L"
(ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10 CACHE
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))
VARRAY "XMLDATA"."ACTIONS"."ACTION" STORE AS TABLE "ACTION_TABLE"
(( PRIMARY KEY ("NESTED_TABLE_ID", "SYS_NC_ARRAY_INDEX$") ENABLE)
ORGANIZATION INDEX PCTTHRESHOLD 50 PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" OVERFLOW PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ) RETURN AS LOCATOR
VARRAY "XMLDATA"."LINEITEMS"."LINEITEM" STORE AS TABLE "LINEITEM_TABLE"
(( PRIMARY KEY ("NESTED_TABLE_ID", "SYS_NC_ARRAY_INDEX$") ENABLE)
ORGANIZATION INDEX PCTTHRESHOLD 50 PCTFREE 10 INITRANS 2 MAXTRANS 255 LOGGING

D157D
O www.enmotech.com ORA

STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645


PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" OVERFLOW PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ) RETURN AS LOCATOR

ACTION_TABLE P k O I
ACTION_TABLE PURCHASEORDER O kO
ACTION_TABLE PURCHASEORDER PURCHASEORDER
kO k XDB
PURCHASEORDER ACTION_TABLE O k k O
DBA_TABLES ACTION_TABLE kP ACTION_TABLE
PURCHASEORDER O c OACTION_TABLE
O DBA_TABLES O DBA_ALL_TABLES P
SQL> SELECT OWNER, TABLE_NAME, TABLE_TYPE, NESTED
2 FROM DBA_ALL_TABLES WHERE TABLE_NAME = 'ACTION_TABLE';
OWNER TABLE_NAME TABLE_TYPE NES
---------- ------------------------------ ------------------------------ ---
OE ACTION_TABLE ACTION_T YES

O k
P ORA-22868 O USERS LOB
O USERS r LOB
ACTION_TABLE O DBA_TABLES O k
ACTION_TABLE ACTION_TABLE OE PURCHASEORDER

USERS LOB P
SQL> SELECT OWNER, TABLE_NAME, COLUMN_NAME
2 FROM DBA_LOBS
3 WHERE TABLESPACE_NAME = 'USERS';
OWNER TABLE_NAME COLUMN_NAME
---------- ------------------------------ -----------------------------------------------
OE LINEITEM_TABLE "PART"."SYS_XDBPD$"
OE LINEITEM_TABLE SYS_XDBPD$
OE ACTION_TABLE SYS_XDBPD$
OE PURCHASEORDER "XMLDATA"."LINEITEMS"."SYS_XDBPD$"
OE PURCHASEORDER "XMLDATA"."SHIPPING_INSTRUCTIONS"."SYS_XDBPD$"
OE PURCHASEORDER "XMLDATA"."REJECTION"."SYS_XDBPD$"
OE PURCHASEORDER "XMLDATA"."ACTIONS"."SYS_XDBPD$"
OE PURCHASEORDER "XMLDATA"."SYS_XDBPD$"
OE PURCHASEORDER "XMLEXTRA"."EXTRADATA"
OE PURCHASEORDER "XMLEXTRA"."NAMESPACES"
10 rows selected.

ACTION_TABLE PURCHASEORDER O U PURCHASEORDER


LINEITEM_TABLE i PURCHASEORDER e USERS LOB
PURCHASEORDER

D158D
O www.enmotech.com ORA

O e PURCHASEORDER O O

SQL> DROP TABLE OE.PURCHASEORDER PURGE;


Table dropped.
SQL> DROP TABLESPACE USERS INCLUDING CONTENTS;
Tablespace dropped.

PURCHASEORDER O k
kO Oracle ORA-22868
PURCHASEORDER i OACTION_TABLE i O USERS
USERS O DROP TABLESPACE INCLUDING CONTENTS O
Oracle Bug
MetalinkO k Bug PDoc ID: 758602.1
LOB O e P
SQL> CREATE TABLESPACE USERS DATAFILE '/data/oradata/ytktran/USERS01.DBF' SIZE 100M;
Tablespace created.
SQL> CONN YANGTK/YANGTK
Connected.
SQL> CREATE TABLE T_IOT_LOB
2 (ID NUMBER PRIMARY KEY,
3 NAME VARCHAR2(30),
4 OTHERS CLOB)
5 ORGANIZATION INDEX TABLESPACE USERS OVERFLOW TABLESPACE USERS
6 LOB (OTHERS) STORE AS OTHERS_LOB (TABLESPACE USERS);
Table created.
SQL> SELECT TABLE_NAME, TABLESPACE_NAME
2 FROM USER_TABLES
3 WHERE TABLE_NAME = 'T_IOT_LOB';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
T_IOT_LOB
SQL> SELECT INDEX_NAME, TABLESPACE_NAME
2 FROM USER_INDEXES
3 WHERE TABLE_NAME = 'T_IOT_LOB';
INDEX_NAME TABLESPACE_NAME
------------------------------ ------------------------------
SYS_IL0000095440C00003$$ USERS
SYS_IOT_TOP_95440 USERS
SQL> SELECT TABLE_NAME, COLUMN_NAME, TABLESPACE_NAME
2 FROM USER_LOBS
3 WHERE TABLE_NAME = 'T_IOT_LOB';
TABLE_NAME COLUMN_NAME TABLESPACE_NAME
------------------------------ ---------------------------------------- ---------------
T_IOT_LOB OTHERS USERS
SQL> DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES
*
ERROR at line 1:
ORA-22868: table with LOBs contains segments in different tablespaces

SQL> DROP TABLE T_IOT_LOB;

D159D
O www.enmotech.com ORA

Table dropped.
SQL> DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.

O Bug k ORA-22868 t O
OE.PURCHASEORDER k

ORA-1461
U k ORA-1461 P
Errors in file /data/oracle/ora92/admin/client/bdump/client_j001_7289.trc:
ORA-12012: error on auto execute of job 1
ORA-01461: can bind a LONG value only for insert into a LONG column
ORA-06512: at "ZJTRADE.P_CLIENT_SYNCH", line 139
ORA-01401: inserted value too large for column
ORA-06512: at line 1

alert kU O k r
trace Otrace O trace

n JOB O JOB k
JOBO PL/SQL
T n Oracle k ORA-1461
PL/SQL O ORA-1461
ZJTRADE.P_CLIENT_SYNCH 139
Oi O

O O O

Oracle O ORA-01401 P
k
P_CLIENT_SYNCH SQL O O
MERGE P
LAST_UPDATE_DATE O
O P
CREATE OR REPLACE PROCEDURE P_CLIENT_SYNCH
(
P_LAST_UPDATE_DATE IN DATE,
P_DB_LINK IN VARCHAR2 DEFAULT 'BJDB01.US.ORACLE.COM'
) AUTHID CURRENT_USER AS
V_TABLE_COLUMNS VARCHAR2(32767);
V_SYNCH_STATEMENT VARCHAR2(32767);
V_PRIMARY_KEYS VARCHAR2(32767);
V_TEMP_PRIMARY_KEY VARCHAR2(32767);

D160D
O www.enmotech.com ORA

V_EXCLUDING_COLUMNS VARCHAR2(32767);
V_ERROR_MESSAGE VARCHAR2(4000);
V_DELETE_STATMENTS VARCHAR2(32767);
BEGIN
FOR C_CLIENT_CONF IN (SELECT TABLE_NAME, UPDATE_DATE_COLUMN FROM CLIENT_CONFIGURE ) LOOP
SELECT F_LINK(COLUMN_NAME)
INTO V_PRIMARY_KEYS
FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B
WHERE A.TABLE_NAME = C_CLIENT_CONF.TABLE_NAME
AND B.TABLE_NAME = C_CLIENT_CONF.TABLE_NAME
AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE = 'P';

SELECT F_LINK(COLUMN_NAME) INTO V_TABLE_COLUMNS FROM USER_TAB_COLUMNS WHERE TABLE_NAME =


C_CLIENT_CONF.TABLE_NAME;

SELECT F_LINK(COLUMN_NAME)
INTO V_EXCLUDING_COLUMNS
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = C_CLIENT_CONF.TABLE_NAME
AND COLUMN_NAME NOT IN
(
SELECT COLUMN_NAME FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B
WHERE A.TABLE_NAME = C_CLIENT_CONF.TABLE_NAME
AND B.TABLE_NAME = C_CLIENT_CONF.TABLE_NAME
AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND B.CONSTRAINT_TYPE = 'P'
);

IF V_PRIMARY_KEYS IS NULL THEN


V_SYNCH_STATEMENT := 'DELETE ' || C_CLIENT_CONF.TABLE_NAME || ' WHERE '
|| C_CLIENT_CONF.UPDATE_DATE_COLUMN || ' >= TO_DATE('''
|| TO_CHAR(P_LAST_UPDATE_DATE, 'YYYY-MM-DD HH24:MI:SS')
|| ''', ''YYYY-MM-DD HH24:MI:SS'') - 1 ';
EXECUTE IMMEDIATE V_SYNCH_STATEMENT;

V_SYNCH_STATEMENT := 'INSERT INTO ' || C_CLIENT_CONF.TABLE_NAME || ' ('


|| REPLACE(V_TABLE_COLUMNS, ',', ', ') || ') SELECT '
|| REPLACE(V_TABLE_COLUMNS, ',', ', ') || ' FROM ' || C_CLIENT_CONF.TABLE_NAME || '@'
|| P_DB_LINK || ' WHERE ' || C_CLIENT_CONF.UPDATE_DATE_COLUMN || ' >= TO_DATE('''
|| TO_CHAR(P_LAST_UPDATE_DATE, 'YYYY-MM-DD HH24:MI:SS') || ''', ''YYYY-MM-DD HH24:MI:SS'') - 1';

EXECUTE IMMEDIATE V_SYNCH_STATEMENT;

ELSE
V_SYNCH_STATEMENT := 'MERGE INTO ' || C_CLIENT_CONF.TABLE_NAME || ' A USING ';

IF C_CLIENT_CONF.UPDATE_DATE_COLUMN IS NULL THEN


V_SYNCH_STATEMENT := V_SYNCH_STATEMENT || C_CLIENT_CONF.TABLE_NAME || '@' || P_DB_LINK || ' B ON (';
ELSE
V_SYNCH_STATEMENT := V_SYNCH_STATEMENT || '(SELECT ' || REPLACE(V_TABLE_COLUMNS, ',', ', ')
||' FROM ' || C_CLIENT_CONF.TABLE_NAME || '@' || P_DB_LINK || ' WHERE '

D161D
O www.enmotech.com ORA

|| C_CLIENT_CONF.UPDATE_DATE_COLUMN || ' >= TO_DATE('''


|| TO_CHAR(P_LAST_UPDATE_DATE, 'YYYY-MM-DD HH24:MI:SS')
|| ''', ''YYYY-MM-DD HH24:MI:SS'') - 1) B ON (';
END IF;

V_TEMP_PRIMARY_KEY := V_PRIMARY_KEYS;
WHILE INSTR(V_TEMP_PRIMARY_KEY, ',') != 0 LOOP
V_SYNCH_STATEMENT := V_SYNCH_STATEMENT || 'A.' || SUBSTR(V_TEMP_PRIMARY_KEY, 1,
INSTR(V_TEMP_PRIMARY_KEY, ',') - 1)
|| ' = B.' || SUBSTR(V_TEMP_PRIMARY_KEY, 1, INSTR(V_TEMP_PRIMARY_KEY, ',') - 1) || ' AND ';
V_TEMP_PRIMARY_KEY := SUBSTR(V_TEMP_PRIMARY_KEY, INSTR(V_TEMP_PRIMARY_KEY, ',') + 1);
END LOOP;

V_SYNCH_STATEMENT := V_SYNCH_STATEMENT || 'A.' || V_TEMP_PRIMARY_KEY || ' =


B.' || V_TEMP_PRIMARY_KEY
|| ') WHEN MATCHED THEN UPDATE SET ';

WHILE INSTR(V_EXCLUDING_COLUMNS, ',') != 0 LOOP


V_SYNCH_STATEMENT := V_SYNCH_STATEMENT || SUBSTR(V_EXCLUDING_COLUMNS, 1,
INSTR(V_EXCLUDING_COLUMNS, ',') - 1)
|| ' = B.' || SUBSTR(V_EXCLUDING_COLUMNS, 1, INSTR(V_EXCLUDING_COLUMNS, ',') - 1) || ', ';
V_EXCLUDING_COLUMNS := SUBSTR(V_EXCLUDING_COLUMNS, INSTR(V_EXCLUDING_COLUMNS, ',') + 1);
END LOOP;
V_SYNCH_STATEMENT := V_SYNCH_STATEMENT || V_EXCLUDING_COLUMNS || ' = B.' || V_EXCLUDING_COLUMNS
|| ' WHEN NOT MATCHED THEN INSERT (' || REPLACE(V_TABLE_COLUMNS, ',', ', ') || ') VALUES ( B.'
|| REPLACE(V_TABLE_COLUMNS, ',', ', B.') || ') ';

EXECUTE IMMEDIATE V_SYNCH_STATEMENT;

V_TEMP_PRIMARY_KEY := V_PRIMARY_KEYS;
V_DELETE_STATMENTS := 'DELETE ' || C_CLIENT_CONF.TABLE_NAME || ' WHERE (' ||
RTRIM(V_TEMP_PRIMARY_KEY, ', ')
|| ') IN (SELECT /*+ USE_HASH(A B) */ B.' || REPLACE(RTRIM(V_TEMP_PRIMARY_KEY, ', '), ',', ', B.')
|| ' FROM ' || C_CLIENT_CONF.TABLE_NAME || '@' || P_DB_LINK || ' A, ' || C_CLIENT_CONF.TABLE_NAME
|| ' B WHERE ';
WHILE INSTR(V_TEMP_PRIMARY_KEY, ',') != 0 LOOP
V_DELETE_STATMENTS := V_DELETE_STATMENTS || 'A.' || SUBSTR(V_TEMP_PRIMARY_KEY, 1,
INSTR(V_TEMP_PRIMARY_KEY, ',') - 1)
|| '(+) = B.' || SUBSTR(V_TEMP_PRIMARY_KEY, 1, INSTR(V_TEMP_PRIMARY_KEY, ',') - 1) || ' AND ';
V_TEMP_PRIMARY_KEY := SUBSTR(V_TEMP_PRIMARY_KEY, INSTR(V_TEMP_PRIMARY_KEY, ',') + 1);
END LOOP;
V_DELETE_STATMENTS := V_DELETE_STATMENTS || 'A.' || V_TEMP_PRIMARY_KEY || '(+) = B.' ||
V_TEMP_PRIMARY_KEY
|| ' AND A.' || V_TEMP_PRIMARY_KEY || ' IS NULL)';
EXECUTE IMMEDIATE V_DELETE_STATMENTS;

END IF;

COMMIT;
END LOOP;

D162D
O www.enmotech.com ORA

INSERT INTO CLIENT_LOGS (ID, EXECUTE_DATE, MESSAGES, FAILED_STATEMENT)


VALUES (SEQ_CLIENT.NEXTVAL, SYSDATE, 'SUCCESS', NULL);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
V_ERROR_MESSAGE := SUBSTR(SQLERRM, 1, 4000);
INSERT INTO CLIENT_LOGS (ID, EXECUTE_DATE, MESSAGES, FAILED_STATEMENT)
VALUES (SEQ_CLIENT.NEXTVAL, SYSDATE, V_ERROR_MESSAGE, SUBSTR(V_SYNCH_STATEMENT, 1, 4000));
COMMIT;
END;
/

O MERGE i O
O
O MERGE
O P
SQL> SELECT
2 A.TABLE_NAME,
3 A.COLUMN_NAME,
4 A.DATA_TYPE,
5 A.DATA_LENGTH,
6 B.DATA_LENGTH ORG_DATA_LENGTH
7 FROM
8 (
9 SELECT
10 TABLE_NAME,
11 COLUMN_NAME,
12 DATA_TYPE,
13 DATA_LENGTH
14 FROM USER_TAB_COLUMNS
15 WHERE TABLE_NAME IN (SELECT TABLE_NAME FROM CLIENT_CONFIGURE)
16 MINUS
17 SELECT
18 TABLE_NAME,
19 COLUMN_NAME,
20 DATA_TYPE,
21 DATA_LENGTH
22 FROM ALL_TAB_COLUMNS@NEWTRADE.US.ORACLE.COM
23 ) A,
24 ALL_TAB_COLUMNS@NEWTRADE.US.ORACLE.COM B
25 WHERE A.TABLE_NAME = B.TABLE_NAME
26 AND B.OWNER = 'NDMAIN'
27 AND A.COLUMN_NAME = B.COLUMN_NAME
28 ;
TABLE_NAME COLUMN_NAME DATA_TYPE DATA_LENGTH ORG_DATA_LENGTH
-------------------- --------------- --------------- ----------- ---------------
CAT_AUTH_PRICE REMARK VARCHAR2 200 500
CAT_ENTERPRISE ARCHIVE_NUM VARCHAR2 100 500
CAT_PRODUCT ARCHIVE_NUM VARCHAR2 200 500

r O P

D163D
O www.enmotech.com ORA

SQL> ALTER TABLE CAT_AUTH_PRICE MODIFY REMARK VARCHAR2(500);


Table altered.
SQL> ALTER TABLE CAT_ENTERPRISE MODIFY ARCHIVE_NUM VARCHAR2(500);
Table altered.
SQL> ALTER TABLE CAT_PRODUCT MODIFY ARCHIVE_NUM VARCHAR2(500);
Table altered.

JOBO
kO O
U k ORA-01401 O k ORA-01461 O

ORA-1461 Pcan bind a LONG value only for insert into a LONG column
O LONG
LONG P
SQL> SELECT DISTINCT DATA_TYPE FROM USER_TAB_COLUMNS;
DATA_TYPE
---------------
CHAR
DATE
FLOAT
NUMBER
VARCHAR2

LONG O LOB i O e e
O k P
SQL P
INSERT INTO CLIENT_LOGS (ID, EXECUTE_DATE, MESSAGES, FAILED_STATEMENT)
VALUES (SEQ_CLIENT.NEXTVAL, SYSDATE, V_ERROR_MESSAGE, SUBSTR(V_SYNCH_STATEMENT, 1, 4000));

SQL e g CLIENT_LOGS OMESSGAE FAILED_STATEMENT


VARCHAR2(4000)O P
SQL> DESC CLIENT_LOGS
Name Null? Type
--------------------------------------------- -------- ---------------------
ID NUMBER
EXECUTE_DATE DATE
MESSAGES VARCHAR2(4000)
FAILED_STATEMENT VARCHAR2(4000)

SQL SUBSTR SUBSTRBO FAILED_STATEMENT k


O SUBSTR k 4 000 O SUBSTR SUBSTRB SUBSTR
O U ALTER TABLE MODIFY O e ORA-1401
O ORA-1461 O SUBSTR
CLIENT_LOGS P
SQL> SELECT MAX(FAILED_STATEMENT) FROM CLIENT_LOGS;
MAX(FAILED_STATEMENT)
-----------------------------------------------------------------------------------------
MERGE INTO CAT_ENTERPRISE A USING (SELECT ARCHIVE_NUM, ASSOCIATE_FLAG, URL, BUSINESS_FLAG, CITY_ID,

D164D
O www.enmotech.com ORA

SALE_LAST_YEAR, REMA
RK, CHECK_FLAG, CHECK_DESC, USED_FLAG, CHECK_USER, CHECK_DATE, CREATE_USER, CREATE_DATE,
CREATE_PLAT, CREATE_ORG, LAST_U
PDATE_USER, LAST_UPDATE_DATE, LAST_UPDATE_PLAT, LAST_UPDATE_ORG, SYNCHRONIZED_DATE, CLEAN_DATE,
ENABLE_FLAG, DESCRIPTION
, FACTORY_FLAG, SALER_FLAG, SEND_FLAG, PFILE_PLAT, SYNC_STATE, CHECKUSER_NAME, SALE_YEAR, ID,
USED_NAME, PLAT_ID, BUSINE
SS_CATEGORY, JURIDICAL_PERSON, TAXPAYER_CODE, ACCOUNT_BANK, ACCOUNT_NUMBER, ACCOUNT_NAME,
ADDRESS, POST_CODE, TEL, WEBSI
TE, COUNTRY_ID, PROVINCE_ID, BUSINESS_LICENSE_DATE, BUSINESS_LICENSE_YEAR, BRANCH_NAME,
BRANCH_ADDRESS, BRANCH_PRINCIPAL
FROM CAT_ENTERPRISE@ZJTRADE.US.ORACLE.COM WHERE LAST_UPDATE_DATE >= TO_DATE('2008-11-19
12:00:03', 'YYYY-MM-DD HH24:MI:
SS') - 1) B ON (A.ID = B.ID) WHEN MATCHED THEN UPDATE SET ARCHIVE_NUM = B.ARCHIVE_NUM, ASSOCIATE_FLAG
= B.ASSOCIATE_FLAG
, URL = B.URL, BUSINESS_FLAG = B.BUSINESS_FLAG, CITY_ID = B.CITY_ID, SALE_LAST_YEAR =
B.SALE_LAST_YEAR, REMARK = B.REMAR
K, CHECK_FLAG = B.CHECK_FLAG, CHECK_DESC = B.CHECK_DESC, USED_FLAG = B.USED_FLAG, CHECK_USER
= B.CHECK_USER, CHECK_DATE
= B.CHECK_DATE, CREATE_USER = B.CREATE_USER, CREATE_DATE = B.CREATE_DATE, CREATE_PLAT =
B.CREATE_PLAT, CREATE_ORG = B.CR
EATE_ORG, LAST_UPDATE_USER = B.LAST_UPDATE_USER, LAST_UPDATE_DATE = B.LAST_UPDATE_DATE,
LAST_UPDATE_PLAT = B.LAST_UPDATE
_PLAT, LAST_UPDATE_ORG = B.LAST_UPDATE_ORG, SYNCHRONIZED_DATE = B.SYNCHRONIZED_DATE, CLEAN_DATE
= B.CLEAN_DATE, ENABLE_F
LAG = B.ENABLE_FLAG, DESCRIPTION = B.DESCRIPTION, FACTORY_FLAG = B.FACTORY_FLAG, SALER_FLAG =
B.SALER_FLAG, SEND_FLAG =
B.SEND_FLAG, PFILE_PLAT = B.PFILE_PLAT, SYNC_STATE = B.SYNC_STATE, CHECKUSER_NAME =
B.CHECKUSER_NAME, SALE_YEAR = B.SALE
_YEAR, USED_NAME = B.USED_NAME, PLAT_ID = B.PLAT_ID, BUSINESS_CATEGORY = B.BUSINESS_CATEGORY,
JURIDICAL_PERSON = B.JURID
ICAL_PERSON, TAXPAYER_CODE = B.TAXPAYER_CODE, ACCOUNT_BANK = B.ACCOUNT_BANK, ACCOUNT_NUMBER =
B.ACCOUNT_NUMBER, ACCOUNT_
NAME = B.ACCOUNT_NAME, ADDRESS = B.ADDRESS, POST_CODE = B.POST_CODE, TEL = B.TEL, WEBSITE = B.WEBSITE,
COUNTRY_ID = B.COUNTRY_ID, PROVINCE_ID = B.PROVINCE_ID, BUSINESS_LICENSE_DATE =
B.BUSINESS_LICENSE_DATE, BUSINESS_LICENSE_YEAR = B.BUSINESS_LICENSE_YEAR, BRANCH_NAME =
B.BRANCH_NAME, BRANCH_ADDRESS = B.BRANCH_ADDRESS, BRANCH_PRINCIPAL = B.BRANCH_PRINCIPAL W
HEN NOT MATCHED THEN INSERT (ARCHIVE_NUM, ASSOCIATE_FLAG, URL, BUSINESS_FLAG, CITY_ID,
SALE_LAST_YEAR, REMARK, CHECK_FLAG, CHECK_DESC, USED_FLAG, CHECK_USER, CHECK_DATE, CREATE_USER,
CREATE_DATE, CREATE_PLAT, CREATE_ORG, LAST_UPDATE_USER, LAST_UPDATE_DATE, LAST_UPDATE_PLAT,
LAST_UPDATE_ORG, SYNCHRONIZED_DATE, CLEAN_DATE, ENABLE_FLAG, DESCRIPTION, FACTORY_FLAG,
SALER_FLAG, SEND_FLAG, PFILE_PLAT, SYNC_STATE, CHECKUSER_NAME, SALE_YEAR, ID, USED_NAME, PLAT_ID,
BUSINESS_CATEGORY,JURIDICAL_PERSON, TAXPAYER_CODE, ACCOUNT_BANK, ACCOUNT_NUMBER, ACCOUNT_NAME,
ADDRESS, POST_CODE, TEL, WEBSITE, COUNTRY_ID, PROVINCE_ID, BUSINESS_LICENSE_DATE,
BUSINESS_LICENSE_YEAR, BRANCH_NAME, BRANCH_ADDRESS, BRANCH_PRINCIPAL) VALUES ( B.ARCHIVE_NUM,
B.ASSOCIATE_FLAG, B.URL, B.BUSINESS_FLAG, B.CITY_ID, B.SALE_LAST_YEAR, B.REMARK, B.CHECK_FLAG,
B.CHECK_DESC, B.USED_FLAG, B.CHECK_USER, B.CHECK_DATE, B.CREATE_USER, B.CREATE_DATE,
B.CREATE_PLAT, B.CREATE_ORG, B.LAST_UPDATE_USER, B.LAST_UPDATE_DATE, B.LAST_UPDATE_PLAT,
B.LAST_UPDATE_ORG, B.SYNCHRONIZED_DATE, B.CLEAN_DATE, B.ENABLE_FLAG, B.DESCRIPTION,
B.FACTORY_FLAG, B.SALER_FLAG, B.SEND_FLAG, B.PFILE_PLAT, B.SYNC_STATE, B.CHECKUSER_NAME,
B.SALE_YEAR, B.ID, B.USED_NAME, B.PLAT_ID, B.BUSINESS_CATEGORY, B.JURIDICAL_PERSON,
B.TAXPAYER_CODE, B.ACCOUNT_BANK, B.ACCOUNT_NUMBER, B.ACCOUNT_NAME, B.ADDRESS, B.POST_CODE,
B.TEL, B.WEBSITE, B.COUNTRY_ID, B.PROVINCE_ID, B.BUSINESS_LICENSE_DATE, B.BUSINESS_LICENSE_YEAR,
B.BRANCH_NAME, B.BRANCH_ADDRESS, B.BRANCH_PRINCIPAL)

D165D
O www.enmotech.com ORA

SQL> SELECT LENGTH(MAX(FAILED_STATEMENT)) FROM CLIENT_LOGS;


LENGTH(MAX(FAILED_STATEMENT))
-----------------------------
3900

U SQLO CLIENT_LOGS SQLO


SQL k 3 900 O e r OSQL 4 000 i
O SQL
e kPSUBSTR OSQL k O U
O LONGO a k 4 000 O
Oracle LONG k
U P
SQL> DECLARE
2 V_STR VARCHAR2(32767) := LPAD('A', 10000, 'A');
3 BEGIN
4 INSERT INTO CLIENT_LOGS VALUES (0, SYSDATE, NULL, V_STR);
5 END;
6 /
DECLARE
*
ERROR at line 1:
ORA-01461: can bind a LONG value only for insert into a LONG column
ORA-06512: at line 4

P k SUBSTR aO Oracle SUBSTR


g k O a 4 000 k
SUBSTR SQL O P
SQL> DECLARE
2 V_STR VARCHAR2(32767) := LPAD('A', 10000, 'A');
3 BEGIN
4 V_STR := SUBSTR(V_STR, 1, 4000);
5 INSERT INTO CLIENT_LOGS VALUES (0, SYSDATE, NULL, V_STR);
6 END;
7 /
PL/SQL procedure successfully completed.

O SQL Ni P
SQL> ROLLBACK;
Rollback complete.
SQL> DECLARE
2 V_STR VARCHAR2(32767) := LPAD('A', 10000, 'A');
3 BEGIN
4 EXECUTE IMMEDIATE 'INSERT INTO CLIENT_LOGS VALUES (0, SYSDATE, NULL, ''' || SUBSTR(V_STR,
1, 4000) || ''')';
5 END;
6 /
PL/SQL procedure successfully completed.
SQL> ROLLBACK;
Rollback complete.
SQL> DECLARE

D166D
O www.enmotech.com ORA

2 V_STR VARCHAR2(32767) := LPAD('A', 10000, 'A');


3 BEGIN
4 EXECUTE IMMEDIATE 'INSERT INTO CLIENT_LOGS VALUES (0, SYSDATE, NULL, :V_STR)'
5 USING SUBSTR(V_STR, 1, 4000);
6 END;
7 /
PL/SQL procedure successfully completed.
SQL> ROLLBACK;
Rollback complete.

O PL/SQL SUBSTR O SQL


k

D167D

You might also like