Table in memory

Hi all,
is there a possibility in 11g to load tables at database starttime from disk to memory and therefore all further "read"-access to this table will handled in memory?
best regards
georg

It is possible to keep -especially small- tables in memory, by putting them into the keep pool.
The steps to take are:
- Determine size of the table
- Adjust size of the keep-pool so the table fits into it, using:
alter system set db_keep_cache_size=<size of table + 20%> scope=both;After tha 'pin' the table into the pool using:
ALTER TABLE <table> STORAGE ( BUFFER_POOL KEEP );
MAKE SURE that your SGA is large enough for the keep pool to be created. It is preffered to increase the SGA with the size the keep pool will become.
In that case no other memory buffers will be reduced in size
HTH
FJFranken

Similar Messages

  • Export internal table to memory in User Exit FM

    Hi all,
    My scenario here is to export an internal table in one user exit FM and import it back in another user exit FM.
    I was trying to use
    Export lt_table to memory id 'LABEL'.
    then
    Import lt_table from memory id 'LABEL'.
    But then i hit error in the import statement. How can I rectify this?
    Thanks. Answer will be rewarded.

    Refer to the below related threads
    Export an internal table to memory and import from memory into an internal
    http://help.sap.com/saphelp_erp2005/helpdata/en/fc/eb3bf8358411d1829f0000e829fbfe/frameset.htm
    Regards,
    Santosh

  • Export a table to memory ID and import it in the Workflow.

    Hi,
    For a particular requirement,
    We are triggering Workflow from the User Exit MV45AFZZ.
    Before triggering this WF, I am trying to export an internal table to a memory ID and trying to Import it back from the same memory ID into an internal table in the Workflow task. This is failing.
    Even the name of internal tables and memory IDs are similar.
    Can we do this like this? If yes please let me know how to do this.
    Thanks & Regards,
    Mallika Maktala

    Initially,
    I have populated the values of the internal table in to a Database table, immediately called Workflow, in a task tried to retrieve the data from the database table.
    But though there is some data in the table, it dint retrieve any data, as at that point the table may not be updated.
    So now I used this Import export concept.
    I think its in same session, but still not working,
    Any solution?
    Mallika Maktala

  • Exporting an internal table to memory

    Hi
      I want to call an program from another program and want the values stored in an internal table used in the called program.
    how can i export an internal table to memory id an then import it.
    Regards
    Arun

    So to be clear, for your requirement it would be:
    * Towards the end of the called program
      EXPORT it_itab TO MEMORY ID 'ZZ_MEM_ID'.
    * And then from calling program after the submit zzzz and return statement
      IMPORT it_itab FROM MEMORY ID 'ZZ_MEM_ID'.
    Hope that helps.
    Brad
    Message was edited by: Brad Williams (put back intro text)
    Message was edited by: Brad Williams

  • Save Internal table to memory - problem

    Hi everybody ,
    I need to extract one Internal table to memory , every 1st in the Month .
    Then every day I will be reading this table for my report ( in order to avoid running every day same and same database selections) .
    My originall idea wos with EXPORT TO MEMORY ID , AND IMPORT
    but it does'nt work next day ... With Export data is cept only untill tthe end of the transaction ...
    Is there any way except of storing data in one Z_ database table ???
    Thanks in advance

    Hi,
    You can use the following code to export to memory
    *data variable required for background processing
    data: wa_indx type indx.
    *EXPORT Internal Table TO MEMORY ID 'XYZ'.
    *part for background processing
      export tab = <your table> to database indx(xy) from wa_indx client
      sy-mandt id 'XYZ'.
    the following code will import from Memory and clear memory
    *data variable required for background processing
    data: wa_indx type indx.
    imports from database the list sent by the calling program
    IMPORT tab = <your table> FROM DATABASE indx(xy) TO wa_indx CLIENT sy-mandt
    ID 'XYZ'.
    deletes the data to save wastage of memory
    DELETE FROM DATABASE indx(xy)
      CLIENT sy-mandt
      ID 'XYZ'.
    Regards,
    Samson Rodrigues.

  • Pass Internal Table to Memory

    Dear Experts.
    I have the following problem.
    I am using a User-Exit for Travel  that is called from a program standard with use the T.Code TRIP. The program standard use a structure that when entry in the user exit not is. I need use this structure in the user exit. (p_t_req_head).
    I had read abour SAP and ABAP Memory but from the program standar How can Pass Internal Table to Memory SAP or ABAP from the program standard to user-exit?
    When I am doing debugging in the program Standard and this call to the user exit, I use ()namestructure for example ()p_t_req_head  and I get the datas of the structure, But In the Source Code ABAP, How can do this with instructions?
    Regards

    Hi,
    You try with Import & Export Statements as follows ---
    DATA : t_itab LIKE TABLE OF spfli.
    EXPORT t_itab TO MEMORY ID 'ABCD'.
    After sending the internal table to ABAP memory you need to get that by IMPORT in the called session.
    IMPORT t_itab FROM MEMORY ID 'ABCD'.

  • Export internal table to memory.

    How can I export and import an internal table to memory?
    This:
    export messtab to memory id 'TAB'. (in program 1)
    import messtab=messtab from memory id 'TAB'. (in program 2)
    does not work.

    Even without the brackets it doesn't work.
    In program 1 I have:
        WRITE text-e21 TO messtab-message.
        messtab-type = c_tipo_error.
        APPEND messtab. CLEAR messtab.
        DELETE messtab WHERE message = space.
        EXPORT messtab[] TO MEMORY ID para.
        EXIT.
    The EXIT leads to program 2, from where I made a submit to program 1, and where I have:
    import messtab[] from memory id para.
    Where:
            DATA: para TYPE tpara-paramid VALUE 'MES',
            messtab  TYPE TABLE OF bapireturn WITH HEADER LINE.
    What's wrong?
    Thanks in advance.
    Oh, and I've checked the table in program 1 does have an entry.

  • Passing Dynamic Internal Tables to Memory

    I have a bit of a conundrum right now that I can't seem to correct. I am working on adding an ALV report to an existing report program. I was able to write a simple helper program that builds a custom object that I defined that translates my raw data into two seperate dynamic tables, and then builds an ALV grid and outputs it. The reason I wrote this in a simple helper program was so that I could use SUBMIT ... EXPORTING LIST TO MEMORY from my primary report program and capture the input so I can later write it out under our company's standard ABAP list format as if I were using WRITE statements.
    The output of the report itself is working beautifully. We have included functionality to automatically take the output, produce an HTML file from it, and then FTP it directly to a webserver so our clients can get easy access to it. What I want to be able to do though is give the clients two tab-delimited files that contain the raw data that was used to build the report. We have an interface in place to do that, but I somehow need to be able to pass these two dynamic internal tables which I have field-symbols to reference back to my calling program.
    Here is what I am trying to do:
    CALL METHOD OBJ_ALV_MR_EST_REASONS->PRODUCE_ESTIMATION_REPORT
        IMPORTING
          RPT_DATA_BY_REASON   = ref_it_estreason
          RPT_DATA_BY_DISTRICT = ref_it_district.
    *   Assign the field symbols
      ASSIGN ref_it_estreason->* TO <it_estreason>.
      ASSIGN ref_it_district->* TO <it_district>.
    * Export the two internal tables to memory so they can be
    * retrieved by the calling program
      EXPORT reason = <it_estreason>[]
             district = <it_district>[]
      TO MEMORY ID 'ZCR_ESTIMATION_REASON_RPT'.
    As you can see, my method returns two references to dynamic internal tables. I have used the memory debugger to see that these tables are being correctly written to the ABAP memory.
    However, back in my parent program when I try to do the following,
    CREATE DATA ref_it_estreason TYPE REF TO DATA.
          CREATE DATA ref_it_district TYPE REF TO DATA.
          ASSIGN ref_it_estreason->* TO <it_estreason>.
          ASSIGN ref_it_district->* TO <it_district>.
          IMPORT reason = <it_estreason>
                 district = <it_district>
          FROM MEMORY ID 'ZCR_ESTIMATION_REASON_RPT'.
    I get the REFS_NOT_SUPPORTED_YET exception which says that "For the statement Export/Import ..." object references, interface references, and data references are currently not supported".
    I have tried multiple other ways of defining my field-symbols or my reference pointers but they all result in exceptions of some sort. Is there any way for me to get this data passed back? It seems like there must be a way to get the data from memory since I know it's being correctly stored there.
    Thanks in advance.

    Shortly after posting this, I had an idea which I was able to implement to actually get this to work.
    I decided that I would simply pass the FIELDCAT tables for each of my dynamic tables into the same memory ID as the tables themselves.
      EXPORT reason_fcat = it_estreason_fcat
             district_fcat = it_district_fcat
             reason = <it_estreason>[]
             district = <it_district>[]
      TO MEMORY ID 'ZCR_ESTIMATION_REASON_RPT'.
    Then, back in my calling program I execute the following code. This retrieves the FIELDCAT tables, builds two empty dynamic table type reference variables and then lets me create field-symbols to reference those components.
    *     Retrieve the fieldcat internal tables first
          IMPORT reason_fcat = it_estreason_fcat
                 district_fcat = it_district_fcat
          FROM MEMORY ID 'ZCR_ESTIMATION_REASON_RPT'.
    *     Generate an internal table type assigned to each
    *     reference variable based on the fieldcat listings we
    *     retrieve
          CALL METHOD cl_alv_table_create=>create_dynamic_table
            EXPORTING
              it_fieldcatalog = it_estreason_fcat
            IMPORTING
              ep_table        = ref_it_estreason.
          CALL METHOD cl_alv_table_create=>create_dynamic_table
            EXPORTING
              it_fieldcatalog = it_district_fcat
            IMPORTING
              ep_table        = ref_it_district.
    *     Assign the field symbols
          ASSIGN ref_it_estreason->* TO <it_estreason>.
          ASSIGN ref_it_district->* TO <it_district>.
          CREATE DATA ref_wa_estreason LIKE LINE OF <it_estreason>.
          CREATE DATA ref_wa_district LIKE LINE OF <it_district>.
          ASSIGN ref_wa_estreason->* TO <wa_estreason>.
          ASSIGN ref_wa_district->* TO <wa_district>.
    *     Finally, we can retrieve the data from memory and assign
    *     to the internal tables referenced by our field-symbols
          IMPORT reason = <it_estreason>[]
                 district = <it_district>[]
          FROM MEMORY ID 'ZCR_ESTIMATION_REASON_RPT'.
    This worked beautifully and saved me from having to do a major redesign. I don't know how helpful it would be for ABAP Objects to be passed to memory (I believe some type of serialization would need to be in order there), but for dynamically typed internal tables it worked like a dream with little overhead.

  • It cannot reference the dynamic internal table in memory as an object.

    Hi,
    I am getting the syntax error in the second select. I guest it cannot reference the dynamic internal table in memory as an object.
    The internal table contains different fields from multiple tables and it gets created OK. Then the first select within the loop executes OK allowing me to read the multiple tables in ITABLES.
    * Create dynamic internal table and assign to FS
      call method cl_alv_table_create=>create_dynamic_table
        EXPORTING
          it_fieldcatalog = ifc
        IMPORTING
          ep_table        = dy_table.
    ***OK, the dynamic tables is created here
      assign dy_table->* to <dyn_table>.
    * Create dynamic work area and assign to FS
      create data dy_line like line of <dyn_table>.
      assign dy_line->* to <dyn_wa>.
    loop at ITABLES.
    ***OK, no syntax errors in this select here
      select * appending corresponding fields of table <dyn_table>
                 from (ITABLES-TABNAME).
    endloop.
    data: ikonp like konp occurs 0 with header line.
    ***NOT OK, there is syntax errors
      select * into table ikonp
      from KONP for all entries in <dyn_table>
      where knumh = <dyn_table>-knumh.
    Some of the tables in ITABLES are pooled tables which does not allow me to use INNER JOINS. Therefore I need a second select in order to read the pricing table KONP.
    Thanks in advance for any hint.

    Hi Abel,
    You must be getting the syntax error that <dyn_table> does not contain the field knumh.
    try putiing the entire where clause in a char type variable say wa_char and then use in ur query as
    where (wa_char) .. it may work..
    concatenate 'knumh' '=' '<dyn_table>-knumh' INTO wa_char SEPARATED BY SPACES.
    SELECT ... from konp...
    where (wa_char).
    Revert if it doesnt work.

  • Tables in memory (Nested tables ?)

    For performance reasons, I would like to insert, update, etc...
    a table in memory. Can I use a nested table as if it was a
    normal table ? Can I do updates on nested tables with values
    from normal database tables ??
    Statement like : Update <nested-table> set <nested-
    table>.x=<value> where <nested-table>.y = <normal-table>.y
    Thanks for a quick response.

    The answer is yes and no.
    A nested table is a "collection" and can be referenced in a SQL
    statement using the pseudo-functions THE, CAST, MULTISET and
    TABLE. The nested table and varray collections can be a column
    in a database table (Oracle8) and are persistent. SQL
    statements cannot act on memory held nested tables, varray and
    index-by collections, which are transient. Index-by collections
    are same as the older PL/SQL tables.
    SQL statements cannot operate directly on transient collections.
    For speed you can define an index-by collection as a table of
    rowtype, and move data back and forth from database tables and
    memory held tables using SQL. Records and index-by tables are
    more efficient in Oracle 8 than in Oracle 7
    In PL/SQL you can use replacement (:=) on the record or
    record.column of the rowtype index-by collection. The downside
    is you have to keep track of your own indexing which is only
    BINARY_INTEGER, no SELECT, UPDATE, INSERT using FROM and WHERE
    on transient collections. This works in Oracle 7 also.
    Good Luck.

  • How to create a TEMPORARY table in memory?

    Hi,
    Is there any way to create a temporary table in memory other than in tablespce?

    A cursor should do the job for you, I reckon.
    Regards,
    Raymond.

  • How to keep a table in memory in Oracle 10g

    How to keep a table in memory in Oracle 10g

    Hi !
    For small tables wich are mostly accessed with full table scan you can use
    ALTER TABLE <table_name> STORAGE (BUFFER_POOL KEEP);KEEP pool should be properly sized , setting will cause once the table is read oracle will avoid flushing it out from pool.
    T

  • Table in memory using plsql

    I have to convert a table and the plsql will check a small table a lot of times , I'd like to put this table in memory and do this check using variables,
    I trying to use record type but I have to find a record using 2 columns and I can not able to use the EXISTS,
    I'd like to have a table cache, and find a row in this cache ( using 2 columns as key ) ,
    Any help I appreciate .

    A multilevel associative array may help you. Here is an example.
    set serveroutput on
    declare
    type row_type is record ( col_1 number, col_2 number );
    type inner_aa_type is table of row_type index by varchar2(10) ;
    type outer_aa_type is table of inner_aa_type index by varchar2(10) ;
    v_row row_type ;
    v_aa        outer_aa_type ;
    begin
    v_row.col_1 := 10 ;
    v_row.col_2 := 100 ;
    v_aa('A')('1') := v_row ;
    v_row.col_1 := 20 ;
    v_row.col_2 := 200 ;
    v_aa('A')('2') := v_row ;
    dbms_output.put_line ( v_aa('A')('1').col_1 );
    dbms_output.put_line ( v_aa('A')('1').col_2 );
    dbms_output.put_line ( v_aa('A')('2').col_1 );
    dbms_output.put_line ( v_aa('A')('2').col_2 );
    if ( v_aa.exists('A') and v_aa('A').exists('1') )
    then dbms_output.put_line( 'First test is true' );
    end if;
    if not ( v_aa.exists('A') and v_aa('A').exists('5') )
    then dbms_output.put_line( 'Second test is false' );
    end if;
    if not ( v_aa.exists('X') and v_aa('X').exists('5') )
    then dbms_output.put_line( 'Third test is false' );
    end if;
    end ;
    10
    100
    20
    200
    First test is true
    Second test is false
    Third test is false
    PL/SQL procedure successfully completed.--
    Joe Fuda
    [SQL Snippets|http://www.sqlsnippets.com/|SQL Snippets]

  • Put tables in memory

    hi all.
    looked on the internet bur didn't find much information about that.
    i have a big table that i use to populate another table via select/insert.
    i want to speed up this work.
    is there a way to put my table in memory and how.
    any contribution will be apreciated.

    Alkapone wrote:
    hi all.
    looked on the internet bur didn't find much information about that.
    i have a big table that i use to populate another table via select/insert.
    i want to speed up this work.
    is there a way to put my table in memory and how.
    any contribution will be apreciated.Well, if you are just doing it once, you wouldn't need to keep it in memory - the create table as select statement actually uses a faster way of accessing I/O than if you were to get little bits at a time off of disk (multiblock read), works fast. So, I'll assume you are going to populate your other table a little bit at a time.
    Oracle keeps blocks in buffers in memory. It uses a modified least recently used algorithm to age unused blocks out. So if you have a not very active database, you can just read the whole thing by doing a select on a field that is not indexed, and it will be ready for your other table to be populated. If you have a moderately active database, blocks will begin to be aged out as other objects take the space. If you have a very active database, or one that is doing a lot of updates to the big table, you might find a performance problem as Oracle attempts to keep read consistency of the big table. Also, using multiblock read gives Oracle the idea you don't really want to keep the blocks in memory, so they are the first to age out if anything goes.
    This can be a very large and complicated subject, depending on the details of what you are doing and what everybody else is doing. If it is a reasonable thing for your database to do and for whatever reason Oracle doesn't automatically keep the blocks you need in memory, you can establish a keep pool for specific objects, which is basically a separate set of buffers to avoid aging the object's blocks out. Some people think just letting Oracle do its thing with a large SGA is generally the better way to go, but again, it really depends.
    I've seen situations in the past where it makes sense to take the desired data out of the database, manipulate it, then put it in the new table - this can avoid fights between batch and online processing in temp segments, as well as read-consistency performance issues. This is less of a consideration on newer versions of Oracle with modern hardware, but must I say it again? It depends.
    Read the Concepts manual!

  • Table for Memory Id

    Hi Guru's,
    I actually curious to know to in which table the Memory id are stored. And the list of programs where the the memory id is used.
            EXPORT lt_sub_mdata TO MEMORY ID ZTSD_SUB_MDATA.
           I want to know the other programs where the memory id ZTSD_SUB_MDATA is used.
    Regards
    Anil

    Hi Anil,
    Please check this site will help you.
    http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb3bc4358411d1829f0000e829fbfe/content.htm
    http://help.sap.com/saphelp_nw04/Helpdata/EN/fc/eb3bde358411d1829f0000e829fbfe/content.htm

Maybe you are looking for