DBA Data[Home] [Help]

VIEW: SYS.KU$_UNLOAD_METHOD_VIEW

Source

View Text - Preformatted

select t.obj#,
      decode (
           -- Condition 1: Table has FGAC for SELECT enabled?
        (select count(*) from rls$ r where r.obj#=t.obj#
                and r.enable_flag=1 and bitand(r.stmt_type,1)=1)
        +  -- Condition 2 and 3: Encrypted cols or queue table?
        bitand(t.trigflag, 65536+8388608)
        + -- Condition 4a: BFILE columns?
        bitand(t.property, 32768)
        + -- Condition 4b: Opaque columns?
        (select count(*) FROM opqtype$ o where o.obj# = t.obj#)
        + -- Condition 5: Cols of evolved types that need upgrading?
        (select count(*) FROM coltype$ c where c.obj#=t.obj# and
                bitand(c.flags,256)>0)
        + -- Condition 6: Any LONG or LONG RAW columns that are not last?
        (select count(*) from col$ c where c.obj#=t.obj# and c.type# IN (8,24)
                and c.segcol# !=
                (select MAX(c2.segcol#) from col$ c2 where c2.obj#=t.obj#) )
        + -- Condition 7: Columns with embedded opaques?
        (select count(*) from coltype$ c, type$ ty where c.obj#=t.obj# and
                c.toid=ty.toid and bitand(ty.properties, 4096) > 0)
        + -- Condition 8: table with column added that has NOT NULL and
          -- DEFAULT VALUE specified
        (select count(*) from ecol$ e where e.tabobj# = t.obj#)
        + -- Condition 9: target is 10g instance and table contains subtype,
          -- sql_plan_allstat_row_type.  This subtype does not exist in 10.2.
        (select count(*) from subcoltype$ sc where sc.obj# = t.obj# and
                              sc.toid = '00000000000000000000000000020215' and
                              dbms_metadata.get_version < '11.00.00.00.00')
        + -- Condition 10: table with a RADM masking policy
        (select count(*) from radm$ r where r.obj# = t.obj#)
        + -- Condition 11: table is ILM enabled
          -- KQLDTVCP2_LIFECYCLE    0x00008000
        (bitand(t.property,(32768*4294967296)))
       , 0, 1, 4),
--
-- NOTE: The values 1 and 4 from the decode above correspond to the constants
-- prefer_direct and require_external from the package kupd$data_int defined in
-- datapump/dml/prvthpdi. If these values ever change in the package, they must
-- be changed here as well. Can't use pkg's constants because catmeta executes
-- before pkg header is installed.
--
  --
  -- Ext. Tbls. cannot unload in parallel if:
  -- 1. FGAC (row level security) is enabled (Why? see comment below...)
  -- 2. It's a nested table
  -- 3. Table contains a LOB (possible with columns of type adt, refs,
  --    varray or lob).
  --
  -- The data layer must execute as invoker's rights for unload on FGAC-enabled
  -- tables so the security of the caller is enforced (security hole if SYS
  -- as definer unloaded the table). But, kxfp processes started in response to
  -- a parallel ET unload would also run as the unprived invoker and they then
  -- fail calling our internal definer's pkg's like queueing and file mgt.
  -- Forcing parallel=1 in this case stays in the context of the worker process
  -- which *can* see the internal pkgs because they share the same owner (SYS).
  --
      decode (
        (select count(*) from rls$ r where r.obj#=t.obj# and r.enable_flag=1)
        +
        bitand(t.property, 2+8+16+8192+262144)
        , 0, 1, 0)  -- 1: Can do ET parallel unload  0: Can't
   from tab$ t
View Text - HTML Formatted

SELECT T.OBJ#
, DECODE ( -- CONDITION 1: TABLE HAS FGAC FOR SELECT ENABLED? (SELECT COUNT(*)
FROM RLS$ R
WHERE R.OBJ#=T.OBJ#
AND R.ENABLE_FLAG=1
AND BITAND(R.STMT_TYPE
, 1)=1) + -- CONDITION 2
AND 3: ENCRYPTED COLS OR QUEUE TABLE? BITAND(T.TRIGFLAG
, 65536+8388608) + -- CONDITION 4A: BFILE COLUMNS? BITAND(T.PROPERTY
, 32768) + -- CONDITION 4B: OPAQUE COLUMNS? (SELECT COUNT(*)
FROM OPQTYPE$ O
WHERE O.OBJ# = T.OBJ#) + -- CONDITION 5: COLS OF EVOLVED TYPES THAT NEED UPGRADING? (SELECT COUNT(*)
FROM COLTYPE$ C
WHERE C.OBJ#=T.OBJ# AND BITAND(C.FLAGS
, 256)>0) + -- CONDITION 6: ANY LONG OR LONG RAW COLUMNS THAT ARE NOT LAST? (SELECT COUNT(*)
FROM COL$ C
WHERE C.OBJ#=T.OBJ#
AND C.TYPE# IN (8
, 24)
AND C.SEGCOL# != (SELECT MAX(C2.SEGCOL#)
FROM COL$ C2
WHERE C2.OBJ#=T.OBJ#) ) + -- CONDITION 7: COLUMNS WITH EMBEDDED OPAQUES? (SELECT COUNT(*)
FROM COLTYPE$ C
, TYPE$ TY
WHERE C.OBJ#=T.OBJ# AND C.TOID=TY.TOID
AND BITAND(TY.PROPERTIES
, 4096) > 0) + -- CONDITION 8: TABLE WITH COLUMN ADDED THAT HAS NOT NULL AND -- DEFAULT VALUE SPECIFIED (SELECT COUNT(*)
FROM ECOL$ E
WHERE E.TABOBJ# = T.OBJ#) + -- CONDITION 9: TARGET IS 10G INSTANCE
AND TABLE CONTAINS SUBTYPE
, -- SQL_PLAN_ALLSTAT_ROW_TYPE. THIS SUBTYPE DOES NOT EXIST IN 10.2. (SELECT COUNT(*)
FROM SUBCOLTYPE$ SC
WHERE SC.OBJ# = T.OBJ# AND SC.TOID = '00000000000000000000000000020215' AND DBMS_METADATA.GET_VERSION < '11.00.00.00.00') + -- CONDITION 10: TABLE WITH A RADM MASKING POLICY (SELECT COUNT(*)
FROM RADM$ R
WHERE R.OBJ# = T.OBJ#) + -- CONDITION 11: TABLE IS ILM ENABLED -- KQLDTVCP2_LIFECYCLE 0X00008000 (BITAND(T.PROPERTY
, (32768*4294967296)))
, 0
, 1
, 4)
, -- -- NOTE: THE VALUES 1
AND 4
FROM THE DECODE ABOVE CORRESPOND TO THE CONSTANTS -- PREFER_DIRECT
AND REQUIRE_EXTERNAL
FROM THE PACKAGE KUPD$DATA_INT DEFINED IN -- DATAPUMP/DML/PRVTHPDI. IF THESE VALUES EVER CHANGE IN THE PACKAGE
, THEY MUST -- BE CHANGED HERE AS WELL. CAN'T USE PKG'S CONSTANTS BECAUSE CATMETA EXECUTES -- BEFORE PKG HEADER IS INSTALLED. -- -- -- EXT. TBLS. CANNOT UNLOAD IN PARALLEL IF: -- 1. FGAC (ROW LEVEL SECURITY) IS ENABLED (WHY? SEE COMMENT BELOW...) -- 2. IT'S A NESTED TABLE -- 3. TABLE CONTAINS A LOB (POSSIBLE WITH COLUMNS OF TYPE ADT
, REFS
, -- VARRAY OR LOB). -- -- THE DATA LAYER MUST EXECUTE AS INVOKER'S RIGHTS FOR UNLOAD ON FGAC-ENABLED -- TABLES SO THE SECURITY OF THE CALLER IS ENFORCED (SECURITY HOLE IF SYS -- AS DEFINER UNLOADED THE TABLE). BUT
, KXFP PROCESSES STARTED IN RESPONSE TO -- A PARALLEL ET UNLOAD WOULD ALSO RUN AS THE UNPRIVED INVOKER
AND THEY THEN -- FAIL CALLING OUR INTERNAL DEFINER'S PKG'S LIKE QUEUEING
AND FILE MGT. -- FORCING PARALLEL=1 IN THIS CASE STAYS IN THE CONTEXT OF THE WORKER PROCESS -- WHICH *CAN* SEE THE INTERNAL PKGS BECAUSE THEY SHARE THE SAME OWNER (SYS). -- DECODE ( (SELECT COUNT(*)
FROM RLS$ R
WHERE R.OBJ#=T.OBJ#
AND R.ENABLE_FLAG=1) + BITAND(T.PROPERTY
, 2+8+16+8192+262144)
, 0
, 1
, 0) -- 1: CAN DO ET PARALLEL UNLOAD 0: CAN'T
FROM TAB$ T