设为首页 收藏本站
查看: 699|回复: 0

[经验分享] Oracle 自动段空间管理(ASSM:auto segment space management)

[复制链接]

尚未签到

发表于 2018-9-25 06:11:31 | 显示全部楼层 |阅读模式
  一. 官网说明
  Logical Storage Structures
  http://download.oracle.com/docs/cd/E11882_01/server.112/e16508/logical.htm#CNCPT7668
  其中有关ASSM 的内容如下:
  Logical Space Management
  Oracle Database must use logical space management to track and allocate the extents in a tablespace. When a database object requires an extent, the database must have a method of finding and providing it. Similarly, when an object no longer requires an extent, the database must have a method of making the free extent available.
  Oracle Database manages space within a tablespace based on the type that you create. You can create either of the following types of tablespaces:
  ·         Locally managed tablespaces (default)
  The database uses bitmaps in the tablespaces themselves to manage extents. Thus, locally managed tablespaces have a part of the tablespace set aside for a bitmap. Within a tablespace, the database can manage segments with automatic segment space management (ASSM) or manual segment space management (MSSM).
  ·         Dictionary-managed tablespaces
  The database uses the data dictionary to manage extents (see "Overview of the Data Dictionary").

  Figure 12-3 shows the>  Figure 12-3 Logical Space Management
  Description of "Figure 12-3 Logical Space Management"
  Locally Managed Tablespaces
  A locally managed tablespace maintains a bitmap in the data file header to track free and used space in the data file body. Each bit corresponds to a group of blocks. When space is allocated or freed, Oracle Database changes the bitmap values to reflect the new status of the blocks.
  The following graphic is a conceptual representation of bitmap-managed storage. A 1 in the header refers to used space, whereas a 0 refers to free space.
  A locally managed tablespace has the following advantages:
  ·         Avoids using the data dictionary to manage extents

  Recursive operations can occur in dictionary-managed tablespaces if consuming or>  ·         Tracks adjacent free space automatically
  In this way, the database eliminates the need to coalesce free extents.

  ·         Determines the>
  Alternatively, all extents can have the same>  Note:
  Oracle strongly recommends the use of locally managed tablespaces with Automatic Segment Space Management.
  Segment space management is an attribute inherited from the tablespace that contains the segment. Within a locally managed tablespace, the database can manage segments automatically or manually. For example, segments in tablespace users can be managed automatically while segments in tablespace tools are managed manually.
  Automatic Segment Space Management
  The ASSM method uses bitmaps to manage space. Bitmaps provide the following advantages:
  ·         Simplified administration
  ASSM avoids the need to manually determine correct settings for many storage parameters. Only one crucial SQL parameter controls space allocation: PCTFREE. This parameter specifies the percentage of space to be reserved in a block for future updates (see "Percentage of Free Space in Data Blocks").
  ASSM 管理,只需要一个参数:PCTFREE
  ·         Increased concurrency
  Multiple transactions can search separate lists of free data blocks, thereby reducing contention and waits. For many standard workloads, application performance with ASSM is better than the performance of a well-tuned application that uses MSSM.
  ·         Dynamic affinity of space to instances in an Oracle Real Application Clusters (Oracle RAC) environment
  ASSM is more efficient and is the default for permanent, locally managed tablespaces.
  Note:
  This chapter assumes the use of ASSM in all of its discussions of logical storage space.
  Manual Segment Space Management
  The legacy MSSM method uses a linked list called a free list to manage free space in the segment. For a database object that has free space, a free list keeps track of blocks under the high water mark (HWM), which is the dividing line between segment space that is used and not yet used. As blocks are used, the database puts blocks on or removes blocks from the free list as needed.
  In addition to PCTFREE, MSSM requires you to control space allocation with SQL parameters such as PCTUSED, FREELISTS, and FREELIST GROUPS. PCTUSED sets the percentage of free space that must exist in a currently used block for the database to put it on the free list. For example, if you set PCTUSED to 40 in a CREATE TABLE statement, then you cannot insert rows into a block in the segment until less than 40% of the block space is used.
  As an illustration, suppose you insert a row into a table. The database checks a free list of the table for the first available block. If the row cannot fit in the block, and if the used space in the block is greater than or equal to PCTUSED, then the database takes the block off the list and searches for another block. If you delete rows from the block, then the database checks whether used space in the block is now less than PCTUSED. If so, then the database places the block at the beginning of the free list.
  An object may have multiple free lists. In this way, multiple sessions performing DML on a table can use different lists, which can reduce contention. Each database session uses only one free list for the duration of its session.
  As shown in Figure 12-4, you can also create an object with one or more free list groups, which are collections of free lists. Each group has a master free list that manages the individual process free lists in the group. Space overhead for free lists, especially for free list groups, can be significant.
  Figure 12-4 Free List Groups
  Description of "Figure 12-4 Free List Groups"
  Managing segment space manually can be complex. You must adjust PCTFREE and PCTUSED to reduce row migration (see "Chained and Migrated Rows") and avoid wasting space. For example, if every used block in a segment is half full, and if PCTUSED is 40, then the database does not permit inserts into any of these blocks. Because of the difficulty of fine-tuning space allocation parameters, Oracle strongly recommends ASSM. In ASSM, PCTFREE determines whether a new row can be inserted into a block, but it does not use free lists and ignores PCTUSED.
  -- ASSM 会忽略PCTUSED 参数
  Dictionary-Managed Tablespaces
  A dictionary-managed tablespace uses the data dictionary to manage its extents. Oracle Database updates tables in the data dictionary whenever an extent is allocated or freed for reuse. For example, when a table needs an extent, the database queries the data dictionary tables, and searches for free extents. If the database finds space, then it modifies one data dictionary table and inserts a row into another. In this way, the database manages space by modifying and moving data.
  The SQL that the database executes in the background to obtain space for database objects is recursive SQL. Frequent use of recursive SQL can have a negative impact on performance because updates to the data dictionary must be serialized. Locally managed tablespaces, which are the default, avoid this performance problem.
  二.  ASSM 说明
  
              在Orale 9i以前,表的剩余空间的管理与分配都是由链接列表freelist来完成的,因为freelist存在串行的问题因此容易引起往往容易引起段头的争用与空间的浪费(其实这一点并不明显),最主要的还是因为需要DBA 花费大量的精力去管理这些争用并监控表的空间利用。  
              自动段空间管理(ASSM),它首次出现在Oracle 920里。有了ASSM,链接列表freelist被位图所取代,它是一个二进制的数组,能够迅速有效地管理存储扩展和剩余区块(free block),因此能够改善分段存储本质,ASSM表空间上创建的段还有另外一个称呼叫Bitmap Managed Segments(BMB 段)。  
  
  让我们看看位图freelist是如何实现的。从使用区段空间管理自动参数创建tablespace开始:
  create tablespace demo
  datafile ''/ora01/oem/demo01.dbf ''
  size 5m
  EXTENT MANAGEMENT LOCAL -- Turn on LMT
  SEGMENT SPACE MANAGEMENT AUTO -- Turn on ASSM;
  一旦你定义好了tablespace,那么表和索引就能够使用各种方法很容易地被移动到新的tablespace里,带有ASSM的本地管理tablespace会略掉任何为PCTUSED、NEXT和FREELISTS所指定的值。
  当表格或者索引被分配到这个tablespace以后,用于独立对象的PCTUSED的值会被忽略,而Oracle9i会使用位图数组来自动地管理tablespace里表格和索引的freelist。对于在LMT的tablespace内部创建的表格和索引而言,这个NEXT扩展子句是过时的,因为由本地管理的tablespace会管理它们。但是,INITIAL参数仍然是需要的,因为Oracle不可能提前知道初始表格加载的大小。对于ASSM而言,INITIAL最小的值是三个块。
  新的管理机制用位图来跟踪或管理每个分配到对象的块,每个块有多少剩余空间根据位图的状态来确定,如>75%,50%-75%,25%-50%和>
  System>
  SQL>>
  System>
  SQL>>
  System>  进入Udump 查看刚才生成的trace 文件
  *** 2009-12-07 19:30:16.406
  *** SERVICE NAME:(DBA.ANQINGREN.ORG) 2009-12-07 19:30:16.390

  *** SESSION>  Start dump data blocks tsn: 8 file#: 7 minblk 9 maxblk 9
  buffer tsn: 8 rdba: 0x01c00009 (7/9)
  scn: 0x0000.001a0da0 seq: 0x01 flg: 0x04 tail: 0x0da02001
  frmt: 0x02 chkval: 0x44e6 type: 0x20=FIRST LEVEL BITMAP BLOCK
  Hex dump of block: st=0, typ_found=1
  Dump of memory from 0x085C8400 to 0x085CA400
  85C8400 0000A220 01C00009 001A0DA0 04010000  [ ...............]
  85C8410 000044E6 00000000 00000000 00000000  [.D..............]
  85C8420 00000000 00000000 00000000 00000000  [................]
  Repeat 1 times
  85C8440 00000000 00000000 00000000 00000004  [................]
  85C8450 FFFFFFFF 0000000D 00000003 00000010  [................]
  85C8460 00010002 00000000 00000000 00000000  [................]
  85C8470 00000000 00000003 00000000 00000000  [................]
  85C8480 00000000 00000000 00000000 00000000  [................]
  85C8490 01C0000A 00000000 00000000 00000003  [................]
  85C84A0 00000008 01C0000C 00000000 00000000  [................]
  85C84B0 00000000 00000000 00000000 00000001  [................]
  85C84C0 0000D302 00000000 00000000 01C00009  [................]
  85C84D0 00000008 00000000 01C00011 00000008  [................]
  85C84E0 00000008 00000000 00000000 00000000  [................]
  85C84F0 00000000 00000000 00000000 00000000  [................]
  Repeat 8 times
  85C8580 00000000 00000000 00000000 00001011  [................]
  85C8590 00000000 00000000 00000000 00000000  [................]
  Repeat 485 times
  85CA3F0 00000000 00000000 00000000 0DA02001  [............. ..]
  Dump of First Level Bitmap Block
  --------------------------------
  nbits : 4 nranges: 2         parent dba:  0x01c0000a   poffset: 0
  unformatted: 13      total: 16        first useful block: 3
  owning instance : 1
  instance ownership changed at
  Last successful Search
  Freeness Status:  nf1 0      nf2 0      nf3 0      nf4 0
  Extent Map Block Offset: 4294967295
  First free datablock : 3
  Bitmap block lock opcode 0
  Locker xid:     :  0x0000.000.00000000
  Inc #: 0 Objd: 54018
  HWM Flag: HWM Set

  Highwater::  0x01c0000c  ext#: 0      blk#: 3      ext>  #blocks in seg. hdr''s freelists: 0
  #blocks below: 0
  mapblk  0x00000000  offset: 0
  --------------------------------------------------------
  DBA Ranges :
  --------------------------------------------------------
  0x01c00009  Length: 8      Offset: 0
  0x01c00011  Length: 8      Offset: 8
  0:Metadata   1:Metadata   2:Metadata   3:unformatted
  4:unformatted   5:unformatted   6:unformatted   7:unformatted
  8:unformatted   9:unformatted   10:unformatted   11:unformatted
  12:unformatted   13:unformatted   14:unformatted   15:unformatted
  --------------------------------------------------------
  End dump data blocks tsn: 8 file#: 7 minblk 9 maxblk 9
  *** 2009-12-07 19:35:44.296
  Start dump data blocks tsn: 8 file#: 7 minblk 10 maxblk 10
  buffer tsn: 8 rdba: 0x01c0000a (7/10)
  scn: 0x0000.001a0dc1 seq: 0x01 flg: 0x04 tail: 0x0dc12101
  frmt: 0x02 chkval: 0x5439 type: 0x21=SECOND LEVEL BITMAP BLOCK
  Hex dump of block: st=0, typ_found=1
  Dump of memory from 0x085C8400 to 0x085CA400
  85C8400 0000A221 01C0000A 001A0DC1 04010000  [!...............]
  85C8410 00005439 00000000 00000000 00000000  [9T..............]
  85C8420 00000000 00000000 00000000 00000000  [................]
  Repeat 1 times
  85C8440 00000000 00000000 00000000 01C0000B  [................]
  85C8450 00000008 00000008 00000000 00000000  [................]
  85C8460 00000000 00000000 0000D302 00000001  [................]
  85C8470 00000000 01C00009 00010005 01C00019  [................]
  85C8480 00010005 01C00029 00010005 01C00039  [....).......9...]
  85C8490 00010005 01C00049 00010005 01C00059  [....I.......Y...]
  85C84A0 00010005 01C00069 00010005 01C00079  [....i.......y...]
  85C84B0 00010005 00000000 00000000 00000000  [................]
  85C84C0 00000000 00000000 00000000 00000000  [................]
  Repeat 498 times
  85CA3F0 00000000 00000000 00000000 0DC12101  [.............!..]
  Dump of Second Level Bitmap Block
  number: 8       nfree: 8       ffree: 0      pdba:     0x01c0000b
  Inc #: 0 Objd: 54018
  opcode:0
  xid:
  L1 Ranges :
  --------------------------------------------------------
  0x01c00009  Free: 5 Inst: 1
  0x01c00019  Free: 5 Inst: 1
  0x01c00029  Free: 5 Inst: 1
  0x01c00039  Free: 5 Inst: 1
  0x01c00049  Free: 5 Inst: 1
  0x01c00059  Free: 5 Inst: 1
  0x01c00069  Free: 5 Inst: 1
  0x01c00079  Free: 5 Inst: 1
  --------------------------------------------------------
  End dump data blocks tsn: 8 file#: 7 minblk 10 maxblk 10
  Start dump data blocks tsn: 8 file#: 7 minblk 11 maxblk 11
  buffer tsn: 8 rdba: 0x01c0000b (7/11)
  scn: 0x0000.001a0dc6 seq: 0x01 flg: 0x04 tail: 0x0dc62301
  frmt: 0x02 chkval: 0x79ad type: 0x23=PAGETABLE SEGMENT HEADER
  Hex dump of block: st=0, typ_found=1
  Dump of memory from 0x085C8400 to 0x085CA400
  85C8400 0000A223 01C0000B 001A0DC6 04010000  [#...............]
  85C8410 000079AD 00000000 00000000 00000000  [.y..............]
  85C8420 00000000 00000010 00000080 00000A9C  [................]
  85C8430 00000000 00000003 00000008 01C0000C  [................]
  85C8440 00000000 00000000 00000000 00000000  [................]
  Repeat 1 times
  85C8460 00000003 00000008 01C0000C 00000000  [................]
  85C8470 00000000 00000000 00000000 01C00009  [................]
  85C8480 01C00009 00000000 00000000 00000000  [................]
  85C8490 00000000 00000000 00000000 00000000  [................]
  Repeat 3 times
  85C84D0 00000001 00002000 00000000 00001434  [..... ......4...]
  85C84E0 00000000 01C0000A 00000001 01C00079  [............y...]
  85C84F0 01C0000A 00000000 00000000 00000000  [................]
  85C8500 00000000 00000000 00000010 00000000  [................]
  85C8510 0000D302 10000000 01C00009 00000008  [................]
  85C8520 01C00011 00000008 01C00019 00000008  [................]
  85C8530 01C00021 00000008 01C00029 00000008  [!.......).......]
  85C8540 01C00031 00000008 01C00039 00000008  [1.......9.......]
  85C8550 01C00041 00000008 01C00049 00000008  [A.......I.......]
  85C8560 01C00051 00000008 01C00059 00000008  [Q.......Y.......]
  85C8570 01C00061 00000008 01C00069 00000008  [a.......i.......]
  85C8580 01C00071 00000008 01C00079 00000008  [q.......y.......]
  85C8590 01C00081 00000008 00000000 00000000  [................]
  85C85A0 00000000 00000000 00000000 00000000  [................]
  Repeat 144 times
  85C8EB0 01C00009 01C0000C 01C00009 01C00011  [................]
  85C8EC0 01C00019 01C0001A 01C00019 01C00021  [............!...]
  85C8ED0 01C00029 01C0002A 01C00029 01C00031  [)...*...)...1...]
  85C8EE0 01C00039 01C0003A 01C00039 01C00041  [9...:...9...A...]
  85C8EF0 01C00049 01C0004A 01C00049 01C00051  [I...J...I...Q...]
  85C8F00 01C00059 01C0005A 01C00059 01C00061  [Y...Z...Y...a...]
  85C8F10 01C00069 01C0006A 01C00069 01C00071  [i...j...i...q...]
  85C8F20 01C00079 01C0007A 01C00079 01C00081  [y...z...y.......]
  85C8F30 00000000 00000000 00000000 00000000  [................]
  Repeat 144 times
  85C9840 00000000 00000000 01C0000A 00000000  [................]
  85C9850 00000000 00000000 00000000 00000000  [................]
  Repeat 185 times
  85CA3F0 00000000 00000000 00000000 0DC62301  [.............#..]
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 16     #blocks: 128
  last map  0x00000000  #maps: 0      offset: 2716

  Highwater::  0x01c0000c  ext#: 0      blk#: 3      ext>  #blocks in seg. hdr''s freelists: 0
  #blocks below: 0
  mapblk  0x00000000  offset: 0
  Unlocked
  --------------------------------------------------------
  Low HighWater Mark :

  Highwater::  0x01c0000c  ext#: 0      blk#: 3      ext>  #blocks in seg. hdr''s freelists: 0
  #blocks below: 0
  mapblk  0x00000000  offset: 0
  Level 1 BMB for High HWM block: 0x01c00009
  Level 1 BMB for Low HWM block: 0x01c00009
  --------------------------------------------------------
  Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0
  L2 Array start offset:  0x00001434
  First Level 3 BMB:  0x00000000
  L2 Hint for inserts:  0x01c0000a
  Last Level 1 BMB:  0x01c00079
  Last Level II BMB:  0x01c0000a
  Last Level III BMB:  0x00000000
  Map Header:: next  0x00000000  #extents: 16   obj#: 54018  flag: 0x10000000
  Inc # 0
  Extent Map
  -----------------------------------------------------------------
  0x01c00009  length: 8
  0x01c00011  length: 8
  0x01c00019  length: 8
  0x01c00021  length: 8
  0x01c00029  length: 8
  0x01c00031  length: 8
  0x01c00039  length: 8
  0x01c00041  length: 8
  0x01c00049  length: 8
  0x01c00051  length: 8
  0x01c00059  length: 8
  0x01c00061  length: 8
  0x01c00069  length: 8
  0x01c00071  length: 8
  0x01c00079  length: 8
  0x01c00081  length: 8
  Auxillary Map
  --------------------------------------------------------
  Extent 0     :  L1 dba:  0x01c00009 Data dba:  0x01c0000c
  Extent 1     :  L1 dba:  0x01c00009 Data dba:  0x01c00011
  Extent 2     :  L1 dba:  0x01c00019 Data dba:  0x01c0001a
  Extent 3     :  L1 dba:  0x01c00019 Data dba:  0x01c00021
  Extent 4     :  L1 dba:  0x01c00029 Data dba:  0x01c0002a
  Extent 5     :  L1 dba:  0x01c00029 Data dba:  0x01c00031
  Extent 6     :  L1 dba:  0x01c00039 Data dba:  0x01c0003a
  Extent 7     :  L1 dba:  0x01c00039 Data dba:  0x01c00041
  Extent 8     :  L1 dba:  0x01c00049 Data dba:  0x01c0004a
  Extent 9     :  L1 dba:  0x01c00049 Data dba:  0x01c00051
  Extent 10    :  L1 dba:  0x01c00059 Data dba:  0x01c0005a
  Extent 11    :  L1 dba:  0x01c00059 Data dba:  0x01c00061
  Extent 12    :  L1 dba:  0x01c00069 Data dba:  0x01c0006a
  Extent 13    :  L1 dba:  0x01c00069 Data dba:  0x01c00071
  Extent 14    :  L1 dba:  0x01c00079 Data dba:  0x01c0007a
  Extent 15    :  L1 dba:  0x01c00079 Data dba:  0x01c00081
  --------------------------------------------------------
  Second Level Bitmap block DBAs
  --------------------------------------------------------
  DBA 1:   0x01c0000a
  End dump data blocks tsn: 8 file#: 7 minblk 11 maxblk 11
  附件:Show_space() 存储过程代码:
  CREATE OR REPLACE PROCEDURE show_space (p_segname_1 IN varchar2,
  p_space IN varchar2 DEFAULT ''MANUAL'' ,
  p_type_1 IN varchar2 DEFAULT ''TABLE'' ,
  p_analyzed IN varchar2 DEFAULT ''N'' ,
  p_owner_1 IN varchar2 DEFAULT USER
  )
  AS
  p_segname              VARCHAR2 (100);
  p_type                 VARCHAR2 (10);
  p_owner                VARCHAR2 (30);
  l_unformatted_blocks   NUMBER;
  l_unformatted_bytes    NUMBER;
  l_fs1_blocks           NUMBER;
  l_fs1_bytes            NUMBER;
  l_fs2_blocks           NUMBER;
  l_fs2_bytes            NUMBER;
  l_fs3_blocks           NUMBER;
  l_fs3_bytes            NUMBER;
  l_fs4_blocks           NUMBER;
  l_fs4_bytes            NUMBER;
  l_full_blocks          NUMBER;
  l_full_bytes           NUMBER;
  l_free_blks            NUMBER;
  l_total_blocks         NUMBER;
  l_total_bytes          NUMBER;
  l_unused_blocks        NUMBER;
  l_unused_bytes         NUMBER;
  l_lastusedextfileid    NUMBER;
  l_lastusedextblockid   NUMBER;
  l_last_used_block      NUMBER;
  PROCEDURE p (p_label IN varchar2, p_num IN number)
  IS
  BEGIN
  DBMS_OUTPUT.put_line (RPAD (p_label, 40, ''.'') || p_num);
  END;
  BEGIN
  p_segname                 := UPPER (p_segname_1);          -- rainy changed
  p_owner                   := UPPER (p_owner_1);
  p_type                    := p_type_1;
  IF (p_type_1 = ''i'' OR p_type_1 = ''I'')
  THEN                                                        --rainy changed
  p_type   := ''INDEX'';
  END IF;
  IF (p_type_1 = ''t'' OR p_type_1 = ''T'')
  THEN                                                        --rainy changed
  p_type   := ''TABLE'';
  END IF;
  IF (p_type_1 = ''c'' OR p_type_1 = ''C'')
  THEN                                                        --rainy changed
  p_type   := ''CLUSTER'';
  END IF;
  DBMS_SPACE.unused_space (segment_owner => p_owner,
  segment_name => p_segname,
  segment_type => p_type,
  total_blocks => l_total_blocks,
  total_bytes => l_total_bytes,
  unused_blocks => l_unused_blocks,
  unused_bytes => l_unused_bytes,
  last_used_extent_file_id => l_lastusedextfileid,
  last_used_extent_block_id => l_lastusedextblockid,
  last_used_block => l_last_used_block
  );
  IF p_space = ''MANUAL'' OR (p_space  ''auto'' AND p_space  ''AUTO'')
  THEN
  DBMS_SPACE.free_blocks (segment_owner => p_owner,
  segment_name => p_segname,
  segment_type => p_type,
  freelist_group_id => 0,
  free_blks => l_free_blks
  );
  p (''Free Blocks'', l_free_blks);
  END IF;
  p (''Total Blocks'', l_total_blocks);
  p (''Total Bytes'', l_total_bytes);
  p (''Unused Blocks'', l_unused_blocks);
  p (''Unused Bytes'', l_unused_bytes);
  p (''Last Used Ext FileId'', l_lastusedextfileid);
  p (''Last Used Ext BlockId'', l_lastusedextblockid);
  p (''Last Used Block'', l_last_used_block);
  /*IF the segment is analyzed */
  IF p_analyzed = ''Y''
  THEN
  DBMS_SPACE.space_usage (segment_owner => p_owner,
  segment_name => p_segname,
  segment_type => p_type,
  unformatted_blocks => l_unformatted_blocks,
  unformatted_bytes => l_unformatted_bytes,
  fs1_blocks => l_fs1_blocks,
  fs1_bytes => l_fs1_bytes,
  fs2_blocks => l_fs2_blocks,
  fs2_bytes => l_fs2_bytes,
  fs3_blocks => l_fs3_blocks,
  fs3_bytes => l_fs3_bytes,
  fs4_blocks => l_fs4_blocks,
  fs4_bytes => l_fs4_bytes,
  full_blocks => l_full_blocks,
  full_bytes => l_full_bytes
  );
  DBMS_OUTPUT.put_line (RPAD ('' '', 50, ''*''));
  DBMS_OUTPUT.put_line (''The segment is analyzed'');
  p (''0% -- 25% free space blocks'', l_fs1_blocks);
  p (''0% -- 25% free space bytes'', l_fs1_bytes);
  p (''25% -- 50% free space blocks'', l_fs2_blocks);
  p (''25% -- 50% free space bytes'', l_fs2_bytes);
  p (''50% -- 75% free space blocks'', l_fs3_blocks);
  p (''50% -- 75% free space bytes'', l_fs3_bytes);
  p (''75% -- 100% free space blocks'', l_fs4_blocks);
  p (''75% -- 100% free space bytes'', l_fs4_bytes);
  p (''Unused Blocks'', l_unformatted_blocks);
  p (''Unused Bytes'', l_unformatted_bytes);
  p (''Total Blocks'', l_full_blocks);
  p (''Total bytes'', l_full_bytes);
  END IF;
  END;
  exec show_space(''abc'',''auto'',''T'',''Y'');
  本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-07/38018p2.htm


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-600721-1-1.html 上篇帖子: 使用JDBC批处理操作Oracle数据库 下篇帖子: 关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表