<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1711149732348302804</id><updated>2012-02-28T00:07:36.001+04:00</updated><category term='Exalytics'/><category term='TAF'/><category term='EM'/><category term='Mat view'/><category term='TimesTen'/><category term='Cache'/><category term='Certification'/><category term='Clusterware'/><category term='Replication'/><category term='PL/SQL'/><category term='XLA'/><category term='Events'/><category term='OOW'/><category term='11.2.2'/><category term='Golden Gate'/><category term='11G'/><category term='NY'/><title type='text'>Oracle TimesTen and other Oracle Technologies</title><subtitle type='html'>By: Gennady Sigalaev</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>42</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-8239654701856683674</id><published>2012-02-28T00:07:00.000+04:00</published><updated>2012-02-28T00:07:36.012+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Exalytics'/><title type='text'>Oracle Announces Availability of Oracle Exalytics In-Memory Machine</title><content type='html'>&lt;a href="http://www.oracle.com/us/corporate/press/1533476#sf3295075"&gt;Oracle Announces Availability of Oracle Exalytics In-Memory Machine&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-8239654701856683674?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/8239654701856683674/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=8239654701856683674&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8239654701856683674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8239654701856683674'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2012/02/oracle-announces-availability-of-oracle_28.html' title='Oracle Announces Availability of Oracle Exalytics In-Memory Machine'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-7692850065770852589</id><published>2012-02-23T23:23:00.003+04:00</published><updated>2012-02-24T02:15:13.126+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='11.2.2'/><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>Columnar compression in TimesTen</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-G3qPlXfyh38/T0ZkqW8AHZI/AAAAAAAAAHA/f01b3n-Ygwg/s1600/tablecompress.gif" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="181" lda="true" src="http://4.bp.blogspot.com/-G3qPlXfyh38/T0ZkqW8AHZI/AAAAAAAAAHA/f01b3n-Ygwg/s320/tablecompress.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;In this article I would like to write about Columnar Compression in TimesTen.&lt;br /&gt;&lt;br /&gt;Oracle TimesTen 11.2.2 introduced several new features. One of them it’s Columnar Compression. Tables could be compressed at the column level, which stores data more efficiently.&lt;br /&gt;&lt;br /&gt;The compression unit in Timesten is a compressed column group. A compressed column group consists of set of columns. You can include one or more columns in compressed column group; however, a column can be included in only one compressed column group. Each compressed column group is limited to a maximum of 16 columns.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;For enabling compression feature for particular table specify OPTIMIZED FOR READ on the CREATE TABLE statement. For example: &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table test_1 ( id number not null,&lt;br /&gt;       &amp;gt;                       val_1   varchar2(40))&lt;br /&gt;       &amp;gt; optimized for read;&lt;br /&gt;Command&amp;gt; desc test_1;&lt;br /&gt;&lt;br /&gt;Table GENA.TEST_1:&lt;br /&gt;  Columns:&lt;br /&gt;    ID                              NUMBER NOT NULL&lt;br /&gt;    VAL_1                           VARCHAR2 (40) INLINE&lt;br /&gt;  OPTIMIZED FOR READ&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;(primary key columns are indicated with *)&lt;br /&gt;Command&amp;gt;&lt;/pre&gt;Additionally, specify the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;COMPRESS - defines a compressed column group for a table.&lt;/li&gt;&lt;li&gt;BY DICTIONARY - defines a compression dictionary for each compressed column group.&lt;/li&gt;&lt;li&gt;MAXVALUES - defines the total number of distinct values in the column/columns and set the size for the compressed column group pointer column to 1, 2, or 4 bytes.&lt;/li&gt;&lt;/ul&gt;For example, create a compression table:&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table emp_comp (id number not null,&lt;br /&gt;       &amp;gt;                        val_1   varchar2(40),&lt;br /&gt;       &amp;gt;                        val_2   varchar2(40),&lt;br /&gt;       &amp;gt;                        val_3   varchar2(40))&lt;br /&gt;       &amp;gt; compress ((val_1,val_2) by dictionary maxvalues = 255,&lt;br /&gt;       &amp;gt;            val_3        by dictionary maxvalues = 255) &lt;br /&gt;       &amp;gt; optimized for read;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;Command&amp;gt; desc emp_comp;&lt;br /&gt;&lt;br /&gt;Table GENA.EMP_COMP:&lt;br /&gt;  Columns:&lt;br /&gt;    ID                              NUMBER NOT NULL&lt;br /&gt;    VAL_1                           VARCHAR2 (40) INLINE&lt;br /&gt;    VAL_2                           VARCHAR2 (40) INLINE&lt;br /&gt;    VAL_3                           VARCHAR2 (40) INLINE&lt;br /&gt;  COMPRESS ( ( VAL_1, VAL_2 ) BY DICTIONARY MAXVALUES=255,&lt;br /&gt;             VAL_3 BY DICTIONARY MAXVALUES=255 ) OPTIMIZED FOR READ&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;(primary key columns are indicated with *)&lt;br /&gt;Command&amp;gt;&lt;/pre&gt;In this example I created a table with two compressed column groups. The first one consisted of two columns VAL_1 and VAL_2 and the second - VAL_3 column. Each column can contain 255 distinct vales (pointer size - 1 byte for each compressed column group). When I defined compressed column group, TimesTen created the dictionary tables (for each compression column group).&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; alltables;&lt;br /&gt;  GENA.CD$_1086056_2&lt;br /&gt;  GENA.CD$_1086056_4&lt;br /&gt;  GENA.EMP_COMP&lt;br /&gt;  …&lt;br /&gt;28 tables found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;The data dictionary tables name&amp;nbsp;is constructed by the following:&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;"CD$" + the table identifier (SYS.TABLES.TBLID) + compressed column number &lt;br /&gt;&lt;br /&gt;Command&amp;gt; select tblname, tblid from sys.tables where tblname = 'EMP_COMP';&lt;br /&gt;&amp;lt; EMP_COMP                       , 1086056 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;There is some information from data dictionary:&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; VARIABLE TABNAME VARCHAR2(50) := 'EMP_COMP';&lt;br /&gt;Command&amp;gt; select TABLE_NAME,&lt;br /&gt;       &amp;gt;        COMPRESSION,&lt;br /&gt;       &amp;gt;        COMPRESS_FOR&lt;br /&gt;       &amp;gt;   from sys.all_tables&lt;br /&gt;       &amp;gt;  where TABLE_NAME = :TABNAME;&lt;br /&gt;&amp;lt; EMP_COMP, ENABLED, QUERY HIGH &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; select tblname,&lt;br /&gt;       &amp;gt;        numcompress,&lt;br /&gt;       &amp;gt;        valtblids&lt;br /&gt;       &amp;gt;   from sys.tables&lt;br /&gt;       &amp;gt;  where TBLNAME=:TABNAME;&lt;br /&gt;&amp;lt; EMP_COMP                       , 3, 7092100078921000 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;You can see that EMP_COMP is compressed table, contains three compressed columns and compressed for “QUERY HIGH” purpose. I don’t know how to decrypt the "valtblids" values, but I will find out :)&lt;br /&gt;Each system table contains identical columns you defined in compressed column group plus counter (##CD_REFCNT).&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; desc CD$_1086056_2;&lt;br /&gt;&lt;br /&gt;Table GENA.CD$_1086056_2:&lt;br /&gt;  Columns:&lt;br /&gt;   *VAL_1                           VARCHAR2 (40) INLINE&lt;br /&gt;   *VAL_2                           VARCHAR2 (40) INLINE&lt;br /&gt;    ##CD_REFCNT                     TT_INTEGER NOT NULL&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;(primary key columns are indicated with *)&lt;br /&gt;Command&amp;gt; desc CD$_1086056_4;&lt;br /&gt;&lt;br /&gt;Table GENA.CD$_1086056_4:&lt;br /&gt;  Columns:&lt;br /&gt;   *VAL_3                           VARCHAR2 (40) INLINE&lt;br /&gt;    ##CD_REFCNT                     TT_INTEGER NOT NULL&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;(primary key columns are indicated with *)&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;A dictionary table is created for each compressed column group that contains a column with all the distinct values of the compressed column group. The compressed column group in table contains a pointer (1 byte in this case) to the row in the dictionary table for the appropriate value.&lt;br /&gt;The width of the pointer can be 1, 2, or 4 bytes long depending on the maximum number of entries you defined for the dictionary table. When the user configures the maximum number of distinct entries for the compressed column group, the size of the compressed column group is set as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1 byte for a maximum number of entries of 255 (28-1). When the maximum number is between 1 and 255, the dictionary size is set to 255 (28-1) values and the compressed column group pointer column is 1 byte.&lt;/li&gt;&lt;li&gt;2 bytes for a maximum number of entries of 65,535 (216-1). When the maximum number is between 256 and 65,535, the dictionary size is set to 65,535 (216-1) values and the compressed column group pointer column is 2 bytes. &lt;/li&gt;&lt;li&gt;4 bytes for a maximum number of entries of 4,294,967,295 (232-1). When the maximum number is between 65,536 and 4,294,967,295, the dictionary size is set to 4,294,967,295 (232-1) values and the compressed column group pointer column is 4 bytes. This is the default.&lt;/li&gt;&lt;/ul&gt;Let’s create a simple test:&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table test2  (id number not null,&lt;br /&gt;       &amp;gt;                      val_1   varchar2(40),&lt;br /&gt;       &amp;gt;                      val_2   varchar2(40),&lt;br /&gt;       &amp;gt;                      val_3   varchar2(40));&lt;br /&gt;Command&amp;gt; begin&lt;br /&gt;       &amp;gt;   for i in 1 .. 1000000 loop&lt;br /&gt;       &amp;gt;     insert into test2 &lt;br /&gt;       &amp;gt;      value (i,'1234567890123456789012345678901234567890',&lt;br /&gt;       &amp;gt;               '1234567890123456789012345678901234567890',       &lt;br /&gt;       &amp;gt;               '1234567890123456789012345678901234567890');&lt;br /&gt;       &amp;gt;   end loop;&lt;br /&gt;       &amp;gt; end;&lt;br /&gt;       &amp;gt; /&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('test2');&lt;br /&gt;Command&amp;gt; tablesize test2;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.TEST2:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   171470416&lt;br /&gt;  NUM_USED_ROWS:        1000000&lt;br /&gt;  NUM_FREE_ROWS:        192&lt;br /&gt;  AVG_ROW_LEN:          171&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       69544&lt;br /&gt;  TOTAL_BYTES:          171539960&lt;br /&gt;  LAST_UPDATED:         2012-02-20 08:10:38.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;Command&amp;gt; create table test2_comp  (id number not null,&lt;br /&gt;       &amp;gt;                           val_1   varchar2(40),&lt;br /&gt;       &amp;gt;                           val_2   varchar2(40),&lt;br /&gt;       &amp;gt;                           val_3   varchar2(40))&lt;br /&gt;       &amp;gt; compress (val_1 by dictionary maxvalues = 255) optimized for read;&lt;br /&gt;Command&amp;gt; begin&lt;br /&gt;       &amp;gt;   for i in 1 .. 1000000 loop&lt;br /&gt;       &amp;gt;     insert into test2_comp &lt;br /&gt;       &amp;gt;        values (i,'1234567890123456789012345678901234567890',&lt;br /&gt;       &amp;gt;                  '1234567890123456789012345678901234567890',&lt;br /&gt;       &amp;gt;                  '1234567890123456789012345678901234567890');&lt;br /&gt;       &amp;gt;   end loop;&lt;br /&gt;       &amp;gt; end;&lt;br /&gt;       &amp;gt; /&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('test2_comp');&lt;br /&gt;Command&amp;gt; tablesize test2_comp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.TEST2_COMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   131462736&lt;br /&gt;  NUM_USED_ROWS:        1000000&lt;br /&gt;  NUM_FREE_ROWS:        192&lt;br /&gt;  AVG_ROW_LEN:          131&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       87600&lt;br /&gt;  TOTAL_BYTES:          131550336&lt;br /&gt;  LAST_UPDATED:         2012-02-20 08:12:46.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;In this example I created two tables (test2 is uncompressed table and test2_comp is compressed table). In this case I compressed only one column (val_1) in test2_comp table. What can we see in this report? Average row length was decreased from 171 to 131 bytes, because all values for val_1 column store in data dictionary. Let’s calculate.&lt;br /&gt;&lt;br /&gt;Total size test2 table: 171539960 bytes&lt;br /&gt;Total size test2_comp table: 131550336 bytes&lt;br /&gt;&lt;br /&gt;So, we saved 39989624 bytes, it is an impressive&amp;nbsp;result. &lt;br /&gt;As you see in my test I inserted the same row in test2_comp table one million times. In this situation we can save (40 * 999999) – 1 (pointer_size) = 39999959 bytes (one value stores in data dictionary).&lt;br /&gt;We've got: 39999959&amp;nbsp;theor - 39989624&amp;nbsp;real = 10336 bytes. Only 10336 for metadata.&lt;br /&gt;Let’s take a look on memory allocation.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table test2_comp  (id number not null,&lt;br /&gt;       &amp;gt;                           val_1   varchar2(40),&lt;br /&gt;       &amp;gt;                           val_2   varchar2(40),&lt;br /&gt;       &amp;gt;                           val_3   varchar2(40))&lt;br /&gt;       &amp;gt; compress (val_1 BY DICTIONARY MAXVALUES = 1000000) OPTIMIZED FOR READ;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;Command&amp;gt; insert into test2_comp &lt;br /&gt;       &amp;gt;    values (1,        &lt;br /&gt;       &amp;gt;            '1234567890123456789012345678901000000000',&lt;br /&gt;       &amp;gt;            '1234567890123456789012345678901234567890',&lt;br /&gt;       &amp;gt;            '1234567890123456789012345678901234567890' );&lt;br /&gt;1 row inserted.&lt;br /&gt;Command&amp;gt; select count(*) from CD$_1086048_2;&lt;br /&gt;&amp;lt; 1 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('test2_comp');&lt;br /&gt;Command&amp;gt; tablesize test2_comp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.TEST2_COMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   33648&lt;br /&gt;  NUM_USED_ROWS:        1&lt;br /&gt;  NUM_FREE_ROWS:        255&lt;br /&gt;  AVG_ROW_LEN:          205&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       18832&lt;br /&gt;  TOTAL_BYTES:          52480&lt;br /&gt;  LAST_UPDATED:         2012-02-20 08:14:29.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;INLINE page for TEST2_COMP table was allocated – 33648 bytes and the page for CD$_1086048_2 table was allocated as well (the size is included in METADATA_BYTES row). Let’s insert 257 rows.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; begin&lt;br /&gt;       &amp;gt;   for i in 2 .. 257 loop&lt;br /&gt;       &amp;gt;     insert into test2_comp &lt;br /&gt;       &amp;gt;         values (i,'1234567890123456789012345678901000000000',&lt;br /&gt;       &amp;gt;                   '1234567890123456789012345678901234567890',&lt;br /&gt;       &amp;gt;                   '1234567890123456789012345678901234567890');&lt;br /&gt;       &amp;gt;   end loop;&lt;br /&gt;       &amp;gt; end;&lt;br /&gt;       &amp;gt; /&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; select count(*) from CD$_1086048_2;&lt;br /&gt;&amp;lt; 1 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('test2_comp');&lt;br /&gt;Command&amp;gt; tablesize test2_comp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.TEST2_COMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   67296&lt;br /&gt;  NUM_USED_ROWS:        257&lt;br /&gt;  NUM_FREE_ROWS:        255&lt;br /&gt;  AVG_ROW_LEN:          168&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       18832&lt;br /&gt;  TOTAL_BYTES:          86128&lt;br /&gt;  LAST_UPDATED:         2012-02-20 15:02:57.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;One more INLINE page for TEST2_COMP table was allocated 33648 *2 = 67296 (METADATA_BYTES the same). Let’s insert more rows.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; begin&lt;br /&gt;       &amp;gt;   for i in 257 .. 511 loop&lt;br /&gt;       &amp;gt;     insert into test2_comp &lt;br /&gt;       &amp;gt;        values (i,'1234567890123456789012345678901000000'||i,&lt;br /&gt;       &amp;gt;                  '1234567890123456789012345678901234567890',&lt;br /&gt;       &amp;gt;                  '1234567890123456789012345678901234567890');&lt;br /&gt;       &amp;gt;   end loop;&lt;br /&gt;       &amp;gt; end;&lt;br /&gt;       &amp;gt; /&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; select count(*) from CD$_1086048_2;&lt;br /&gt;&amp;lt; 256 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('test2_comp');&lt;br /&gt;Command&amp;gt; tablesize test2_comp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.TEST2_COMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   67296&lt;br /&gt;  NUM_USED_ROWS:        512&lt;br /&gt;  NUM_FREE_ROWS:        0&lt;br /&gt;  AVG_ROW_LEN:          168&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       18832&lt;br /&gt;  TOTAL_BYTES:          86128&lt;br /&gt;  LAST_UPDATED:         2012-02-20 15:05:24.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt; insert into test2_comp &lt;br /&gt;       &amp;gt;    values (-1,'1234567890123456789012345678901000000000',       &lt;br /&gt;       &amp;gt;               '1234567890123456789012345678901234567890',       &lt;br /&gt;       &amp;gt;               '1234567890123456789012345678901234567890');&lt;br /&gt;1 row inserted.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;Command&amp;gt;  call ttComputeTabSizes('test2_comp');&lt;br /&gt;Command&amp;gt;  tablesize test2_comp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.TEST2_COMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   100944&lt;br /&gt;  NUM_USED_ROWS:        513&lt;br /&gt;  NUM_FREE_ROWS:        255&lt;br /&gt;  AVG_ROW_LEN:          155&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       18832&lt;br /&gt;  TOTAL_BYTES:          119776&lt;br /&gt;  LAST_UPDATED:         2012-02-20 15:07:26.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;Command&amp;gt; select count(*) from CD$_1086048_2;&lt;br /&gt;&amp;lt; 257 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('test2_comp');&lt;br /&gt;Command&amp;gt; tablesize test2_comp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.TEST2_COMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   100944&lt;br /&gt;  NUM_USED_ROWS:        514&lt;br /&gt;  NUM_FREE_ROWS:        254&lt;br /&gt;  AVG_ROW_LEN:          178&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       36096&lt;br /&gt;  TOTAL_BYTES:          137040&lt;br /&gt;  LAST_UPDATED:         2012-02-20 15:08:42.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The third one INLINE page for TEST2_COMP table was allocated 33648 *3 = 100944 bytes&amp;nbsp;and one more page was allocated for CD$_1086048_2 table. (36096 – 18832 = 17264).&amp;nbsp;Let’s insert more rows.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; begin&lt;br /&gt;       &amp;gt;   for i in 513 .. 767 loop&lt;br /&gt;       &amp;gt;     insert into test2_comp &lt;br /&gt;       &amp;gt;            values (i,'1234567890123456789012345678901000000'||i,&lt;br /&gt;       &amp;gt;                      '1234567890123456789012345678901234567890',&lt;br /&gt;       &amp;gt;                      '1234567890123456789012345678901234567890');&lt;br /&gt;       &amp;gt;   end loop;&lt;br /&gt;       &amp;gt; end;&lt;br /&gt;       &amp;gt; /&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;Command&amp;gt;  select count(*) from CD$_1086048_2;&lt;br /&gt;&amp;lt; 512 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;Command&amp;gt; insert into test2_comp &lt;br /&gt;       &amp;gt;     values (-3,'1234567890123456789012345678901000000768',&lt;br /&gt;       &amp;gt;                '1234567890123456789012345678901234567890',&lt;br /&gt;       &amp;gt;                '1234567890123456789012345678901234567890');&lt;br /&gt;1 row inserted.&lt;br /&gt;Command&amp;gt; select count(*) from CD$_1086048_2;&lt;br /&gt;&amp;lt; 513 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('test2_comp');&lt;br /&gt;Command&amp;gt; tablesize test2_comp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.TEST2_COMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   134592&lt;br /&gt;  NUM_USED_ROWS:        770&lt;br /&gt;  NUM_FREE_ROWS:        254&lt;br /&gt;  AVG_ROW_LEN:          183&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       53360&lt;br /&gt;  TOTAL_BYTES:          187952&lt;br /&gt;  LAST_UPDATED:         2012-02-20 16:01:03.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;One more page was allocated for CD$_1086048_2 table. (36096 + 17264 = 53360 bytes) and etc.&lt;br /&gt;Of course my example is unrealistic, but as you can see TimesTen can store data more efficiently but it really depends on amount of distinct values in the column. In table below you see a table size for storing different amount of distinct values (the same test2_comp structure, the same&amp;nbsp;row count, different distinct values). &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-7brge02eiU0/T0ZqitB7HJI/AAAAAAAAAHI/y7rdnHu8JIA/s1600/tab.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="211" lda="true" src="http://2.bp.blogspot.com/-7brge02eiU0/T0ZqitB7HJI/AAAAAAAAAHI/y7rdnHu8JIA/s640/tab.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;As you can see in some cases (when column stores unique values for example) compression doesn't help.&amp;nbsp;You should&amp;nbsp;know about it.&lt;br /&gt;What else should you&amp;nbsp;know when you decide to use column compression? First of all there are some restrictions for using columnar compression:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;LOB columns cannot be compressed. &lt;/li&gt;&lt;li&gt;Compression is not supported on columns in replicated tables, cache group tables, grid tables, or on global temporary tables. You cannot create a table with the CREATE TABLE AS SELECT statement when defining in-memory columnar compression for that table in that statement.&lt;/li&gt;&lt;li&gt;You cannot create materialized views and materialized view logs on tables enabled for compression.&lt;/li&gt;&lt;li&gt;Compressed column groups can be added at the time of table creation or added later using ALTER TABLE. You can drop the entire compressed column group with the ALTER TABLE statement.&lt;/li&gt;&lt;li&gt;You can create a primary or unique key, where part or or all of the columns included in the key are compressed. For compressed columns included in a primary or unique key, you can include columns that exist within a compressed column group, but you do not have to include all of the columns within the compressed column group. In addition, you can include columns from different compressed column groups.&lt;/li&gt;&lt;li&gt;For compressed tables, all SQL operations lock the table. Table and index scans that access the columns of any compressed column group are somewhat slower due to dictionary lookup. However, since all the operations on the table acquire table locks, you do not need to acquire and release lower level locks. INSERT, DELETE and UPDATE operations on these tables will not scale.&lt;/li&gt;&lt;li&gt;Indexes can be created on any columns in the table. This includes compressed columns and includes columns that exist in separate compression column groups.&lt;/li&gt;&lt;/ul&gt;Some of these restrictions keep my attention. Let’s start with locking. For compressed tables, all SQL operations lock the table. It means no concurrency for compressed tables. But compression feature was developed for in-memory analyze purpose, so maybe in this context it’s ok. &lt;br /&gt;Additionally, I was really disappointed when I saw the restriction about impossibility to compress cache group tables and etc. I think it dramatically decreases the opportunity for using this feature. &lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;Columnar compression is the key functionality which was introduced in 11.2.2 TimesTen version. Tables could be compressed at the column level, which stores data more efficiently and&amp;nbsp;as you can see it works well. But you should know about restrictions and some rules&amp;nbsp;it helps&amp;nbsp;you to use this feature more effectively.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-7692850065770852589?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/7692850065770852589/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=7692850065770852589&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7692850065770852589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7692850065770852589'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2012/02/columnar-compression-in-timesten.html' title='Columnar compression in TimesTen'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-G3qPlXfyh38/T0ZkqW8AHZI/AAAAAAAAAHA/f01b3n-Ygwg/s72-c/tablecompress.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-8870982125791528612</id><published>2012-01-26T22:02:00.001+04:00</published><updated>2012-02-23T18:05:17.967+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='11.2.2'/><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>TimesTen and Memory allocation</title><content type='html'>In this post I would like to write about Columnar Compression in TimesTen but before that i should write some introduction about the TimesTen store method. As you know, TimesTen stores data in two different options: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;IN_LINE&amp;nbsp;- for column with a fixed length or columns with a variable length whose declared column length is &amp;lt;= 128 bytes (by default). This method is used by getting the best performance.&amp;nbsp;&lt;/li&gt;&lt;li&gt;OUT_OF_LINE - for columns whose declared column length is &amp;lt;= 128 bytes (by default). Out-of-line columns are not stored contiguously with the row but are allocated. Accessing out-of-line columns is slightly slower than accessing in-line columns. LOB data types are stored out-of-line. &lt;/li&gt;&lt;/ul&gt;A little example (NLS_LANGTH_SEMANTIC=BYTE): &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table t (in_line      varchar2 (50),&lt;br /&gt;       &amp;gt;                 out_of_line  varchar2(129));&lt;br /&gt;Command&amp;gt; desc t;&lt;br /&gt;&lt;br /&gt;Table GENA.T:&lt;br /&gt;  Columns:&lt;br /&gt;    IN_LINE                         VARCHAR2 (50) INLINE&lt;br /&gt;    OUT_OF_LINE                     VARCHAR2 (129) NOT INLINE&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;(primary key columns are indicated with *)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As you can see, the IN_LINE column stores date by using INLINE and the OUT_OF_LINE column stores date by using NOT INLINE. You can also implicitly specify the store method:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table t2 (in_line      varchar2 (50),&lt;br /&gt;       &amp;gt;                  out_of_line  varchar2(129) inline);&lt;br /&gt;Command&amp;gt; desc t2;&lt;br /&gt;&lt;br /&gt;Table GENA.T2:&lt;br /&gt;  Columns:&lt;br /&gt;    IN_LINE                         VARCHAR2 (50) INLINE&lt;br /&gt;    OUT_OF_LINE                     VARCHAR2 (129) INLINE&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;(primary key columns are indicated with *)&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now, let’s create a simple table:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table emp (id number not null,&lt;br /&gt;       &amp;gt;                   creation date,&lt;br /&gt;       &amp;gt;                   name_1   varchar2(40),&lt;br /&gt;       &amp;gt;                   name_2   varchar2(40),&lt;br /&gt;       &amp;gt;                   surname  varchar2(40),&lt;br /&gt;       &amp;gt;                   dept_id  number);&lt;br /&gt;Command&amp;gt; desc emp;&lt;br /&gt;&lt;br /&gt;Table GENA.EMP:&lt;br /&gt;  Columns:&lt;br /&gt;    ID                              NUMBER NOT NULL&lt;br /&gt;    CREATION                        DATE&lt;br /&gt;    NAME_1                          VARCHAR2 (40) INLINE&lt;br /&gt;    NAME_2                          VARCHAR2 (40) INLINE&lt;br /&gt;    SURNAME                         VARCHAR2 (40) INLINE&lt;br /&gt;    DEPT_ID                         NUMBER&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;(primary key columns are indicated with *)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;What size does it have? We can use a new TimesTen feature for that. If you want to know what size your table has you should compute it by using ttComputeTabSizes('table_name') function and after that you will be able to see the table size in SYS.ALL_TAB_SIZES table or using tablesize table_name command: &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; call ttComputeTabSizes('emp');&lt;br /&gt;Command&amp;gt; tablesize emp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.EMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   0&lt;br /&gt;  NUM_USED_ROWS:        0&lt;br /&gt;  NUM_FREE_ROWS:        0&lt;br /&gt;  AVG_ROW_LEN:          Not computed&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       784&lt;br /&gt;  TOTAL_BYTES:          784&lt;br /&gt;  LAST_UPDATED:         2012-01-19 19:37:07.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As you can see, there are no any data in EMP table. We see the metadata size (784 bytes) only, but we can get more information from data dictionary:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; VARIABLE TABNAME VARCHAR2(50) := 'EMP';&lt;br /&gt;Command&amp;gt; SET AUTOVARIABLES ON;&lt;br /&gt;Command&amp;gt; select COLNAME,&lt;br /&gt;       &amp;gt;        COLLEN,&lt;br /&gt;       &amp;gt;        INLINELEN&lt;br /&gt;       &amp;gt;   from SYS.COLUMNS&lt;br /&gt;       &amp;gt;  where id = ( select TBLID&lt;br /&gt;       &amp;gt;                  from sys.tables&lt;br /&gt;       &amp;gt;                 where tblname = :TABNAME);&lt;br /&gt;&amp;lt; CREATION                       , 7, 7 &amp;gt;&lt;br /&gt;&amp;lt; DEPT_ID                        , 22, 22 &amp;gt;&lt;br /&gt;&amp;lt; ID                             , 22, 22 &amp;gt;&lt;br /&gt;&amp;lt; NAME_1                         , 40, 44 &amp;gt;&lt;br /&gt;&amp;lt; NAME_2                         , 40, 44 &amp;gt;&lt;br /&gt;&amp;lt; SURNAME                        , 40, 44 &amp;gt;&lt;br /&gt;6 rows found.&lt;br /&gt;Command&amp;gt; select sum(COLLEN)    SUM_COL_LEN,&lt;br /&gt;       &amp;gt;        sum(INLINELEN) SUM_INLINE_LEN&lt;br /&gt;       &amp;gt;   from SYS.COLUMNS&lt;br /&gt;       &amp;gt;  where id = ( select TBLID&lt;br /&gt;       &amp;gt;                  from sys.tables&lt;br /&gt;       &amp;gt;                 where tblname = :TABNAME);&lt;br /&gt;&amp;lt; 171, 183 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; select tblname, LENGTH from sys.tables where tblname = :TABNAME;&lt;br /&gt;&amp;lt; EMP                            , 192 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The data dictionary contains information about the EMP table. The SYS.COLUMN table contains columns information including data types, length of the column (SYS.COLUMN.COLLEN) and how many bytes a given column contributes to the inline width of a row (SYS.COLUMN.INLINELEN). Additionally, the SYS.TABLES table contains the length of inline portion of each row (SYS.TABLES.LENGTH). Now, let’s insert a row into the table:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; insert into emp values (1,sysdate,'gena', 'gena', 'gena', 1);&lt;br /&gt;1 row inserted.&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('emp');&lt;br /&gt;Command&amp;gt; tablesize emp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.EMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   52080&lt;br /&gt;  NUM_USED_ROWS:        1&lt;br /&gt;  NUM_FREE_ROWS:        255&lt;br /&gt;  AVG_ROW_LEN:          206&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       784&lt;br /&gt;  TOTAL_BYTES:          52864&lt;br /&gt;  LAST_UPDATED:         2012-01-19 19:37:54.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Let's analyze what we've got. First of all, the INLINE page was allocated for storing 256 rows and you've got information about already stored rows and about free rows (NUM_USED_ROWS = 1 and NUM_FREE_ROWS = 255). In this example all data are storing inside INLINE page that is why OUT_OF_LINE_BYTES = 0. Additionally we see the average row length (AVG_ROW_LEN = 206) and the total table size (TOTAL_BYTES = 52864).&lt;br /&gt;&lt;br /&gt;Let's insert 255 rows into EMP table.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; begin&lt;br /&gt;       &amp;gt;   for i in 2 .. 256 loop&lt;br /&gt;       &amp;gt;     insert into emp &lt;br /&gt;       &amp;gt;          values (i,&lt;br /&gt;       &amp;gt;                  sysdate,&lt;br /&gt;       &amp;gt;                  '1234567890123456789012345678901234567890',  &lt;br /&gt;       &amp;gt;                  '1234567890123456789012345678901234567890',  &lt;br /&gt;       &amp;gt;                  '1234567890123456789012345678901234567890', &lt;br /&gt;       &amp;gt;                  i);&lt;br /&gt;       &amp;gt;   end loop;&lt;br /&gt;       &amp;gt; end;&lt;br /&gt;       &amp;gt; /&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('emp');&lt;br /&gt;Command&amp;gt; tablesize emp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.EMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   52080&lt;br /&gt;  NUM_USED_ROWS:        256&lt;br /&gt;  NUM_FREE_ROWS:        0&lt;br /&gt;  AVG_ROW_LEN:          206&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       784&lt;br /&gt;  TOTAL_BYTES:          52864&lt;br /&gt;  LAST_UPDATED:         2012-01-24 15:49:40.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Nothing changes except NUM_USED_ROWS and NUM_FREE_ROWS parameters. Let's insert one more row.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; insert into emp values (257,sysdate,'gena', 'gena', 'gena', 1);&lt;br /&gt;1 row inserted.&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('emp');&lt;br /&gt;Command&amp;gt; tablesize emp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.EMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   104160&lt;br /&gt;  NUM_USED_ROWS:        257&lt;br /&gt;  NUM_FREE_ROWS:        255&lt;br /&gt;  AVG_ROW_LEN:          204&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       784&lt;br /&gt;  TOTAL_BYTES:          104944&lt;br /&gt;  LAST_UPDATED:         2012-01-24 15:50:29.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;One more INLINE page was allocated for storing next 256 rows. Size the same (52080*2=104160). Metadata have the same size (784). But average row size was decrease till 204 bytes. What will happen if I delete the last row?&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; delete from emp where id=257;&lt;br /&gt;1 row deleted.&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('emp');&lt;br /&gt;Command&amp;gt; tablesize emp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.EMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   52080&lt;br /&gt;  NUM_USED_ROWS:        256&lt;br /&gt;  NUM_FREE_ROWS:        0&lt;br /&gt;  AVG_ROW_LEN:          206&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       784&lt;br /&gt;  TOTAL_BYTES:          52864&lt;br /&gt;  LAST_UPDATED:         2012-01-24 18:00:57.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I deleted the single row in the new block that is why the block was deallocated. What If i deleted a row from first block?&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; insert into emp values (257,sysdate,'gena', 'gena', 'gena', 1);&lt;br /&gt;1 row inserted.&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('emp');&lt;br /&gt;Command&amp;gt; tablesize emp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.EMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   104160&lt;br /&gt;  NUM_USED_ROWS:        257&lt;br /&gt;  NUM_FREE_ROWS:        255&lt;br /&gt;  AVG_ROW_LEN:          204&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       784&lt;br /&gt;  TOTAL_BYTES:          104944&lt;br /&gt;  LAST_UPDATED:         2012-01-24 18:07:47.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt; delete from emp where id=1;&lt;br /&gt;1 row deleted.&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('emp');&lt;br /&gt;Command&amp;gt; tablesize emp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.EMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   104160&lt;br /&gt;  NUM_USED_ROWS:        256&lt;br /&gt;  NUM_FREE_ROWS:        256&lt;br /&gt;  AVG_ROW_LEN:          204&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       784&lt;br /&gt;  TOTAL_BYTES:          104944&lt;br /&gt;  LAST_UPDATED:         2012-01-24 18:08:02.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The INLINE_ALLOC_BYTES value didn't change (104160) because I deleted the row from first block. Let's delete more rows from first block.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; delete from emp where id between 3 and 256;&lt;br /&gt;254 rows deleted.&lt;br /&gt;Command&amp;gt; call ttComputeTabSizes('emp');&lt;br /&gt;Command&amp;gt; tablesize emp;&lt;br /&gt;&lt;br /&gt;Sizes of GENA.EMP:&lt;br /&gt;&lt;br /&gt;  INLINE_ALLOC_BYTES:   104160&lt;br /&gt;  NUM_USED_ROWS:        2&lt;br /&gt;  NUM_FREE_ROWS:        510&lt;br /&gt;  AVG_ROW_LEN:          204&lt;br /&gt;  OUT_OF_LINE_BYTES:    0&lt;br /&gt;  METADATA_BYTES:       784&lt;br /&gt;  TOTAL_BYTES:          104944&lt;br /&gt;  LAST_UPDATED:         2012-01-24 18:17:42.000000&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;TimesTen allocated two pages (104160 bytes) for storing only two rows. Of course the next inserted rows will be inserted into free space in the first block for avoiding fragmentation but you should know about it. &lt;br /&gt;&lt;br /&gt;Conclusion&lt;br /&gt;&lt;br /&gt;A lot of new features were introduced in new TimesTen version. One of them it is possibility to know the actual table size and this functionality is very easy for use I think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-8870982125791528612?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/8870982125791528612/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=8870982125791528612&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8870982125791528612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8870982125791528612'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2012/01/timesten-and-memory.html' title='TimesTen and Memory allocation'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-1276074483172209601</id><published>2012-01-12T22:28:00.043+04:00</published><updated>2012-01-14T00:05:48.362+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='11.2.2'/><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>TimesTen 11.2.2 is now available</title><content type='html'>TimesTen 11.2.2 is now available on&amp;nbsp;&lt;a href="http://www.oracle.com/technetwork/database/timesten/downloads/index.html"&gt;OTN&lt;/a&gt; site. I was looking forward this release because a lot of new functionality was introduced in 11.2.2. I am particularly interested in the functionality which is related to Exalytics (TimesTen columnar compression, full LOB support, and etc.). There is not enough information about Exalitycs and there is only one man who has access to Exalytics outside of Oracle. That is&amp;nbsp;&lt;a href="http://www.rittmanmead.com/about/our-team/"&gt;Mark Rittman&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Let's start. The most important&amp;nbsp; new functionality is as follows:&lt;br /&gt;&lt;br /&gt;1. &lt;u&gt;In-memory columnar compression of table&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Actually, I can write nothing about it, because I don't know how it works :(, but I am going to find out and write about it ASAP.&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp; &lt;u&gt;A global query (a query executed on multiple members of an Oracle  In-Memory Database Cache grid) can reference more than one table. &lt;/u&gt;&lt;br /&gt;&lt;br /&gt;I've already written&amp;nbsp;&lt;a href="http://ggsig.blogspot.com/2011/04/in-memory-database-cache-grid.html"&gt;here&lt;/a&gt; about Cache Grid and about impossibility to read the same data through different nodes. Additionally there were some restrictions for SQL (only one table can be used in SQL statement). In 11.2.2 this restriction was deleted.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;3. &lt;u&gt;The ability to determine the current space usage of a table using the &lt;code&gt;ttComputeTabSizes&lt;/code&gt; built-in procedure&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;A lot of customers ask: "&lt;span class="jive-subject"&gt;How to get the actual size of a table in Timesten&lt;/span&gt;" (&lt;a href="https://forums.oracle.com/forums/thread.jspa?messageID=9194062&amp;amp;#9194062"&gt;link&lt;/a&gt;). Now they have a tip for that :)&lt;br /&gt;&lt;br /&gt;4. &lt;u&gt;You can configure parallel propagation of changes in AWT cache tables to the corresponding Oracle tables.&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;One more replication feature was introduced. This functionality should increase a speed for propagation of changes to Oracle database. One partner has asked me about this functionality. I hope he is very happy now :)&lt;br /&gt;&lt;br /&gt;5. &lt;u&gt;Analytic functions&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;I think this is the most important feature that was introduced in this realise. When I worked in Oracle CIS, &lt;a href="http://www.oraclebi.ru/"&gt;Andrey Pivovarov&lt;/a&gt; asked me to deliver presentation and demo about using TimesTen as a source for Oracle BI (11.1.05) on &lt;a href="http://www.oraclebi.ru/2011/06/20/ttolap/"&gt;this event&lt;/a&gt;. I got a lot of questions about support analytic functions inside TimesTen from audience. Now as you can see, analytic functions are supporting in TimesTen.&lt;br /&gt;&lt;br /&gt;6. &lt;u&gt;Implicit data typed conversion &lt;/u&gt;&lt;br /&gt;&lt;br /&gt;It can help developers because they can avoid error 2963 "Inconsistent datatypes" (&lt;a href="https://forums.oracle.com/forums/thread.jspa?messageID=9732842&amp;amp;#9732842"&gt;example&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;&lt;u&gt;Resume&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;In my opinion, a lot of essential features were introduced in the new TimesTen release and I will update you about each of them in details very soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-1276074483172209601?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/1276074483172209601/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=1276074483172209601&amp;isPopup=true' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/1276074483172209601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/1276074483172209601'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2012/01/timesten-1122-is-now-available.html' title='TimesTen 11.2.2 is now available'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-4832047201818478089</id><published>2011-12-31T15:34:00.001+04:00</published><updated>2011-12-31T15:37:48.469+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NY'/><title type='text'>Happy New Year!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-nUCQLdCpYnU/Tv7zF5EAUoI/AAAAAAAAAG4/EoKnm8jFyiQ/s1600/DPP_0449.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-nUCQLdCpYnU/Tv7zF5EAUoI/AAAAAAAAAG4/EoKnm8jFyiQ/s320/DPP_0449.JPG" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;Dear friends,&lt;br /&gt;&lt;br /&gt;2012 year is coming and I think it is the best time for summarizing the year's result. Well, lets start. In this year I've written 8 technical articles and some of them was published by OTN. I've left Oracle CIS, so I am not Oracle Employee anymore :( I was nominated to Oracle ACE and I'm very proud of this nomination. I've recently relocated in London, UK.So, I think that 2011 year was not so bad for me.&lt;br /&gt;&lt;br /&gt;I have some resolutions on next 2012 year:&lt;br /&gt;- I have to find a job&lt;br /&gt;- I have to write at least 12 technical articles (some of them in English of course).&lt;br /&gt;- Participate at some Events.&lt;br /&gt;&lt;br /&gt;But I forgot about people how is reading this blog. Friends, I want to wish you all the best in the New Year.&lt;br /&gt;Happy New Year!!!&lt;br /&gt;&lt;br /&gt;Best regards,&lt;br /&gt;Gena&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-4832047201818478089?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/4832047201818478089/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=4832047201818478089&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4832047201818478089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4832047201818478089'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/12/happy-new-year.html' title='Happy New Year!'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-nUCQLdCpYnU/Tv7zF5EAUoI/AAAAAAAAAG4/EoKnm8jFyiQ/s72-c/DPP_0449.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-1519474694450821280</id><published>2011-12-15T00:23:00.000+04:00</published><updated>2011-12-15T00:23:43.716+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>Official TimesTen blog</title><content type='html'>I've found very interesting message from &lt;a href="https://forums.oracle.com/forums/profile.jspa?userID=474025"&gt;Chris Jenkins&lt;/a&gt; on &lt;a href="https://forums.oracle.com/forums/forum.jspa?forumID=244&amp;amp;start=0"&gt;TimesTen forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;"One of my colleagues here at Oracle has started a TimesTen blog. He is  one of the architects in the development team and has been working on  TimesTen even longer than I have (around 15 years now I believe). I  recommend anyone interested in TimesTen to pay it a visit. If anyone has  requests for articles on specific topics, please let us know.&lt;br /&gt;&lt;br /&gt;The blog can be found here:   &lt;a class="jive-link-external" href="http://blogs.oracle.com/timesten/"&gt;http://blogs.oracle.com/timesten/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Chris"&lt;br /&gt;&lt;br /&gt;Actually it is a great news. Sam works in TimesTen development team at Oracle. I know it because he helped me sometimes with my "tricky questions". Now, Sam Drake has official TimesTen blog and I advice you visit it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-1519474694450821280?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/1519474694450821280/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=1519474694450821280&amp;isPopup=true' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/1519474694450821280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/1519474694450821280'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/12/official-timesten-blog.html' title='Official TimesTen blog'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-7403230601059901165</id><published>2011-10-06T13:03:00.000+04:00</published><updated>2011-10-06T13:03:01.639+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>TimesTen video (High Load conference)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/Rfxd3LSc9U0/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Rfxd3LSc9U0?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/Rfxd3LSc9U0?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Решил выложить видео с конференции High Load, на которой я и Игорь Мельников выступали два раза. На данной презентации я рассказываю о TimesTen, а Игорь показываем Демо. Демо было настолько внушительным, что монитор не выдержал :))), но думаю мы сумели выкрутиться из положения.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;PS. Скучаю по работе.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-7403230601059901165?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/7403230601059901165/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=7403230601059901165&amp;isPopup=true' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7403230601059901165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7403230601059901165'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/10/timesten-video-high-load-conference.html' title='TimesTen video (High Load conference)'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-2582092621914511740</id><published>2011-10-03T18:24:00.001+04:00</published><updated>2011-10-05T13:16:02.674+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Exalytics'/><category scheme='http://www.blogger.com/atom/ns#' term='OOW'/><title type='text'>OOW 2011. Exalytics</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-FITr6v6omcs/TonFWd0YP2I/AAAAAAAAAGw/qdH7qPZyQL8/s1600/im07t1-bimachine-1-488395.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-FITr6v6omcs/TonFWd0YP2I/AAAAAAAAAGw/qdH7qPZyQL8/s1600/im07t1-bimachine-1-488395.png" /&gt;&lt;/a&gt;&lt;/div&gt;На ежегодной конференции Oracle Open World, был анонсирован Exalytics (Oracle Exalytics Business Intelligence Machine) - программно аппаратный комплекс предназначенный для аналитики. Подробную информацию можно посмотреть &lt;a href="http://www.oracle.com/us/products/database/exadata-database-machine/exalytics-introduction-497958.pdf"&gt;здесь&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Я очень ждал данного анонса, т.к. составной частью данного комплекса является TimesTen. На прошедшем &lt;a href="http://www.oraclebi.ru/2011/06/20/ttolap/"&gt;мероприятии&lt;/a&gt;, посвященном альтернативным источникам данным для Oracle BI, я со своими коллегами показывал, как именно можно использовать TimesTen для бизнес аналитики.&lt;br /&gt;Кроме того, в данном комплексе будет использоваться новая возможность TimesTen, а именно - columnar compression. В общем, очень интересно "потрогать" данный комплекс руками, особенно интересует In-Memory MOLAP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-2582092621914511740?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/2582092621914511740/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=2582092621914511740&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/2582092621914511740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/2582092621914511740'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/10/oow-2011-exalytics.html' title='OOW 2011. Exalytics'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-FITr6v6omcs/TonFWd0YP2I/AAAAAAAAAGw/qdH7qPZyQL8/s72-c/im07t1-bimachine-1-488395.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-6569061953197058869</id><published>2011-09-23T14:58:00.001+04:00</published><updated>2011-09-23T15:02:23.444+04:00</updated><title type='text'>My last day in Oracle CIS</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-dZgsVAn5C-k/TnxlNxy_XTI/AAAAAAAAAGs/8ibddVwgdXk/s1600/london_1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-dZgsVAn5C-k/TnxlNxy_XTI/AAAAAAAAAGs/8ibddVwgdXk/s320/london_1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Сегодня мой последний день в Oracle CIS.&lt;br /&gt;&lt;br /&gt;Я очень рад, что мне довелось работать с такими профессионалами, как&lt;br /&gt;Андрей Пивоваров, Игорь Мельников, Сергей Иванович Томин, Марк Ривкин, Андрей Забелин, Саша Рындин, Вадим Гусев, Дмитрий Севостьянов, Ольга Горчинская, в общем, я могу очень долго перечислять весь Российский PreSales департамент. Также, благодаря работе в Oracle, я познакомился с огромным количеством гуру (Женя Горбоконенко, Андрей Криушин, Дмитрий Безруков, Валерий Юринский, Harald van Breederode, Chris Jenkins, Tim Vincent и многими другими), отличными продавцами (Катя Кобер, Марина Тищенко, Алексей Лапиров и т.д.) и другими уникальными личностями в Российском представительстве Oracle и вообще в Oracle Community. Я получил неоценимый опыт и очень сожалею, что мне пришлось покинуть компанию.&lt;br /&gt;&lt;br /&gt;PS. Я переезжаю в Лондон и надеюсь найти там работу и продолжить то, чем я занимался в прекрасной компании Oracle&lt;br /&gt;&lt;br /&gt;PPS. Фото взято здесь (http://dreamvoyage.ru/blog/2007-11-03-100)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-6569061953197058869?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/6569061953197058869/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=6569061953197058869&amp;isPopup=true' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/6569061953197058869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/6569061953197058869'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/09/my-last-day-in-oracle-cis.html' title='My last day in Oracle CIS'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-dZgsVAn5C-k/TnxlNxy_XTI/AAAAAAAAAGs/8ibddVwgdXk/s72-c/london_1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-3478453614893410684</id><published>2011-09-16T13:29:00.001+04:00</published><updated>2011-12-22T23:32:26.082+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Certification'/><title type='text'>OFF: Oracle Database 10g: Real Application Clusters Administrator Certified Expert</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DETr8rytbqg/TnMVCxRSeHI/AAAAAAAAAGo/N1yrP9p8X8E/s1600/myStorage.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-DETr8rytbqg/TnMVCxRSeHI/AAAAAAAAAGo/N1yrP9p8X8E/s320/myStorage.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;На днях, сдал 1z0-048. Общие впечатления.&lt;br /&gt;Сам экзамен не очень сложный, учитывая даже то, что смысл некоторых вопросов я не понял :)). Вопросы про CRS показались гораздо легче чем по функционалу RAC, ну в общем, заветные 60% по каждой из секций я набрал.&lt;br /&gt;&lt;br /&gt;PS. На фото, почти high end storage, сделанный собственными руками. Собрал это чудо, как вы понимаете, мастер на все руки - &lt;a href="http://www.igormelnikov.com/"&gt;Игорь Мельников&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-3478453614893410684?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/3478453614893410684/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=3478453614893410684&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3478453614893410684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3478453614893410684'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/09/off-oracle-database-10g-real.html' title='OFF: Oracle Database 10g: Real Application Clusters Administrator Certified Expert'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-DETr8rytbqg/TnMVCxRSeHI/AAAAAAAAAGo/N1yrP9p8X8E/s72-c/myStorage.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-8553732137306386921</id><published>2011-09-06T15:21:00.000+04:00</published><updated>2011-09-06T15:21:55.413+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><category scheme='http://www.blogger.com/atom/ns#' term='PL/SQL'/><title type='text'>Перенос PL/SQL в TimesTen и ttSrcScan</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1xfUMti3XXY/TmYCNu7FfvI/AAAAAAAAAGg/Q_p_jfZ91VM/s1600/IMG_8524.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="240" width="320" src="http://4.bp.blogspot.com/-1xfUMti3XXY/TmYCNu7FfvI/AAAAAAAAAGg/Q_p_jfZ91VM/s320/IMG_8524.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;В версии 11g, TimesTen стал поддерживать PL/SQL, а точнее, движок PL/SQL Oracle Database 11g, был портирован в TimesTen, т.е., теперь, приложения, использующие PL/SQL могут работать и в TimesTen. Но, вы прекрасно понимаете, что TtimesTen не поддерживает ВСЕГО функционала Oracle Database, например нет триггеров, нельзя создавать типы (CREATE TYPE) и т.д. Кроме того, как показывает практика, приложения содержат огромное количество кода (сотни тысяч или миллионы строк) и анализ кода на проверку работоспособности в TimesTen может занять огромное количество времени, поэтому разработчики создали специальную утилиту (&lt;b&gt;ttSrcScan&lt;/b&gt;), которая должна автоматизировать данный процесс.&lt;br /&gt;&lt;br /&gt;Данная утилита доступна после установки TimesTen 11.2.1 в каталоге $TIMESTEN_HOME/quickstart/sample_util (правда нужно не забыть поставить quickstart), но если не хочется ставить лишнее программное обеспечение, то можно обратиться в Oracle и получить ее отдельно.&lt;br /&gt;&lt;br /&gt;Итак, данная утилита принимает на вход директории в которых содержатся файлы с кодом и анализирует их, после чего выдает отчеты (HTML и текстовый) об обнаруженных ошибках. Очень удобная утилита, но, конечно существует ряд нюансов. &lt;br /&gt;Например, попробуем создать пакет.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;create or replace package test_1 as&lt;br /&gt;&lt;br /&gt;  procedure p_test;&lt;br /&gt;&lt;br /&gt;end test_1;&lt;br /&gt;/&lt;br /&gt;create or replace package body test_1 as&lt;br /&gt;&lt;br /&gt;  procedure p_test&lt;br /&gt;  is&lt;br /&gt;     v_rec number (10);  &lt;br /&gt;  begin&lt;br /&gt;    for v_rec in ( select level from dual connect by level &amp;lt;=10 ) loop&lt;br /&gt;      dbms_output.put_line ('1');&lt;br /&gt;    end loop;&lt;br /&gt;  end p_test;   &lt;br /&gt;end test_1;&lt;br /&gt;/&lt;br /&gt;&lt;/pre&gt;Т.е. я явно указываю SQL конструкцию, которую TimesTen не поддерживает.  &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; select level from dual connect by level &amp;lt;=10;&lt;br /&gt; 1001: Syntax error in SQL statement before or at: "by", character position: 32&lt;br /&gt;select level from dual connect by level &amp;lt;=10&lt;br /&gt;                               ^^&lt;br /&gt;The command failed.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;Проверим данный пакет с помощью ttSrcScan. &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 ~]$ cd /u01/app/oracle/product/11.2.1.8/TimesTen/tt2/quickstart/sample_util/&lt;br /&gt;[oracle@tt1 sample_util]$ ./ttSrcScan -i /home/oracle/source -o /home/oracle/result&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  ***************************************&lt;br /&gt;  * Oracle TimesTen Source Code Scanner *&lt;br /&gt;  ***************************************&lt;br /&gt;&lt;br /&gt;  Options used:&lt;br /&gt;  =============&lt;br /&gt;  -input           = /home/oracle/source&lt;br /&gt;  -output          = /home/oracle/result&lt;br /&gt;  -nestedDir       = TRUE&lt;br /&gt;  -version         = 11.2.1.8.0&lt;br /&gt;  -summaryPrefix   = ttSrcScan&lt;br /&gt;  -maxRows         = 15&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Summary Statistics:&lt;br /&gt;  ===================&lt;br /&gt;&lt;br /&gt;  Files Processed:&lt;br /&gt;  Input files and sub-directories processed :         1&lt;br /&gt;  Sub-directories processed                 :         0&lt;br /&gt;  Unsupported file types                    :         0&lt;br /&gt;  Files Scanned                             :         1&lt;br /&gt;&lt;br /&gt;  Files Scanned:&lt;br /&gt;  Scanned files with no source code issues  :         1&lt;br /&gt;  Scanned files with source code issues     :         0&lt;br /&gt;&lt;br /&gt;  Lines Of Code Scanned:&lt;br /&gt;  Lines of code                             :        19&lt;br /&gt;  Lines of code with issues                 :         0&lt;br /&gt;  Percentage of lines of code with issues   :         0.00%&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Detail Statistics:&lt;br /&gt;  ==================&lt;br /&gt;  Summary Report           /home/oracle/result/ttSrcScan_summary.html&lt;br /&gt;  Files Processed Report   /home/oracle/result/ttSrcScan_all_input_files.html&lt;br /&gt;  Files With Issues Report /home/oracle/result/ttSrcScan_issue_files.html&lt;br /&gt;  Log File                 /home/oracle/result/ttSrcScan_log_file.log&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[oracle@tt1 sample_util]$&lt;br /&gt;&lt;/pre&gt;Следовательно, ошибок нет. Скомпилируем данный пакет в TimesTen.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&gt; create or replace package test_1 as&lt;br /&gt;       &gt;&lt;br /&gt;       &gt;   procedure p_test;&lt;br /&gt;       &gt;&lt;br /&gt;       &gt; end test_1;&lt;br /&gt;       &gt; /&lt;br /&gt;&lt;br /&gt;Package created.&lt;br /&gt;&lt;br /&gt;Command&gt; create or replace package body test_1 as&lt;br /&gt;       &gt;&lt;br /&gt;       &gt;   procedure p_test&lt;br /&gt;       &gt;   is&lt;br /&gt;       &gt;      v_rec number (10);&lt;br /&gt;       &gt;   begin&lt;br /&gt;       &gt;     for v_rec in ( select level from dual connect by level &lt;=10 ) loop&lt;br /&gt;       &gt;       dbms_output.put_line ('1');&lt;br /&gt;       &gt;     end loop;&lt;br /&gt;       &gt;   end p_test;&lt;br /&gt;       &gt;&lt;br /&gt;       &gt; end test_1;&lt;br /&gt;       &gt; /&lt;br /&gt;&lt;br /&gt;Package body created.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Что удивительно, здесь также ошибок нет и только при выполнении получаем  &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; exec test_1.p_test;&lt;br /&gt; 1001: Syntax error in SQL statement before or at: "BY", character position: 32&lt;br /&gt;SELECT LEVEL FROM DUAL CONNECT BY LEVEL &amp;lt;=10&lt;br /&gt;                               ^^&lt;br /&gt; 8507: ORA-06512: at "ORACLE.TEST_1", line 7&lt;br /&gt; 8507: ORA-06512: at line 1&lt;br /&gt;The command failed.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;Следовательно, ошибки, связанные с неподдерживаемыми SQL операторами, получим только в runtime, это нужно учитывать.  Кроме того, TimesTen поддерживает работу с некоторыми системными пакетыми (UTL_FILE, DBMS_LOCK и др.), полный список можно посмотреть в документации. Но, содержание пакетов может быть разным.   Например:  &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; # TimesTen&lt;br /&gt;Command&amp;gt; desc dbms_lock&lt;br /&gt;       &amp;gt; ;&lt;br /&gt;&lt;br /&gt;Package SYS.DBMS_LOCK:&lt;br /&gt;&lt;br /&gt;  Procedure SLEEP:&lt;br /&gt;    Arguments:&lt;br /&gt;      SECONDS                         IN     NUMBER&lt;br /&gt;&lt;br /&gt;1 PL/SQL object found.&lt;br /&gt;&lt;/pre&gt;и Oracle Database.  &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; desc dbms_lock;&lt;br /&gt;&lt;br /&gt;PROCEDURE ALLOCATE_UNIQUE&lt;br /&gt;&lt;br /&gt;FUNCTION CONVERT RETURNS NUMBER(38)&lt;br /&gt;&lt;br /&gt;FUNCTION CONVERT RETURNS NUMBER(38)&lt;br /&gt;&lt;br /&gt;FUNCTION RELEASE RETURNS NUMBER(38)&lt;br /&gt;&lt;br /&gt;FUNCTION RELEASE RETURNS NUMBER(38)&lt;br /&gt;&lt;br /&gt;FUNCTION REQUEST RETURNS NUMBER(38)&lt;br /&gt;&lt;br /&gt;FUNCTION REQUEST RETURNS NUMBER(38)&lt;br /&gt;&lt;br /&gt;PROCEDURE SLEEP&lt;br /&gt; Argument Name                  Type                    In/Out Default?&lt;br /&gt; ------------------------------ ----------------------- ------ --------&lt;br /&gt; SECONDS                        NUMBER                  IN&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Поэтому, при анализе кода, ttSrcScan добавляет строки содержащие системные пакеты, как "потенциально ошибочные".  Например, проанализируем данный код:  &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;create or replace package test_1 as&lt;br /&gt;&lt;br /&gt;  procedure p_test;&lt;br /&gt;&lt;br /&gt;end test_1;&lt;br /&gt;/&lt;br /&gt;create or replace package body test_1 as&lt;br /&gt;&lt;br /&gt;  procedure p_test&lt;br /&gt;  is&lt;br /&gt;  begin&lt;br /&gt;    dbms_lock.sleep(10);&lt;br /&gt;  end p_test;&lt;br /&gt;&lt;br /&gt;end test_1;&lt;br /&gt;/&lt;br /&gt;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 sample_util]$ ./ttSrcScan -i /home/oracle/source -o /home/oracle/result&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  ***************************************&lt;br /&gt;  * Oracle TimesTen Source Code Scanner *&lt;br /&gt;  ***************************************&lt;br /&gt;&lt;br /&gt;  Options used:&lt;br /&gt;  =============&lt;br /&gt;  -input           = /home/oracle/source&lt;br /&gt;  -output          = /home/oracle/result&lt;br /&gt;  -nestedDir       = TRUE&lt;br /&gt;  -version         = 11.2.1.8.0&lt;br /&gt;  -summaryPrefix   = ttSrcScan&lt;br /&gt;  -maxRows         = 15&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Summary Statistics:&lt;br /&gt;  ===================&lt;br /&gt;&lt;br /&gt;  Files Processed:&lt;br /&gt;  Input files and sub-directories processed :         1&lt;br /&gt;  Sub-directories processed                 :         0&lt;br /&gt;  Unsupported file types                    :         0&lt;br /&gt;  Files Scanned                             :         1&lt;br /&gt;&lt;br /&gt;  Files Scanned:&lt;br /&gt;  Scanned files with no source code issues  :         0&lt;br /&gt;  Scanned files with source code issues     :         1&lt;br /&gt;&lt;br /&gt;  Lines Of Code Scanned:&lt;br /&gt;  Lines of code                             :        16&lt;br /&gt;  Lines of code with issues                 :         1&lt;br /&gt;  Percentage of lines of code with issues   :         6.25%&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  Detail Statistics:&lt;br /&gt;  ==================&lt;br /&gt;  Summary Report           /home/oracle/result/ttSrcScan_summary.html&lt;br /&gt;  Files Processed Report   /home/oracle/result/ttSrcScan_all_input_files.html&lt;br /&gt;  Files With Issues Report /home/oracle/result/ttSrcScan_issue_files.html&lt;br /&gt;  Log File                 /home/oracle/result/ttSrcScan_log_file.log&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[oracle@tt1 sample_util]$&amp;nbsp;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;&amp;nbsp;&lt;/pre&gt;А в файле test.sql__source_issues.html видим.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-GlvtGTOC7Vk/TmX-ewAbJCI/AAAAAAAAAGY/w3gld1sDJeE/s1600/2.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://2.bp.blogspot.com/-GlvtGTOC7Vk/TmX-ewAbJCI/AAAAAAAAAGY/w3gld1sDJeE/s320/2.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Собственно, нужно также быть очень осторожным при переносе системных пакетов.&lt;br /&gt;&lt;br /&gt;Конечно, данная утилита имеет свои ограничения, но все же она позволяет очень быстро проверить основные конструкции кода.&amp;nbsp;&lt;a href="http://ggsig.blogspot.com/2011/03/russian-exadata-man.html"&gt;Игорь Мельников&lt;/a&gt; обещал написать (если будет время конечно :) ) свою утилиту ttChecker, аналогичную &lt;a href="http://dsvolk.blogspot.com/2008/09/racchecker.html"&gt;RacChecker&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-8553732137306386921?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/8553732137306386921/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=8553732137306386921&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8553732137306386921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8553732137306386921'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/09/plsql-timesten-ttsrcscan.html' title='Перенос PL/SQL в TimesTen и ttSrcScan'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-1xfUMti3XXY/TmYCNu7FfvI/AAAAAAAAAGg/Q_p_jfZ91VM/s72-c/IMG_8524.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-7852103668121805438</id><published>2011-09-05T14:03:00.002+04:00</published><updated>2011-12-22T23:35:20.155+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Семинар для партнеров по TimesTen</title><content type='html'>12 сентября, то есть уже в ближайший понедельник, в офисе Oracle состоится семинар для партнеров. Основная тема – Oracle TimesTen и In-Memory Database Cache. Вести семинар буду я :), так что welcome.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;За дополнительной информацией по семинару, просьба обращаться в  Представительство корпорации Oracle к &lt;b&gt;Елизавете Матвеевой&lt;/b&gt; по  тел. +7 (495) 795 2276 или по электронной почте: &lt;a href="mailto:elizaveta.x.matveeva@oracle.com"&gt;elizaveta.x.matveeva@oracle.com&lt;/a&gt;   &lt;/li&gt;&lt;li&gt;По вопросам регистрации, просьба обращаться в Представительство корпорации  Oracle к &lt;b&gt;Валерии Хоменковой&lt;/b&gt; по тел. &lt;b&gt;+7 (495) 641  1569&lt;/b&gt; или по электронной почте: &lt;a href="http://valeria%2Ekhomenkova@oracle.com/"&gt;valeria.khomenkova@oracle.com&lt;/a&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-7852103668121805438?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/7852103668121805438/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=7852103668121805438&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7852103668121805438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7852103668121805438'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/09/timesten.html' title='Семинар для партнеров по TimesTen'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-6750132074735445338</id><published>2011-08-29T18:44:00.002+04:00</published><updated>2012-01-12T22:32:30.596+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EM'/><category scheme='http://www.blogger.com/atom/ns#' term='11G'/><title type='text'>Установка Enterprise Manager  Grid Control 11G</title><content type='html'>Решил я на днях установить EM GC 11g. Скачав дисрибутив EM GC 11g с OTN, я начал установку. Устанавливать буду как всегда на хост OVM. В качестве гостевой ОС - OEL 5.5 x86.&lt;br /&gt;&lt;br /&gt;Начнем с prerequisites, благо Hardware и Operating System Requirements соблюдены.&amp;nbsp; &lt;br /&gt;Теперь проверим Package Requirements.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@em ~]# rpm -qa | grep rng-utils&lt;br /&gt;rng-utils-2.0-1.14.1.fc6&lt;br /&gt;[root@em ~]# rpm -qa | grep make-3.81&lt;br /&gt;make-3.81-3.el5&lt;br /&gt;[root@em ~]# rpm -qa | grep binutils-2.17.50.0.6&lt;br /&gt;binutils-2.17.50.0.6-14.el5&lt;br /&gt;[root@em ~]# rpm -qa | grep libaio-0.3.106&lt;br /&gt;libaio-0.3.106-5&lt;br /&gt;[root@em ~]# rpm -qa | grep glibc-common&lt;br /&gt;glibc-common-2.5-49&lt;br /&gt;[root@em ~]# rpm -qa | grep gcc-4&lt;br /&gt;libgcc-4.1.2-48.el5&lt;br /&gt;gcc-4.1.2-48.el5&lt;br /&gt;[root@em ~]# rpm -qa | grep compat-libstdc&lt;br /&gt;compat-libstdc++-33-3.2.3-61&lt;br /&gt;compat-libstdc++-296-2.96-138&lt;br /&gt;[root@em ~]# rpm -qa | grep libstdc&lt;br /&gt;compat-libstdc++-33-3.2.3-61&lt;br /&gt;libstdc++-devel-4.1.2-48.el5&lt;br /&gt;compat-libstdc++-296-2.96-138&lt;br /&gt;libstdc++-4.1.2-48.el5&lt;br /&gt;[root@em ~]# rpm -qa | grep libstdc++-devel&lt;br /&gt;libstdc++-devel-4.1.2-48.el5&lt;br /&gt;[root@em ~]# rpm -qa | grep setarch&lt;br /&gt;setarch-2.0-1.1&lt;br /&gt;[root@em ~]# rpm -qa | grep sysstat&lt;br /&gt;sysstat-7.0.2-3.el5&lt;br /&gt;[root@em ~]# rpm -qa | grep compat-db&lt;br /&gt;compat-db-4.2.52-5.1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видно, все необходимые пакеты установлены. Далее проверим Operating System Groups and Users Requirements.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@em ~]$ id&lt;br /&gt;uid=500(oracle) gid=501(oinstall) groups=500(dba),501(oinstall),502(oper)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее, проверим Unique Host Name and Static IP Address Requirements. &lt;br /&gt;Главное использовать статический IP адресс, иначе, установить софт не получится.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@em ~]# ifconfig&lt;br /&gt;eth0      Link encap:Ethernet  HWaddr 00:16:3E:48:36:E1&lt;br /&gt;          inet addr:192.168.2.100  Bcast:192.168.2.255  Mask:255.255.255.0&lt;br /&gt;          inet6 addr: fe80::216:3eff:fe48:36e1/64 Scope:Link&lt;br /&gt;          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1&lt;br /&gt;          RX packets:579 errors:0 dropped:0 overruns:0 frame:0&lt;br /&gt;          TX packets:103 errors:0 dropped:0 overruns:0 carrier:0&lt;br /&gt;          collisions:0 txqueuelen:1000&lt;br /&gt;          RX bytes:49210 (48.0 KiB)  TX bytes:14149 (13.8 KiB)&lt;br /&gt;...&lt;br /&gt;[root@em ~]# hostname&lt;br /&gt;em&lt;br /&gt;[root@em ~]# ping em&lt;br /&gt;PING em.us.oracle.com (192.168.2.100) 56(84) bytes of data.&lt;br /&gt;64 bytes from em.us.oracle.com (192.168.2.100): icmp_seq=1 ttl=64 time=0.017 ms&lt;br /&gt;64 bytes from em.us.oracle.com (192.168.2.100): icmp_seq=2 ttl=64 time=0.009 ms&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее, UMASK Value и File Descriptor Requirements. Добавляем в .bash_profile строку с umask 022.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@em ~]$ /bin/sh -c "ulimit -n"&lt;br /&gt;131072&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее, JDK Requirements. Я использую OEL х86, поэтому отдельно устанавливать JDK не нужно (дистрибутив WLS содержит JDK). Но если вы планируете устанавливать на другие ОС, то нужно иметь в виду, что может потребоваться поставить отдельно JDK.&lt;br /&gt;&lt;br /&gt;На этом проверка хоста закончена. Теперь приступим к установке Oracle WebLogic Server.&lt;br /&gt;&lt;br /&gt;Установка OWLS хорошо описана в note 1063762.1. &lt;br /&gt;Скачиваем дистрибутив WLS 10.3.2. и запускаем установку.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@em ~]$ chmod a+x wls1032_linux32.bin&lt;br /&gt;[oracle@em ~]$ ls -l&lt;br /&gt;total 4713056&lt;br /&gt;-rw-r--r-- 1 oracle oinstall 1346829079 Aug 15 08:08 GridControl_11.1.0.1.0_Linux_1of3.zip&lt;br /&gt;-rw-r--r-- 1 oracle oinstall 1504566656 Aug 16 15:12 GridControl_11.1.0.1.0_Linux_2of3.zip&lt;br /&gt;-rw-r--r-- 1 oracle oinstall 1336577721 Aug 16 15:08 GridControl_11.1.0.1.0_Linux_3of3.zip&lt;br /&gt;-rwxr-xr-x 1 oracle oinstall  633454825 Aug 18 09:12 wls1032_linux32.bin&lt;br /&gt;[oracle@em ~]$ ./wls1032_linux32.bin&lt;br /&gt;Extracting 0%....................................................................................................100%&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ВАЖНО. Перед установкой убедитесь, что у вас правильно прописан /etc/hosts. А именно, нет задвоений записей и шаблон следующий:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;127.0.0.1 localhost.localdomain localhost&amp;nbsp;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;&amp;lt;ip address&amp;gt; &amp;lt;fqdn&amp;gt; &amp;lt;short name&amp;gt; &lt;/pre&gt;В противном случае - BUG 11821959, решение в note 1302190.1.&lt;br /&gt;&lt;br /&gt;Мой /etc/hosts&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@em ~]# cat /etc/hosts&lt;br /&gt;127.0.0.1 localhost.localdomain localhost&lt;br /&gt;192.168.2.100 em.us.oracle.com em&lt;br /&gt;[root@em ~]#&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Вернемся к установке.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-o2gYw5VLJno/TltMfTnL93I/AAAAAAAAADQ/rjmSzlIgC-4/s1600/1.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://2.bp.blogspot.com/-o2gYw5VLJno/TltMfTnL93I/AAAAAAAAADQ/rjmSzlIgC-4/s320/1.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Нажимаем next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-M306XapvM3A/TltNHWi3DSI/AAAAAAAAADY/J807-860rBM/s1600/2.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://2.bp.blogspot.com/-M306XapvM3A/TltNHWi3DSI/AAAAAAAAADY/J807-860rBM/s320/2.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Выбираем Middleware хоум и нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ddr-3AqHFlM/TltO3CR6l4I/AAAAAAAAADw/mnA3X6dmQCg/s1600/3.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://4.bp.blogspot.com/-ddr-3AqHFlM/TltO3CR6l4I/AAAAAAAAADw/mnA3X6dmQCg/s320/3.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Вводим имя пользователя и пароль для доступа на support.oracle.com. Или отказываемся от этого (в моем случае).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fWGEQ1vAmzA/TltPVAshp8I/AAAAAAAAAD4/16NW1xoa2jw/s1600/4.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://3.bp.blogspot.com/-fWGEQ1vAmzA/TltPVAshp8I/AAAAAAAAAD4/16NW1xoa2jw/s320/4.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Обязательно нужно выбрать Typical и опять next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ubUayl1WHks/TltNjDt14OI/AAAAAAAAADg/liFCQ0mumB4/s1600/3.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://3.bp.blogspot.com/-ubUayl1WHks/TltNjDt14OI/AAAAAAAAADg/liFCQ0mumB4/s320/3.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Выбираем WLS хоум и нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ECt9HetWnjo/TltOCb5ARgI/AAAAAAAAADo/BO4N4c0PJyo/s1600/4.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://3.bp.blogspot.com/-ECt9HetWnjo/TltOCb5ARgI/AAAAAAAAADo/BO4N4c0PJyo/s320/4.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-C_6Ra8YbdJc/TltQdBizPNI/AAAAAAAAAEA/unI-YZfOifw/s1600/7.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" src="http://1.bp.blogspot.com/-C_6Ra8YbdJc/TltQdBizPNI/AAAAAAAAAEA/unI-YZfOifw/s320/7.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Процесс установки.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3YZJEUW5QCo/TltQlzpxLVI/AAAAAAAAAEI/Y5X3K4q1NhQ/s1600/8.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="235" src="http://2.bp.blogspot.com/-3YZJEUW5QCo/TltQlzpxLVI/AAAAAAAAAEI/Y5X3K4q1NhQ/s320/8.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Установка WLS закончена.&lt;br /&gt;&lt;br /&gt;Далее необходимо установить патч на WLS (note 1072763.1). Скачиваем Patch WDJ7. Копируем его в middleware_home/utils/bsu/cache_dir и устанавливаем его с помощью bsu.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@em cache_dir]$ unzip WDJ7.zip&lt;br /&gt;Archive:  WDJ7.zip&lt;br /&gt;  inflating: 4D53.jar&lt;br /&gt;  inflating: NIXN.jar&lt;br /&gt;  inflating: patch-catalog.xml&lt;br /&gt;  inflating: prod-info.xml&lt;br /&gt;  inflating: WDJ7.jar&lt;br /&gt;  inflating: XLXA.jar&lt;br /&gt;[oracle@em cache_dir]$&lt;br /&gt;[oracle@em ~]$ cd /u01/app/oracle/product/middleware/utils/bsu/&lt;br /&gt;[oracle@em bsu]$ ./bsu.sh&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-bW0DeXHVdBk/Tltmmuii5sI/AAAAAAAAAEQ/a-0acrilcrg/s1600/p1.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://2.bp.blogspot.com/-bW0DeXHVdBk/Tltmmuii5sI/AAAAAAAAAEQ/a-0acrilcrg/s320/p1.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Выбираем патч WDJ7 и нажимаем Apply.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-P9C5PdPl2xY/Tltm-F4sYPI/AAAAAAAAAEY/cvjYcEUjS2A/s1600/p2.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://2.bp.blogspot.com/-P9C5PdPl2xY/Tltm-F4sYPI/AAAAAAAAAEY/cvjYcEUjS2A/s320/p2.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;На этом установка патча закончена. Также, необходимо убедиться, что в middleware_home/registry.xml прописан правильное имя хоста.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@em middleware]$ cat registry.xml | grep host&amp;nbsp;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;&amp;nbsp;&amp;lt;host home="/u01/app/oracle/middleware" &lt;b&gt;name="em"&lt;/b&gt;&amp;gt;&lt;br /&gt; &amp;lt;/host&amp;gt;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@em middleware]$&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь установим Oracle Database. Я не буду детально описывать процесс установки, я лишь опишу ряд требований.&lt;br /&gt;&lt;br /&gt;1. Необходимо использование Partitioning&lt;br /&gt;2. Необходимо удалить пользователя SYSMAN.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@em ~]$ sqlplus / as sysdba&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.2.0.2.0 Production on Tue Aug 23 10:40:44 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2010, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; SELECT COUNT(*) FROM ALL_USERS WHERE USERNAME='SYSMAN';&lt;br /&gt;&lt;br /&gt;  COUNT(*)&lt;br /&gt;----------&lt;br /&gt;         1&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;  alter user sysman account unlock;&lt;br /&gt;&lt;br /&gt;User altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; alter user sysman identified by oracle;&lt;br /&gt;&lt;br /&gt;User altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; exit&lt;br /&gt;[oracle@em ~]$ lsnrctl start&lt;br /&gt;&lt;br /&gt;LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 23-AUG-2011 10:47:53&lt;br /&gt;&lt;br /&gt;Copyright (c) 1991, 2010, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...&lt;br /&gt;&lt;br /&gt;TNSLSNR for Linux: Version 11.2.0.2.0 - Production&lt;br /&gt;Log messages written to /u01/app/oracle/diag/tnslsnr/em/listener/alert/log.xml&lt;br /&gt;Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=em)(PORT=1521)))&lt;br /&gt;&lt;br /&gt;Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))&lt;br /&gt;STATUS of the LISTENER&lt;br /&gt;------------------------&lt;br /&gt;Alias                     LISTENER&lt;br /&gt;Version                   TNSLSNR for Linux: Version 11.2.0.2.0 - Production&lt;br /&gt;Start Date                23-AUG-2011 10:47:53&lt;br /&gt;Uptime                    0 days 0 hr. 0 min. 0 sec&lt;br /&gt;Trace Level               off&lt;br /&gt;Security                  ON: Local OS Authentication&lt;br /&gt;SNMP                      OFF&lt;br /&gt;Listener Log File         /u01/app/oracle/diag/tnslsnr/em/listener/alert/log.xml&lt;br /&gt;Listening Endpoints Summary...&lt;br /&gt;  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=em)(PORT=1521)))&lt;br /&gt;The listener supports no services&lt;br /&gt;The command completed successfully&lt;br /&gt;[oracle@em ~]$&lt;br /&gt;[oracle@em ~]$ $ORACLE_HOME/bin/emca -deconfig dbcontrol db -repos drop -SYS_PWD oracle -SYSMAN_PWD oracle&lt;br /&gt;&lt;br /&gt;STARTED EMCA at Aug 23, 2011 10:48:19 AM&lt;br /&gt;EM Configuration Assistant, Version 11.2.0.0.2 Production&lt;br /&gt;Copyright (c) 2003, 2005, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Enter the following information:&lt;br /&gt;Database SID: em&lt;br /&gt;Listener port number: 1521&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;WARNING : While repository is dropped the database will be put in quiesce mode.&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;Do you wish to continue? [yes(Y)/no(N)]: Y&lt;br /&gt;Aug 23, 2011 10:48:27 AM oracle.sysman.emcp.EMConfig perform&lt;br /&gt;INFO: This operation is being logged at /u01/app/oracle/cfgtoollogs/emca/em/emca_2011_08_23_10_48_19.log.&lt;br /&gt;Aug 23, 2011 10:48:28 AM oracle.sysman.emcp.EMDBPreConfig performDeconfiguration&lt;br /&gt;WARNING: EM is not configured for this database. No EM-specific actions can be performed. Some of the possible reasons may be:&lt;br /&gt; 1) EM is configured with different hostname then physical host. Set environment variable ORACLE_HOSTNAME=&lt;hostname&gt; and re-run EMCA script&lt;br /&gt; 2) ORACLE_HOSTNAME is set. Unset it and re-run EMCA script&lt;br /&gt;Aug 23, 2011 10:48:28 AM oracle.sysman.emcp.EMReposConfig invoke&lt;br /&gt;INFO: Dropping the EM repository (this may take a while) ...&lt;br /&gt;Aug 23, 2011 10:58:16 AM oracle.sysman.emcp.EMReposConfig invoke&lt;br /&gt;INFO: Repository successfully dropped&lt;br /&gt;Enterprise Manager configuration completed successfully&lt;br /&gt;FINISHED EMCA at Aug 23, 2011 10:58:16 AM&lt;br /&gt;[oracle@em ~]$&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; SELECT COUNT(*) FROM ALL_USERS WHERE USERNAME IN ('SYSMAN','SYSMAN_MDS');&lt;br /&gt;&lt;br /&gt;  COUNT(*)&lt;br /&gt;----------&lt;br /&gt;         0&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; SELECT FILE_NAME FROM DBA_DATA_FILES WHERE UPPER (TABLESPACE_NAME) LIKE 'MGMT%';&lt;br /&gt;&lt;br /&gt;no rows selected&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/hostname&gt;&lt;/pre&gt;&lt;br /&gt;3. Fine-Grained Access Control Requirements&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; select value from v$option where parameter = 'Fine-grained access control';&lt;br /&gt;&lt;br /&gt;VALUE&lt;br /&gt;----------------------------------------------------------------&lt;br /&gt;TRUE&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. UNDO Tablespace Size Requirements&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; alter database datafile '/u02/em/undotbs01.dbf' resize 200M;&lt;br /&gt;&lt;br /&gt;Database altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5. База данных должна быть в режиме Archivelog.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; select log_mode from v$database;&lt;br /&gt;&lt;br /&gt;LOG_MODE&lt;br /&gt;------------&lt;br /&gt;ARCHIVELOG&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;6. Инициализационные параметры&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; show parameter remote_login_passwordfile&lt;br /&gt;&lt;br /&gt;NAME                                 TYPE        VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;remote_login_passwordfile            string      EXCLUSIVE&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; show parameter statistics_level&lt;br /&gt;&lt;br /&gt;NAME                                 TYPE        VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;statistics_level                     string      TYPICAL&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; show parameter timed_statistics&lt;br /&gt;&lt;br /&gt;NAME                                 TYPE        VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;timed_statistics                     boolean     TRUE&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;SQL&amp;gt; show parameter undo_management&lt;br /&gt;&lt;br /&gt;NAME                                 TYPE        VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;undo_management                      string      AUTO&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;SQL&amp;gt; show parameter workarea_size_policy&lt;br /&gt;&lt;br /&gt;NAME                                 TYPE        VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;workarea_size_policy                 string      AUTO&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;SQL&amp;gt; show parameter db_block_size&lt;br /&gt;&lt;br /&gt;NAME                                 TYPE        VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;db_block_size                        integer     8192&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;SQL&amp;gt; show parameter job_queue_processes&lt;br /&gt;&lt;br /&gt;NAME                                 TYPE        VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;job_queue_processes                  integer     1000&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;SQL&amp;gt; alter system set session_cached_cursors=200 scope=spfile;&lt;br /&gt;&lt;br /&gt;System altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; alter system set processes=500 scope=spfile;&lt;br /&gt;&lt;br /&gt;System altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; alter system set log_buffer=10485760 scope=spfile;&lt;br /&gt;&lt;br /&gt;System altered.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; show parameter db_dom&lt;br /&gt;&lt;br /&gt;NAME                                 TYPE        VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;db_domain                            string      us.oracle.com&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; show parameter open_cursors&lt;br /&gt;&lt;br /&gt;NAME                                 TYPE        VALUE&lt;br /&gt;------------------------------------ ----------- ------------------------------&lt;br /&gt;open_cursors                         integer     300&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Если параметры не удовлетворяют требованиям, при установке EM, вы получите сообщение об ошибке.&lt;br /&gt;&lt;br /&gt;После этого, можно устанавливать EM GC. Запускаем runInstaller.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@em ~]$ ./runInstaller&lt;br /&gt;Starting Oracle Universal Installer...&lt;br /&gt;&lt;br /&gt;Checking Temp space: must be greater than 150 MB.   Actual 10504 MB    Passed&lt;br /&gt;Checking swap space: must be greater than 150 MB.   Actual 3199 MB    Passed&lt;br /&gt;Checking monitor: must be configured to display at least 256 colors.    Actual 65536    Passed&lt;br /&gt;Preparing to launch Oracle Universal Installer from /tmp/OraInstall2011-08-29_10-16-08AM. Please wait ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-vZ0Ag4NxiAE/TlufKXOi1ZI/AAAAAAAAAEg/RP_F92_hMxA/s1600/em1.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://1.bp.blogspot.com/-vZ0Ag4NxiAE/TlufKXOi1ZI/AAAAAAAAAEg/RP_F92_hMxA/s320/em1.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Вводим имя пользователя и пароль для доступа на support.oracle.com или отказываемся от этого (в моем случае).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-J1XmnNrULlE/Tlufg8w1EvI/AAAAAAAAAEo/RzyGOzW__fY/s1600/em2.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-J1XmnNrULlE/Tlufg8w1EvI/AAAAAAAAAEo/RzyGOzW__fY/s320/em2.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Выбираем Skip и нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-sr7q6zTZN4A/TlufuUw0LAI/AAAAAAAAAEw/UPZqya7vHhM/s1600/em3.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="241" src="http://3.bp.blogspot.com/-sr7q6zTZN4A/TlufuUw0LAI/AAAAAAAAAEw/UPZqya7vHhM/s320/em3.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Выбираем Install a new и нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MKO0Nyshcn0/Tluf-fCPjmI/AAAAAAAAAE4/4PLZ7-AcVk4/s1600/em4.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="241" src="http://2.bp.blogspot.com/-MKO0Nyshcn0/Tluf-fCPjmI/AAAAAAAAAE4/4PLZ7-AcVk4/s320/em4.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-z53489V15SQ/TlugJXQopFI/AAAAAAAAAFA/nGRRSgCo_sk/s1600/em5.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://3.bp.blogspot.com/-z53489V15SQ/TlugJXQopFI/AAAAAAAAAFA/nGRRSgCo_sk/s320/em5.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Оставляем все без изменений. Нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-un_5TKv4n18/Tlugaq6pNwI/AAAAAAAAAFI/RCpTiV-qhSQ/s1600/em6.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://1.bp.blogspot.com/-un_5TKv4n18/Tlugaq6pNwI/AAAAAAAAAFI/RCpTiV-qhSQ/s320/em6.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Вводим пароли. Нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Qc6WYX5vwnk/Tlugo3T9SFI/AAAAAAAAAFQ/5uAeGX0MjUk/s1600/em7.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://2.bp.blogspot.com/-Qc6WYX5vwnk/Tlugo3T9SFI/AAAAAAAAAFQ/5uAeGX0MjUk/s320/em7.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Вводим атрибуты базы данных. Нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Di8Vd_sUiuo/Tlug0_4RMyI/AAAAAAAAAFY/OMBB0bQHMWo/s1600/em8.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://2.bp.blogspot.com/-Di8Vd_sUiuo/Tlug0_4RMyI/AAAAAAAAAFY/OMBB0bQHMWo/s320/em8.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Вводим пароль для пользователя SYSMAN. Нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-79K92G-YAZQ/TluhGSVlnII/AAAAAAAAAFg/8GigKOLOx5o/s1600/em9.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://4.bp.blogspot.com/-79K92G-YAZQ/TluhGSVlnII/AAAAAAAAAFg/8GigKOLOx5o/s320/em9.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Вводим пароли и отключаем security агентов. Нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-gnW9UxJdUZ4/TluhdDjMuaI/AAAAAAAAAFo/_HQZcPQY-kc/s1600/em10.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://2.bp.blogspot.com/-gnW9UxJdUZ4/TluhdDjMuaI/AAAAAAAAAFo/_HQZcPQY-kc/s320/em10.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Нажимаем Next.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-po7CDWo-42A/Tluhm4_hG7I/AAAAAAAAAFw/IE0D5onLR6w/s1600/em11.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://2.bp.blogspot.com/-po7CDWo-42A/Tluhm4_hG7I/AAAAAAAAAFw/IE0D5onLR6w/s320/em11.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Нажимаем Install.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-oaMZxjSdsGw/TluhyKGqVII/AAAAAAAAAF4/8KNQY2supNs/s1600/em12.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="244" src="http://4.bp.blogspot.com/-oaMZxjSdsGw/TluhyKGqVII/AAAAAAAAAF4/8KNQY2supNs/s320/em12.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-zekIbqOtpwk/Tluh3cdk-hI/AAAAAAAAAGA/Mcf66NGTOb4/s1600/em13.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="244" src="http://3.bp.blogspot.com/-zekIbqOtpwk/Tluh3cdk-hI/AAAAAAAAAGA/Mcf66NGTOb4/s320/em13.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Выполняем скрипт из под root. &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@em ~]# /u01/app/oracle/middleware/oms11g/allroot.sh&lt;br /&gt;&lt;br /&gt;Starting to execute allroot.sh .........&lt;br /&gt;&lt;br /&gt;Starting to execute /u01/app/oracle/middleware/oms11g/root.sh ......&lt;br /&gt;Running Oracle 11g root.sh script...&lt;br /&gt;&lt;br /&gt;The following environment variables are set as:&lt;br /&gt;    ORACLE_OWNER= oracle&lt;br /&gt;    ORACLE_HOME=  /u01/app/oracle/middleware/oms11g&lt;br /&gt;&lt;br /&gt;Enter the full pathname of the local bin directory: [/usr/local/bin]:&lt;br /&gt;The file "dbhome" already exists in /usr/local/bin.  Overwrite it? (y/n)&lt;br /&gt;[n]:&lt;br /&gt;The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)&lt;br /&gt;[n]:&lt;br /&gt;The file "coraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)&lt;br /&gt;[n]:&lt;br /&gt;&lt;br /&gt;Entries will be added to the /etc/oratab file as needed by&lt;br /&gt;Database Configuration Assistant when a database is created&lt;br /&gt;Finished running generic part of root.sh script.&lt;br /&gt;Now product-specific root actions will be performed.&lt;br /&gt;Adding entry to /etc/oratab file...&lt;br /&gt;Finished execution of  /u01/app/oracle/middleware/oms11g/root.sh ......&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Starting to execute /u01/app/oracle/middleware/agent11g/root.sh ......&lt;br /&gt;Running Oracle 11g root.sh script...&lt;br /&gt;&lt;br /&gt;The following environment variables are set as:&lt;br /&gt;    ORACLE_OWNER= oracle&lt;br /&gt;    ORACLE_HOME=  /u01/app/oracle/middleware/agent11g&lt;br /&gt;&lt;br /&gt;Enter the full pathname of the local bin directory: [/usr/local/bin]:&lt;br /&gt;The file "dbhome" already exists in /usr/local/bin.  Overwrite it? (y/n)&lt;br /&gt;[n]:&lt;br /&gt;The file "oraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)&lt;br /&gt;[n]:&lt;br /&gt;The file "coraenv" already exists in /usr/local/bin.  Overwrite it? (y/n)&lt;br /&gt;[n]:&lt;br /&gt;&lt;br /&gt;Entries will be added to the /etc/oratab file as needed by&lt;br /&gt;Database Configuration Assistant when a database is created&lt;br /&gt;Finished running generic part of root.sh script.&lt;br /&gt;Now product-specific root actions will be performed.&lt;br /&gt;Finished product-specific root actions.&lt;br /&gt;Adding entry to /etc/oratab file...&lt;br /&gt;Finished execution of  /u01/app/oracle/middleware/agent11g/root.sh ......&lt;br /&gt;[root@em ~]#&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Нажимаем Ok.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-cnT0xN9UDHs/TluiVrNIB-I/AAAAAAAAAGI/v8YWxWgyuc8/s1600/em14.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://4.bp.blogspot.com/-cnT0xN9UDHs/TluiVrNIB-I/AAAAAAAAAGI/v8YWxWgyuc8/s320/em14.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-AL09NSd17Ws/Tluic1lDJMI/AAAAAAAAAGQ/kuaWmFCSOaQ/s1600/em15.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-AL09NSd17Ws/Tluic1lDJMI/AAAAAAAAAGQ/kuaWmFCSOaQ/s320/em15.bmp" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Соответственно, на данном этапе установка EM GC 11g завершена.&lt;br /&gt;&lt;br /&gt;Проверим конфигурацию.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@em ~]$ echo $ORACLE_HOME&lt;br /&gt;/u01/app/oracle/middleware/oms11g&lt;br /&gt;[oracle@em ~]$ emctl status oms&lt;br /&gt;Oracle Enterprise Manager 11g Release 1 Grid Control&lt;br /&gt;Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.&lt;br /&gt;WebTier is Up&lt;br /&gt;Oracle Management Server is Up&lt;br /&gt;[oracle@em ~]$&lt;br /&gt;[oracle@em ~]$ export ORACLE_HOME=$ORACLE_BASE/middleware/agent11g&lt;br /&gt;[oracle@em ~]$ $ORACLE_HOME/bin/emctl status agent&lt;br /&gt;Oracle Enterprise Manager 11g Release 1 Grid Control 11.1.0.1.0&lt;br /&gt;Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Agent Version     : 11.1.0.1.0&lt;br /&gt;OMS Version       : 11.1.0.1.0&lt;br /&gt;Protocol Version  : 11.1.0.0.0&lt;br /&gt;Agent Home        : /u01/app/oracle/middleware/agent11g&lt;br /&gt;Agent binaries    : /u01/app/oracle/middleware/agent11g&lt;br /&gt;Agent Process ID  : 25152&lt;br /&gt;Parent Process ID : 25135&lt;br /&gt;Agent URL         : https://em.us.oracle.com:3872/emd/main/&lt;br /&gt;Repository URL    : https://em.us.oracle.com:4900/em/upload&lt;br /&gt;Started at        : 2011-08-29 12:54:42&lt;br /&gt;Started by user   : oracle&lt;br /&gt;Last Reload       : 2011-08-29 12:56:01&lt;br /&gt;Last successful upload                       : 2011-08-29 13:12:37&lt;br /&gt;Total Megabytes of XML files uploaded so far :    26.82&lt;br /&gt;Number of XML files pending upload           :        0&lt;br /&gt;Size of XML files pending upload(MB)         :     0.00&lt;br /&gt;Available disk space on upload filesystem    :     9.78%&lt;br /&gt;Last successful heartbeat to OMS             : 2011-08-29 13:12:49&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;Agent is Running and Ready&lt;br /&gt;[oracle@em ~]$&lt;br /&gt;[oracle@em ~]$ $ORACLE_HOME/bin/emctl upload&lt;br /&gt;Oracle Enterprise Manager 11g Release 1 Grid Control 11.1.0.1.0&lt;br /&gt;Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;EMD upload completed successfully&lt;br /&gt;[oracle@em ~]$&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Следовательно, конфигурация работает.&lt;br /&gt;&lt;br /&gt;Заключение.&lt;br /&gt;Установка Enterprise Manager Grid Control 11g заняла у меня совсем немного времени (по сравнению с RAC например). Также хочется отметить очень хорошую документацию по установке данного продукта - все очень подробно и с картинками. Единственное, что немного не удобно, так это то, что кроме дистрибутива EM, еще нужно скачивать дистрибутив WLS и дополнительный патч к нему, надеюсь в следующей версии Grid Control данный недостаток будет устранен.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-6750132074735445338?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/6750132074735445338/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=6750132074735445338&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/6750132074735445338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/6750132074735445338'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/08/enterprise-manager-grid-control-11g.html' title='Установка Enterprise Manager  Grid Control 11G'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-o2gYw5VLJno/TltMfTnL93I/AAAAAAAAADQ/rjmSzlIgC-4/s72-c/1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-7867990931875377507</id><published>2011-07-29T13:09:00.000+04:00</published><updated>2011-07-29T13:09:50.315+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>Renaming tables in TimesTen</title><content type='html'>Недавно, на &lt;a href="http://forums.oracle.com/forums/thread.jspa?threadID=2259181&amp;amp;tstart=0"&gt;форуме&lt;/a&gt; получил вопрос от заказчика - как переименовать таблицу в TimesTen?&lt;br /&gt;Первым делом, как настоящий пацан, я открыл &lt;a href="http://download.oracle.com/docs/cd/E13085_01/doc/timesten.1121/e13070/toc.htm"&gt;документацию&lt;/a&gt; и не обнаружил команды 'alter table rename', следовательно, единственный способ переименовать таблицу - создать таблицу CTAS и после удалить старую.&lt;br /&gt;Небольшой пример:&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table my_all_source as select * from all_source;&lt;br /&gt;7566 rows inserted.&lt;br /&gt;Command&amp;gt; create table my_raname_tab as select * from my_all_source;&lt;br /&gt;7566 rows inserted.&lt;br /&gt;Command&amp;gt; drop table my_all_source;&lt;br /&gt;Command&amp;gt; tables;&lt;br /&gt;  ORATT.MY_RANAME_TAB&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ну это и дети знают. Но что происходит с констрайнтами, индексами при CTAS. Конечно они отсутствуют. Вопрос в том, как переименовать таблицу, и потом восстановить все констрэйнты и индексы.&lt;br /&gt;&lt;br /&gt;Предположим у нас есть таблицы:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table tab1 (id number not null primary key, sum number);&lt;br /&gt;Command&amp;gt; create table tab2 (id number not null primary key, name varchar2(50));&lt;br /&gt;Command&amp;gt; create table tab_for_rename (id_1 number not null primary key, id_tab1 number, id_tab2 number);&lt;br /&gt;Command&amp;gt; create table tab3 (id number not null primary key, id_tab_for_rename number);&lt;br /&gt;Command&amp;gt; create table tab4 (id number not null primary key, id_tab_for_rename number);&lt;br /&gt;Command&amp;gt; tables;&lt;br /&gt;  ORATT.TAB1&lt;br /&gt;  ORATT.TAB2&lt;br /&gt;  ORATT.TAB3&lt;br /&gt;  ORATT.TAB4&lt;br /&gt;  ORATT.TAB_FOR_RENAME&lt;br /&gt;5 tables found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Необходимо переименовать таблицу tab_for_rename. Предположим, что в данной таблице существует первичный ключ, и несколько внешних ключей. Кроме того, предположим, что существуют таблицы (которые мы не знаем), которые ссылаются на первичный ключ tab_for_rename.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; ALTER TABLE tab_for_rename ADD FOREIGN KEY (id_tab1) REFERENCES tab1 (id);&lt;br /&gt;Command&amp;gt; ALTER TABLE tab_for_rename ADD FOREIGN KEY (id_tab2) REFERENCES tab2 (id);&lt;br /&gt;Command&amp;gt; ALTER TABLE tab3 ADD FOREIGN KEY (id_tab_for_rename) REFERENCES tab_for_rename (id_1);&lt;br /&gt;Command&amp;gt; ALTER TABLE tab4 ADD FOREIGN KEY (id_tab_for_rename) REFERENCES tab_for_rename (id_1);&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Заполним таблицы данными:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; insert into tab1 (id, sum) select rownum, rownum from all_source;&lt;br /&gt;7566 rows inserted.&lt;br /&gt;Command&amp;gt; insert into tab2 (id, name) select rownum, to_char(rownum) from all_source;&lt;br /&gt;7566 rows inserted.&lt;br /&gt;Command&amp;gt; insert into tab_for_rename (id_1, id_tab1, id_tab2) select rownum, rownum,rownum from all_source;&lt;br /&gt;7566 rows inserted.&lt;br /&gt;Command&amp;gt; insert into tab3 select rownum, rownum from all_source;&lt;br /&gt;7566 rows inserted.&lt;br /&gt;Command&amp;gt; insert into tab4 select rownum, rownum from all_source;&lt;br /&gt;7566 rows inserted.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Вначале, создадим таблицу с новым именем.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table renamed_tab as select * from tab_for_rename;&lt;br /&gt;7566 rows inserted.&lt;br /&gt;Command&amp;gt; indexes renamed_tab;&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.RENAMED_TAB:&lt;br /&gt;  No indexes found.&lt;br /&gt;&lt;br /&gt;0 indexes found on 1 table.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь необходимо создать все констрэйнты и индексы. &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; indexes TAB_FOR_RENAME;&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB_FOR_RENAME:&lt;br /&gt;  TAB_FOR_RENAME: unique T-tree index on columns:&lt;br /&gt;    ID_1&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_20 on table ORATT.TAB3)&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_21 on table ORATT.TAB4)&lt;br /&gt;  TTFOREIGN_18: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB1&lt;br /&gt;    (foreign key index references table ORATT.TAB1(ID))&lt;br /&gt;  TTFOREIGN_19: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB2&lt;br /&gt;    (foreign key index references table ORATT.TAB2(ID))&lt;br /&gt;  3 indexes found.&lt;br /&gt;&lt;br /&gt;3 indexes found on 1 table.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Следовательно, с помощью команды indexes, можно получить все необходимые данные для пересоздания всех индексов и констрэйнтов.&lt;br /&gt;&lt;br /&gt;Пересоздадим их.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; ALTER TABLE renamed_tab ADD constraint new_pk Primary key (id_1);&lt;br /&gt;Command&amp;gt; ALTER TABLE renamed_tab ADD FOREIGN KEY (id_tab1) REFERENCES tab1 (id);&lt;br /&gt;Command&amp;gt; ALTER TABLE renamed_tab ADD FOREIGN KEY (id_tab2) REFERENCES tab2 (id);&lt;br /&gt;Command&amp;gt; ALTER TABLE tab3 ADD FOREIGN KEY (id_tab_for_rename) REFERENCES renamed_tab (id_1);&lt;br /&gt;Command&amp;gt; ALTER TABLE tab4 ADD FOREIGN KEY (id_tab_for_rename) REFERENCES renamed_tab (id_1);&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;После этого, наблюдаем удвоение индексов у таблиц tab1, tab2,tab3,tab4.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; indexes;&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.RENAMED_TAB:&lt;br /&gt;  NEW_PK: unique T-tree index on columns:&lt;br /&gt;    ID_1&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_24 on table ORATT.TAB3)&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_25 on table ORATT.TAB4)&lt;br /&gt;  TTFOREIGN_22: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB1&lt;br /&gt;    (foreign key index references table ORATT.TAB1(ID))&lt;br /&gt;  TTFOREIGN_23: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB2&lt;br /&gt;    (foreign key index references table ORATT.TAB2(ID))&lt;br /&gt;  3 indexes found.&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB1:&lt;br /&gt;  TAB1: unique T-tree index on columns:&lt;br /&gt;    ID&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_22 on table ORATT.RENAMED_TAB)&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_18 on table ORATT.TAB_FOR_RENAME)&lt;br /&gt;  1 index found.&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB2:&lt;br /&gt;  TAB2: unique T-tree index on columns:&lt;br /&gt;    ID&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_23 on table ORATT.RENAMED_TAB)&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_19 on table ORATT.TAB_FOR_RENAME)&lt;br /&gt;  1 index found.&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB3:&lt;br /&gt;  TAB3: unique T-tree index on columns:&lt;br /&gt;    ID&lt;br /&gt;  TTFOREIGN_20: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB_FOR_RENAME&lt;br /&gt;    (foreign key index references table ORATT.TAB_FOR_RENAME(ID_1))&lt;br /&gt;  TTFOREIGN_24: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB_FOR_RENAME&lt;br /&gt;    (foreign key index references table ORATT.RENAMED_TAB(ID_1))&lt;br /&gt;  3 indexes found.&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB4:&lt;br /&gt;  TAB4: unique T-tree index on columns:&lt;br /&gt;    ID&lt;br /&gt;  TTFOREIGN_21: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB_FOR_RENAME&lt;br /&gt;    (foreign key index references table ORATT.TAB_FOR_RENAME(ID_1))&lt;br /&gt;  TTFOREIGN_25: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB_FOR_RENAME&lt;br /&gt;    (foreign key index references table ORATT.RENAMED_TAB(ID_1))&lt;br /&gt;  3 indexes found.&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB_FOR_RENAME:&lt;br /&gt;  TAB_FOR_RENAME: unique T-tree index on columns:&lt;br /&gt;    ID_1&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_20 on table ORATT.TAB3)&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_21 on table ORATT.TAB4)&lt;br /&gt;  TTFOREIGN_18: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB1&lt;br /&gt;    (foreign key index references table ORATT.TAB1(ID))&lt;br /&gt;  TTFOREIGN_19: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB2&lt;br /&gt;    (foreign key index references table ORATT.TAB2(ID))&lt;br /&gt;  3 indexes found.&lt;br /&gt;&lt;br /&gt;14 indexes found on 6 tables.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь удалим старую таблицу.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; ALTER TABLE tab3 DROP CONSTRAINT TTFOREIGN_20;&lt;br /&gt;Command&amp;gt; ALTER TABLE tab4 DROP CONSTRAINT TTFOREIGN_21;&lt;br /&gt;Command&amp;gt; drop table TAB_FOR_RENAME;&lt;br /&gt;Command&amp;gt; indexes;&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.RENAMED_TAB:&lt;br /&gt;  NEW_PK: unique T-tree index on columns:&lt;br /&gt;    ID_1&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_24 on table ORATT.TAB3)&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_25 on table ORATT.TAB4)&lt;br /&gt;  TTFOREIGN_22: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB1&lt;br /&gt;    (foreign key index references table ORATT.TAB1(ID))&lt;br /&gt;  TTFOREIGN_23: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB2&lt;br /&gt;    (foreign key index references table ORATT.TAB2(ID))&lt;br /&gt;  3 indexes found.&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB1:&lt;br /&gt;  TAB1: unique T-tree index on columns:&lt;br /&gt;    ID&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_22 on table ORATT.RENAMED_TAB)&lt;br /&gt;  1 index found.&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB2:&lt;br /&gt;  TAB2: unique T-tree index on columns:&lt;br /&gt;    ID&lt;br /&gt;    (referenced by foreign key index TTFOREIGN_23 on table ORATT.RENAMED_TAB)&lt;br /&gt;  1 index found.&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB3:&lt;br /&gt;  TAB3: unique T-tree index on columns:&lt;br /&gt;    ID&lt;br /&gt;  TTFOREIGN_24: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB_FOR_RENAME&lt;br /&gt;    (foreign key index references table ORATT.RENAMED_TAB(ID_1))&lt;br /&gt;  2 indexes found.&lt;br /&gt;&lt;br /&gt;Indexes on table ORATT.TAB4:&lt;br /&gt;  TAB4: unique T-tree index on columns:&lt;br /&gt;    ID&lt;br /&gt;  TTFOREIGN_25: non-unique T-tree index on columns:&lt;br /&gt;    ID_TAB_FOR_RENAME&lt;br /&gt;    (foreign key index references table ORATT.RENAMED_TAB(ID_1))&lt;br /&gt;  2 indexes found.&lt;br /&gt;&lt;br /&gt;9 indexes found on 5 tables.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Следовательно, переименовать таблицу в TimesTen не составляет большого труда, даже с учетом отсутствия команды 'alter table rename'. Правда, есть нюанс, т.к. новая таблица создается как CTAS, то в вашей базе данных должно быть достаточно места для хранения копии данных и индексов, поэтому данный метод применим не всегда.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-7867990931875377507?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/7867990931875377507/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=7867990931875377507&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7867990931875377507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7867990931875377507'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/07/renaming-tables-in-timesten.html' title='Renaming tables in TimesTen'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-7892566478236165419</id><published>2011-07-26T12:04:00.001+04:00</published><updated>2011-08-15T13:32:39.521+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mat view'/><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>Материализованные представления в Oralce TimesTen 11g</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MzCusWwBGCM/Ti50u2Hri2I/AAAAAAAAAC0/Mg8uS4FfzEA/s1600/New+Bitmap+Image.bmp" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-MzCusWwBGCM/Ti50u2Hri2I/AAAAAAAAAC0/Mg8uS4FfzEA/s320/New+Bitmap+Image.bmp" width="220" /&gt;&lt;/a&gt;&lt;/div&gt;В Oracle TimesTen существует возможность создания материализованных представлений. Именно про данную возможность и пойдет речь далее. Согласно документации, в TimesTen существует два типа материализованных представлений: синхронные (Synchronous materialized view) и асинхронные (Asynchronous materialized view).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Синхронные материализованные представления&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Синхронные материализованные представления существовали еще в версии 7.0.5. Они находятся постоянно в синхронном состоянии со всеми таблицами, на которые они ссылаются (detail tables). Это может сказываться на производительности, т.к. транзакция, меняющая таблицу, меняет и результат материализованного представления. Рассмотрим пример создания синхронного материализованного представления.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Пример сосздания синхронного материализованного представления&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Создадим пользователя и предоставим ему необходимые привилегии.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;oracle@tt matview]$ ttisql db_bi&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2011, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;connect "DSN=db_bi";&lt;br /&gt;Connection successful: DSN=db_bi;UID=oracle;DataStore=/u01/app/oracle/datastore/db_bi;DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8;NLS_LENGTH_SEMANTICS=CHAR;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1121/lib/libtten.so;PermSize=3000;TempSize=1500;TypeMode=0;PLSQL_TIMEOUT=1000;CacheGridEnable=0;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; CREATE USER oratt IDENTIFIED BY oracle;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; grant create session,create table to oratt;&lt;br /&gt;Command&amp;gt; grant CREATE MATERIALIZED VIEW to oratt;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Создадим таблицу и наполним ее данными. Таблица строится на основе представления ALL_SOURCE (т.к. строк в представлении ALL_SOURCE мало, то я увеличиваю количество строк в 1000 раз).&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt matview]$ ttisql "DSN=db_bi;UID=oratt;PWD=oracle;"&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2011, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;connect "DSN=db_bi;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_bi;UID=oratt;DataStore=/u01/app/oracle/datastore/db_bi;DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8;NLS_LENGTH_SEMANTICS=CHAR;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1121/lib/libtten.so;PermSize=3000;TempSize=1500;TypeMode=0;PLSQL_TIMEOUT=1000;CacheGridEnable=0;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; create table my_all_source as select * from all_source;&lt;br /&gt;7566 rows inserted.&lt;br /&gt;Command&amp;gt; tables;&lt;br /&gt;  ORATT.MY_ALL_SOURCE&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt; set autocommit 0;&lt;br /&gt;Command&amp;gt; begin&lt;br /&gt;       &amp;gt;   for i in 1 .. 1000 loop&lt;br /&gt;       &amp;gt;     insert into my_all_source select * from all_source;&lt;br /&gt;       &amp;gt;     commit;&lt;br /&gt;       &amp;gt;   end loop;&lt;br /&gt;       &amp;gt; end;&lt;br /&gt;       &amp;gt; /&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; select count(*) from my_all_source;&lt;br /&gt;&amp;lt; 7573566 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь выполним запрос к данной таблице, показывающий количество системных объектов и количество строк в данном объекте.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; set autocommit 0;&lt;br /&gt;Command&amp;gt; set timing 1;&lt;br /&gt;Command&amp;gt; select name, count(*) from my_all_source group by name;&lt;br /&gt;&amp;lt; DBMS_LOCK, 172172 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_OUTPUT, 158158 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_PREPROCESSOR, 226226 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_RANDOM, 87087 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_SQL, 1675674 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_STANDARD, 31031 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_UTILITY, 816816 &amp;gt;&lt;br /&gt;&amp;lt; PLITBLM, 115115 &amp;gt;&lt;br /&gt;&amp;lt; STANDARD, 3310307 &amp;gt;&lt;br /&gt;&amp;lt; TT_DB_VERSION, 36036 &amp;gt;&lt;br /&gt;&amp;lt; UTL_IDENT, 17017 &amp;gt;&lt;br /&gt;&amp;lt; UTL_RAW, 927927 &amp;gt;&lt;br /&gt;12 rows found.&lt;br /&gt;Execution time (SQLExecute + Fetch Loop) = 1.623664 seconds.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видно, запрос выполнился за 1.6 секунды.&lt;br /&gt;Посмотрим план выполнения.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; set timing 0;&lt;br /&gt;Command&amp;gt; set showplan 1;&lt;br /&gt;Command&amp;gt; select name, count(*) from my_all_source group by name;&lt;br /&gt;&lt;br /&gt;Query Optimizer Plan:&lt;br /&gt;&lt;br /&gt;  STEP:                1&lt;br /&gt;  LEVEL:               2&lt;br /&gt;  OPERATION:           TblLkSerialScan&lt;br /&gt;  TBLNAME:             MY_ALL_SOURCE&lt;br /&gt;  IXNAME:              &lt;null&gt;&lt;br /&gt;  INDEXED CONDITION:   &lt;null&gt;&lt;br /&gt;  NOT INDEXED:         &lt;null&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  STEP:                2&lt;br /&gt;  LEVEL:               1&lt;br /&gt;  OPERATION:           GroupBy&lt;br /&gt;  TBLNAME:             &lt;null&gt;&lt;br /&gt;  IXNAME:              &lt;null&gt;&lt;br /&gt;  INDEXED CONDITION:   &lt;null&gt;&lt;br /&gt;  NOT INDEXED:         &lt;null&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; DBMS_LOCK, 172172 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_OUTPUT, 158158 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_PREPROCESSOR, 226226 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_RANDOM, 87087 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_SQL, 1675674 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_STANDARD, 31031 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_UTILITY, 816816 &amp;gt;&lt;br /&gt;&amp;lt; PLITBLM, 115115 &amp;gt;&lt;br /&gt;&amp;lt; STANDARD, 3310307 &amp;gt;&lt;br /&gt;&amp;lt; TT_DB_VERSION, 36036 &amp;gt;&lt;br /&gt;&amp;lt; UTL_IDENT, 17017 &amp;gt;&lt;br /&gt;&amp;lt; UTL_RAW, 927927 &amp;gt;&lt;br /&gt;12 rows found.&lt;br /&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/pre&gt;&lt;br /&gt;План представляет собой полное сканирование таблицы с последующей группировкой.&lt;br /&gt;Для увеличения производительности данного запроса, создадим материализованное представление.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE MATERIALIZED VIEW my_all_source_aggr AS select name, count(*) count from my_all_source group by name;&lt;br /&gt;12 rows materialized.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь выполним запрос к данному представлению.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; set timing 1;&lt;br /&gt;Command&amp;gt; select * from my_all_source_aggr;&lt;br /&gt;&amp;lt; DBMS_LOCK, 172172 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_OUTPUT, 158158 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_PREPROCESSOR, 226226 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_RANDOM, 87087 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_SQL, 1675674 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_STANDARD, 31031 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_UTILITY, 816816 &amp;gt;&lt;br /&gt;&amp;lt; PLITBLM, 115115 &amp;gt;&lt;br /&gt;&amp;lt; STANDARD, 3310307 &amp;gt;&lt;br /&gt;&amp;lt; TT_DB_VERSION, 36036 &amp;gt;&lt;br /&gt;&amp;lt; UTL_IDENT, 17017 &amp;gt;&lt;br /&gt;&amp;lt; UTL_RAW, 927927 &amp;gt;&lt;br /&gt;12 rows found.&lt;br /&gt;Execution time (SQLExecute + Fetch Loop) = 0.000108 seconds.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Следовательно, получили существенное увеличение производительности данного запроса.&lt;br /&gt;&lt;br /&gt;Теперь попробуем вставить строку в таблицу my_all_source и посмотрим на результат в материализованном представлении.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; insert into my_all_source (OWNER, NAME, TYPE,LINE,TEXT) values ('GENA', 'TEST', 'TEST', 1 ,'TEST');&lt;br /&gt;Command&amp;gt; commit;&lt;br /&gt;Command&amp;gt; select * from my_all_source_aggr;&lt;br /&gt;&amp;lt; DBMS_LOCK, 172172 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_OUTPUT, 158158 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_PREPROCESSOR, 226226 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_RANDOM, 87087 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_SQL, 1675674 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_STANDARD, 31031 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_UTILITY, 816816 &amp;gt;&lt;br /&gt;&amp;lt; PLITBLM, 115115 &amp;gt;&lt;br /&gt;&amp;lt; STANDARD, 3310307 &amp;gt;&lt;br /&gt;&amp;lt; TT_DB_VERSION, 36036 &amp;gt;&lt;br /&gt;&amp;lt; UTL_IDENT, 17017 &amp;gt;&lt;br /&gt;&amp;lt; UTL_RAW, 927927 &amp;gt;&lt;br /&gt;&amp;lt; TEST, 1 &amp;gt;&lt;br /&gt;13 rows found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Видно, что при изменении таблицы my_all_source сразу произошло изменение синхронного материализованного представления.&lt;br /&gt;&lt;br /&gt;К сожалению, механизма, аналигичного QUERY_REWRITE в Oracle Database, в TimesTen нет, поэтому, для улучшения производительности необходимо не только создать материализованное представление, но и на уровне приложения изменить доступ к данным. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Супер блокировки (super locks) при использовании синхронных материализованных представлений&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;При работе с данным видом материализованных представлений, могут возникнуть супер блокировки. Рассмотрим пример.&lt;br /&gt;&lt;br /&gt;Создадим таблицу и наполним ее данными.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create table tab1 (id number not null, name varchar2(50));&lt;br /&gt;Command&amp;gt; desc tab1;&lt;br /&gt;&lt;br /&gt;Table ORATT.TAB1:&lt;br /&gt;  Columns:&lt;br /&gt;    ID                              NUMBER NOT NULL&lt;br /&gt;    NAME                            VARCHAR2 (50) NOT INLINE&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;(primary key columns are indicated with *)&lt;br /&gt;Command&amp;gt; begin&lt;br /&gt;       &amp;gt;   for i in 1 .. 1000 loop&lt;br /&gt;       &amp;gt;     insert into tab1 select 1, 'test'||i from dual;&lt;br /&gt;       &amp;gt;   end loop;&lt;br /&gt;       &amp;gt;   for i in 1001 .. 2000 loop&lt;br /&gt;       &amp;gt;     insert into tab1 select 2, 'test'||i from dual;&lt;br /&gt;       &amp;gt;   end loop;&lt;br /&gt;       &amp;gt; end;&lt;br /&gt;       &amp;gt; /&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; select count(*) from tab1;&lt;br /&gt;&amp;lt; 2000 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Создадим синхронное материализованное представление, агрегирующее записи таблицы tab1.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE MATERIALIZED VIEW tab1_mv as select id, count(*) count from tab1 group by id;&lt;br /&gt;2 rows materialized.&lt;br /&gt;Command&amp;gt; select * from  tab1_mv;&lt;br /&gt;&amp;lt; 1, 1000 &amp;gt;&lt;br /&gt;&amp;lt; 2, 1000 &amp;gt;&lt;br /&gt;2 rows found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Проверим отсутствие блокировок а базе данных.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt ~]$ ttXactAdmin db_bi&lt;br /&gt;2011-07-26 05:23:47.996&lt;br /&gt;/u01/app/oracle/datastore/db_bi&lt;br /&gt;TimesTen Release 11.2.1.8.0&lt;br /&gt;&lt;br /&gt;0 outstanding transactions found&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь в двух сессиях попробуем изменить данные в таблице tab1.&lt;br /&gt;&lt;br /&gt;Сессия 1.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; set autocommit 0;&lt;br /&gt;Command&amp;gt; update tab1 set id=1 where id=1 and name='test1000';&lt;br /&gt;1 row updated.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Проверим наличие блокировок.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt ~]$ ttXactAdmin db_bi&lt;br /&gt;2011-07-26 05:26:01.672&lt;br /&gt;/u01/app/oracle/datastore/db_bi&lt;br /&gt;TimesTen Release 11.2.1.8.0&lt;br /&gt;&lt;br /&gt;Outstanding locks&lt;br /&gt;&lt;br /&gt;PID     Context            TransID     TransStatus Resource  ResourceID           Mode  SqlCmdID             Name&lt;br /&gt;&lt;br /&gt;Program File Name: ttIsqlCmd&lt;br /&gt;&lt;br /&gt;30285   0x1f4618b0            1.78     Active      Database  0x01312d0001312d00   IX    0&lt;br /&gt;                                                   EndScan   BMUFVUAAAAKAAAAED1   U     3152599496           ORATT.TAB1_MV&lt;br /&gt;                                                   Table     718144               IXn   3152599496           ORATT.TAB1_MV&lt;br /&gt;                                                   Row       BMUFVUAAACNYwAAFD8   Xn    3152599496           ORATT.TAB1&lt;br /&gt;                                                   Table     718128               IXn   3152599496           ORATT.TAB1&lt;br /&gt;&lt;br /&gt;1 outstanding transaction found&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Наблюдаем эксклюзивную блокировку на строку в таблице tab1 (718128). Но, кроме этой блокировки, наблюдаем также блокировку на материализованное представление TAB1_MV (718144).&lt;br /&gt;&lt;br /&gt;Следовательно, попытаемся изменить данные в таблице tab1 из другой сессии. &lt;br /&gt;&lt;br /&gt;Сессия 2.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; set autocommit 0;&lt;br /&gt;Command&amp;gt; update tab1 set id=1 where id=1 and name='test900';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;После этого Сессия 2 подвисла. Смотрим блокировки.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt ~]$ ttXactAdmin db_bi&lt;br /&gt;2011-07-26 05:33:08.354&lt;br /&gt;/u01/app/oracle/datastore/db_bi&lt;br /&gt;TimesTen Release 11.2.1.8.0&lt;br /&gt;&lt;br /&gt;Outstanding locks&lt;br /&gt;&lt;br /&gt;PID     Context            TransID     TransStatus Resource  ResourceID           Mode  SqlCmdID             Name&lt;br /&gt;&lt;br /&gt;Program File Name: ttIsqlCmd&lt;br /&gt;&lt;br /&gt;30285   0x1f4618b0            1.78     Active      Database  0x01312d0001312d00   IX    0&lt;br /&gt;                                                   EndScan   BMUFVUAAAAKAAAAED1   U     3152599496           ORATT.TAB1_MV&lt;br /&gt;                                                   Table     718144               IXn   3152599496           ORATT.TAB1_MV&lt;br /&gt;                                                   Row       BMUFVUAAACNYwAAFD8   Xn    3152599496           ORATT.TAB1&lt;br /&gt;                                                   Table     718128               IXn   3152599496           ORATT.TAB1&lt;br /&gt;&lt;br /&gt;Program File Name: ttIsqlCmd&lt;br /&gt;&lt;br /&gt;30364   0x11a938b0            2.1      Active      Database  0x01312d0001312d00   IX    0&lt;br /&gt;                                                   Row       BMUFVUAAACPYwAAEAS   S     3151419904           ORATT.TAB1_MV&lt;br /&gt;                                                   Row       BMUFVUAAACPYwAADAS   S     3151419904           ORATT.TAB1_MV&lt;br /&gt;                                                   Command   3151419904           S     3151419904&lt;br /&gt;                                                   Table     718144               IXn   3151419904           ORATT.TAB1_MV&lt;br /&gt;                                                   Row       BMUFVUAAACNYwAABD2   Xn    3151419904           ORATT.TAB1&lt;br /&gt;                                                   Table     718128               IXn   3151419904           ORATT.TAB1&lt;br /&gt;&lt;br /&gt;Awaiting locks&lt;br /&gt;&lt;br /&gt;PID     Context            TransID     Resource  ResourceID           RMode RSqlCmdID            HolderTransID HMode HSqlCmdID            Name&lt;br /&gt;30364   0x11a938b0            2.1      EndScan   BMUFVUAAAAKAAAAED1   U     3151419904              1.78       U     3152599496           ORATT.TAB1_MV&lt;br /&gt;&lt;br /&gt;2 outstanding transactions found&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Видно, что транзакция ожидает блокировку на материализованное представление TAB1_MV, хотя данные менялись совершенно в другой строке таблицы tab1. Ну и по истечению таймаута в сессии 2 получаем.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;6003: Lock request denied because of time-out&lt;br /&gt;Details: Tran 2.1 (pid 30364) wants U lock on end-table ORATT.TAB1_MV. But tran 1.78 (pid 30285) has it in U (request was U). Holder SQL (update tab1 set id=1 where id=1 and name='test1000')&lt;br /&gt;The command failed.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видно из примера, TimesTen блокирует все данные, от которых зависит результат выполнения запроса, на котором основано материализованное представление. Особенно сильно это проявляется при использовании агрегирования и объединения таблиц (блокируются все сроки таблиц влияющих на результат). Таким образом, при использовании сложных запросов с группировками и объединениями таблиц при построении материализованных представлений, может образоваться огромное количество блокировок, приводящих к катострофическим потерям производительности. Поэтому рекомендуется не строить синхронные материализованные представления с использованием сложных запросов, или, если необходимо это сделать, использовать асинхронные материализованные представления с типом обновления COMPLETE, т.к. они используют блокировки строк только на момент своего обновления.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Асинхронные материализованные представления&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Асинхронные материализованные представления (появились в версии 11.2), не изменяются сразу после изменения detail таблиц, поэтому результаты выборки из материализованного представления могут отличаться от результатов в таблицах. Пользователю предлагается самому решать, когда синхронизировать данные, причем, синхронизация проводиться в своей транзакции, не в пользовательской. &lt;br /&gt;&lt;br /&gt;Существует два метода обновления асинхронного материализованного представления:&lt;br /&gt;• FAST – выполняет инкрементальное обновление представления, с момента последнего изменения. &lt;br /&gt;• COMPLETE – выполняет полное обновление представление.&lt;br /&gt;Для использования FAST обновления, необходимо создать журнал материализованного представления (materialized view log).&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Пример создания асинхронного материализованного представления&lt;/u&gt; &lt;br /&gt;&lt;br /&gt;Воспользуемся уже созданной таблицей my_all_source.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; delete my_all_source where OWNER='GENA';&lt;br /&gt;1 row deleted.&lt;br /&gt;Command&amp;gt; commit;&lt;br /&gt;Command&amp;gt; drop materialized view my_all_source_aggr;&lt;br /&gt;Command&amp;gt; CREATE MATERIALIZED VIEW my_all_source_aggr&lt;br /&gt;       &amp;gt; REFRESH&lt;br /&gt;       &amp;gt;   COMPLETE&lt;br /&gt;       &amp;gt; AS select name, count(*) count from my_all_source group by name;&lt;br /&gt;12 rows materialized.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;Command&amp;gt; select * from my_all_source_aggr;&lt;br /&gt;&amp;lt; DBMS_LOCK, 172172 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_OUTPUT, 158158 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_PREPROCESSOR, 226226 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_RANDOM, 87087 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_SQL, 1675674 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_STANDARD, 31031 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_UTILITY, 816816 &amp;gt;&lt;br /&gt;&amp;lt; PLITBLM, 115115 &amp;gt;&lt;br /&gt;&amp;lt; STANDARD, 3310307 &amp;gt;&lt;br /&gt;&amp;lt; TT_DB_VERSION, 36036 &amp;gt;&lt;br /&gt;&amp;lt; UTL_IDENT, 17017 &amp;gt;&lt;br /&gt;&amp;lt; UTL_RAW, 927927 &amp;gt;&lt;br /&gt;12 rows found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;В данном примере, я создал асинхронное материализованное представление с типом обновлением COMPLETE (полное обновление). В данном случае, обновление материализованного представления необходимо выполнять вручную с помощью фразы REFRESH.&lt;br /&gt;&lt;br /&gt;Вставим данные в таблицу my_all_source и проверим результаты материализованного представления.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; insert into my_all_source (OWNER, NAME, TYPE,LINE,TEXT) values ('GENA', 'TEST', 'TEST', 1 ,'TEST');&lt;br /&gt;1 row inserted.&lt;br /&gt;Command&amp;gt; select * from my_all_source_aggr;&lt;br /&gt;&amp;lt; DBMS_LOCK, 172172 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_OUTPUT, 158158 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_PREPROCESSOR, 226226 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_RANDOM, 87087 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_SQL, 1675674 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_STANDARD, 31031 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_UTILITY, 816816 &amp;gt;&lt;br /&gt;&amp;lt; PLITBLM, 115115 &amp;gt;&lt;br /&gt;&amp;lt; STANDARD, 3310307 &amp;gt;&lt;br /&gt;&amp;lt; TT_DB_VERSION, 36036 &amp;gt;&lt;br /&gt;&amp;lt; UTL_IDENT, 17017 &amp;gt;&lt;br /&gt;&amp;lt; UTL_RAW, 927927 &amp;gt;&lt;br /&gt;12 rows found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Видно, что данные в представлении содержат устаревшую информацию. Обновим представление.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; refresh materialized view my_all_source_aggr;&lt;br /&gt;Command&amp;gt; select * from my_all_source_aggr;&lt;br /&gt;&amp;lt; TEST, 1 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_LOCK, 172172 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_OUTPUT, 158158 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_PREPROCESSOR, 226226 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_RANDOM, 87087 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_SQL, 1675674 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_STANDARD, 31031 &amp;gt;&lt;br /&gt;&amp;lt; DBMS_UTILITY, 816816 &amp;gt;&lt;br /&gt;&amp;lt; PLITBLM, 115115 &amp;gt;&lt;br /&gt;&amp;lt; STANDARD, 3310307 &amp;gt;&lt;br /&gt;&amp;lt; TT_DB_VERSION, 36036 &amp;gt;&lt;br /&gt;&amp;lt; UTL_IDENT, 17017 &amp;gt;&lt;br /&gt;&amp;lt; UTL_RAW, 927927 &amp;gt;&lt;br /&gt;13 rows found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;В данном случае, произошло полное обновление материализованного представления по запросу. Также, можно было указать интервал обновления материализованного представления. Например так:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE MATERIALIZED VIEW my_all_source_aggr&lt;br /&gt;       &amp;gt; REFRESH&lt;br /&gt;       &amp;gt;   COMPLETE&lt;br /&gt;       &amp;gt; NEXT SYSDATE + NUMTODSINTERVAL(1, 'HOUR')&lt;br /&gt;       &amp;gt; AS select name, count(*) count from my_all_source group by name;&lt;br /&gt;13 rows materialized.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;В данном случае, полное обновление материализованного представления будет происходить каждый час.&lt;br /&gt;&lt;br /&gt;Также можно создать асинхронное материализованное представление обновляемое инкрементально (FAST).&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; drop materialized view my_all_source_aggr;&lt;br /&gt;Command&amp;gt; create materialized view log on my_all_source with rowid (name, owner);&lt;br /&gt;Command&amp;gt; tables;&lt;br /&gt;  ORATT.MVLGT$_718064&lt;br /&gt;  ORATT.MVLOG$_718064&lt;br /&gt;  ORATT.MY_ALL_SOURCE&lt;br /&gt;3 tables found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;Command&amp;gt; desc my_all_source;&lt;br /&gt;&lt;br /&gt;Table ORATT.MY_ALL_SOURCE:&lt;br /&gt;  Columns:&lt;br /&gt;    OWNER                           VARCHAR2 (30 BYTE) INLINE&lt;br /&gt;    NAME                            VARCHAR2 (30 BYTE) INLINE&lt;br /&gt;    TYPE                            VARCHAR2 (12 BYTE) INLINE NOT NULL&lt;br /&gt;    LINE                            TT_INTEGER NOT NULL&lt;br /&gt;    TEXT                            VARCHAR2 (4000 BYTE) NOT INLINE&lt;br /&gt;  Has a materialized view log&lt;br /&gt;&lt;br /&gt;1 table found.&lt;br /&gt;(primary key columns are indicated with *)&lt;br /&gt;Command&amp;gt; CREATE MATERIALIZED VIEW my_all_source_aggr&lt;br /&gt;       &amp;gt; REFRESH&lt;br /&gt;       &amp;gt;   FAST&lt;br /&gt;       &amp;gt; NEXT SYSDATE + NUMTODSINTERVAL(1, 'HOUR')&lt;br /&gt;       &amp;gt; AS select rowid id, name from my_all_source where owner='GENA';&lt;br /&gt;1 row materialized.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Существенным минусом данного вида материализованных представлений являются ограничения SQL при создания представления (см. Ограничения&amp;nbsp; при создании материализованных представлений).&lt;br /&gt;&lt;br /&gt;Также, в данном виде материализованных представлений можно спользовать третий вид обновления. Если при создании мат. представления не указывается NUMTODSINTERVAL после SYSDATE, это означает, что обновление будет происходить после каждой фиксации транзакции (commit) но в отдельной транзакции. &lt;br /&gt;Пример:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE MATERIALIZED VIEW my_all_source_aggr&lt;br /&gt;       &amp;gt; REFRESH&lt;br /&gt;       &amp;gt;   FAST&lt;br /&gt;       &amp;gt; NEXT SYSDATE&lt;br /&gt;       &amp;gt; AS select rowid id, name from my_all_source where owner='GENA';&lt;br /&gt;1 row materialized.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Ограничения при создании материализованных представлений&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;При создании материализованных представлений существуют следующие ограничения на SQL:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Все колонки в условии GROUP BY должны быть включены в SelectList.&lt;/li&gt;&lt;li&gt;SUM и COUNT могут использоваться,&amp;nbsp; но не в выражениях, включая AVG.&lt;/li&gt;&lt;li&gt;Следующие конструкции SELECT не могут быть использованы:&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – DISTINCT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – FIRST&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – HAVING&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – ORDER BY&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – UNION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – UNION ALL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – MINUS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – INTERSECT&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – JOIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – Функции: USER, CURRENT_USER, SESSION_USER&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – Подзапросы&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; – NEXTVAL и CURRVAL&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Каждое выражение в SelectList должно иметь уникальное имя.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Возможны самообъединение таблиц (Self joins).&lt;/li&gt;&lt;/ul&gt;Для синхронных мат. представлений или асинхронных мат. представлений, которые используют полное обновление (COMPLETE) , накладываются следующие ограничения в SELECT выражение:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Агрегированное представление должно содержать условие COUNT(*) в SelectList.&lt;/li&gt;&lt;li&gt;Можно делать внешнее объединение таблиц (OUTER JOINs) &lt;/li&gt;&lt;/ul&gt;Для асинхронных представлений, которые используют инкрементальное обновление (FAST) :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Агрегированные функции не поддерживаются.&lt;/li&gt;&lt;li&gt;Внешние объединения не поддерживаются.&lt;/li&gt;&lt;li&gt;SELECT должен включать ROWID или Первичный ключ для всех detail tables.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Заключение&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Не смотря на все недостатки, материализованные представления в TimesTen являются достаточно мощным инструментом разработчиков, позволяющим решить различные задачи. Например, компания &lt;a href="http://www.osmp.ru/"&gt;ОСМП (бренд Qiwi)&lt;/a&gt;, реализовала систему обнаружения мошенничества, как раз, с использованием материализованных представлений в TimesTen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-7892566478236165419?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/7892566478236165419/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=7892566478236165419&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7892566478236165419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7892566478236165419'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/07/oralce-timesten-11g.html' title='Материализованные представления в Oralce TimesTen 11g'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-MzCusWwBGCM/Ti50u2Hri2I/AAAAAAAAAC0/Mg8uS4FfzEA/s72-c/New+Bitmap+Image.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-874212988039673866</id><published>2011-06-23T16:19:00.001+04:00</published><updated>2011-08-15T13:33:26.650+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><category scheme='http://www.blogger.com/atom/ns#' term='XLA'/><title type='text'>Триггеры в TimesTen (XLA application)</title><content type='html'>Иногда, заказчики задают вопрос относительно поддержки триггеров в TimesTen. &lt;br /&gt;TimesTen поддерживает PL/SQL (процедуры, функции, пакеты и др.), но поддержка триггеров отсутствует, т.к. триггеры пагубно влияют на производительность. Но что делать, если необходимо реализовать триггерную логику?&lt;br /&gt;&lt;br /&gt;Ответ - написать XLA приложение. Написать можно на С или Java, кому что ближе.&lt;br /&gt;Ниже я буду описывать пример с использованием java :).&lt;br /&gt;&lt;br /&gt;В документации (Java Developer's Guide) сказано:&lt;br /&gt;&lt;br /&gt;"You can use the TimesTen JMS/XLA API (JMS/XLA) to monitor TimesTen for&lt;br /&gt;changes to specified tables in a local data store and receive real-time notification of these changes. One of the purposes of JMS/XLA is to provide a high-performance, asynchronous alternative to triggers."&lt;br /&gt;&lt;br /&gt;Т.е. вы можете написать java приложение, которое может использовать JMS/XLA API для получения сообщений (в асинхронном режиме) об изменениях в TimesTen. JMS/XLA использует JMS publish-subscribe interface для доступа к XLA изменениям. Подробнее про JMS можно почитать здесь (http://download.oracle.com/javaee/1.3/jms/tutorial).&lt;br /&gt;&lt;br /&gt;Далее попробуем создать такое приложение.&lt;br /&gt;&lt;br /&gt;Первоначально, создадим объекты в TimesTen.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 xla]$ ttisql dbxla&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2010, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;connect "DSN=dbxla";&lt;br /&gt;Connection successful: DSN=dbxla;UID=oracle;DataStore=/u01/app/oracle/datastore/dbxla;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=32;TempSize=50;TypeMode=0;PLSQL=0;CacheGridEnable=0;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; CREATE USER oratt IDENTIFIED BY oracle;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; grant create session, create table, XLA to oratt;&lt;br /&gt;Command&amp;gt; connect "DSN=dbxla;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=dbxla;UID=oratt;DataStore=/u01/app/oracle/datastore/dbxla;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=32;TempSize=50;TypeMode=0;PLSQL=0;CacheGridEnable=0;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;con1: Command&amp;gt; create table xlatest ( id   NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;             &amp;gt;                        name VARCHAR2(100) );&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь, создадим закладку (bookmark). XLA закладки используются для отметки позиции чтения в журналах транзакций. Данную закладку булем использовать для отслеживания изменений в таблице xlatest.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;con1: Command&amp;gt; call ttXlaBookmarkCreate('bookmark');&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее, определим, изменения какой таблицы будем наблюдать. Для этого вызовем процедуру ttXlaSubscribe. В данном случае будем наблюдать за изменениями с таблицей xlatest с использованием закладки bookmark.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;con1: Command&amp;gt; call ttXlaSubscribe('xlatest','bookmark');&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее, перейдем к настройке приложения.&lt;br /&gt;Для соединения с XLA необходимо установить соединение с JMS Topic, который связан с опреденной базой данных TimesTen. Кофигурационный файл JMS/XLA обеспечивает привязку между именем топика и базой данных. По умолчанию, приложение ищет данный файл, названный jmsxla.xml, в текущей директории, но при желании можно определить другое имя и местоположение данного файла (см. документацию).&lt;br /&gt;&lt;br /&gt;В данном случае я использую следующий файл jmsxla.xml:&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;&amp;lt;xlaconfig&amp;gt;&lt;br /&gt;  &amp;lt;topics&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- topic for Xla demo --&amp;gt;&lt;br /&gt;    &amp;lt;topic name="xlademo"&lt;br /&gt;           connectionString="DSN=dbxla"&lt;br /&gt;           xlaPrefetch="100"&lt;br /&gt;    /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/topics&amp;gt;&lt;br /&gt;&amp;lt;/xlaconfig&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видно, я связал имя топика xlademo с базой данных dbxla.&lt;br /&gt;&lt;br /&gt;Теперь приступим, непосредственно, к написанию java Приложения.&lt;br /&gt;Первоначально, инициализируем контекст.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Hashtable env = new Hashtable();&lt;br /&gt;env.put(Context.INITIAL_CONTEXT_FACTORY, "com.timesten.dataserver.jmsxla.SimpleInitialContextFactory");&lt;br /&gt;InitialContext ic = new InitialContext(env);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее, используем JMS connection factory для соединения с XLA. После чего, вызываем метод start() у соединения для активации отправки сообщений. После этого, используя данное соединение создаем сессию.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;private javax.jms.TopicConnection connection; /** JMS connection */&lt;br /&gt;private TopicSession session;  /** JMS session */&lt;br /&gt;...&lt;br /&gt;TopicConnectionFactory connectionFactory = (TopicConnectionFactory)ic.lookup("TopicConnectionFactory");&lt;br /&gt;connection = connectionFactory.createTopicConnection();&lt;br /&gt;...&lt;br /&gt;// get Session&lt;br /&gt;session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;Также при создании сессии необходимо указать транзакционность сессии и тип модели подтверждения (acknowledgment modes).&lt;br /&gt;JMS/XLA поддерживается три модели (AUTO_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE, CLIENT_ACKNOWLEDGE), подробнее про модели можно почитать в документации. В примере я использую первую модель и транзакционность сессии устанавливаю в значение false.&lt;br /&gt;&lt;br /&gt;Далее, необходимо определиться с режимом получения сообщений. Возможны два варианта: синхронный и асинхронный.&lt;br /&gt;&lt;br /&gt;В синхронном варианте, сообщения обрабатываются последовательно (одно за другим). Это означает, что пока сообщение не обработано, другое ожидает.&lt;br /&gt;Для синхронного варинта - вызываем метод start() у соединения, для активации отправки сообщений, создаем Topic, затем создаем подписчика и получаем сообщения с помощью методов receive() и receiveNoWait().&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;connection.start();&lt;br /&gt;Topic topic = session.createTopic(topicName);     &lt;br /&gt;TopicSubscriber subscriber = session.createDurableSubscriber(topic, bookmark);                 &lt;br /&gt;..&lt;br /&gt;MapMessage message = (MapMessage)subscriber.receive(); &lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;В асинхронном режиме необходимо создать листенер и в нем обрабатывать сообщения.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;MyListener myListener = new MyListener(outStream);&lt;br /&gt;&lt;br /&gt;Topic xlaTopic = session.createTopic(topic);&lt;br /&gt;TopicSubscriber subscriber = session.createDurableSubscriber(xlaTopic, bookmark);&lt;br /&gt;..&lt;br /&gt;subscriber.setMessageListener(myListener);&lt;br /&gt;connection.start();&lt;br /&gt;..&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ниже представлен пример класса, реализующего синхронный режим (файл DemoXLA.java).&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;import java.util.Enumeration;&lt;br /&gt;import java.util.Hashtable;&lt;br /&gt;import javax.jms.JMSException;&lt;br /&gt;import javax.jms.MapMessage;&lt;br /&gt;import javax.jms.Session;&lt;br /&gt;import javax.jms.Topic;&lt;br /&gt;import javax.jms.TopicConnectionFactory;&lt;br /&gt;import javax.jms.TopicConnection;&lt;br /&gt;import javax.jms.TopicSession;&lt;br /&gt;import javax.jms.TopicSubscriber;&lt;br /&gt;import javax.naming.Context;&lt;br /&gt;import javax.naming.InitialContext;&lt;br /&gt;import javax.naming.NamingException;&lt;br /&gt;&lt;br /&gt;public class DemoXLA {&lt;br /&gt;&lt;br /&gt;    private TopicConnectionFactory connectionFactory;&lt;br /&gt;    private TopicConnection connection;&lt;br /&gt;    private TopicSession session;&lt;br /&gt;    private Topic topic;&lt;br /&gt;    private TopicSubscriber subscriber;&lt;br /&gt;&lt;br /&gt;    public DemoXLA( String cf, &lt;br /&gt;                    String topicName, &lt;br /&gt;                    String selector) throws JMSException, NamingException {&lt;br /&gt;        String key;&lt;br /&gt;        Context messaging = getInitialContext(); // getting the context&lt;br /&gt;&lt;br /&gt; connectionFactory = (TopicConnectionFactory)messaging.lookup(cf);        &lt;br /&gt; connection = connectionFactory.createTopicConnection();&lt;br /&gt; connection.start();                        &lt;br /&gt; session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);                &lt;br /&gt;        &lt;br /&gt; topic = session.createTopic(topicName);     &lt;br /&gt;        subscriber = session.createDurableSubscriber(topic, selector);                 &lt;br /&gt;        int i=0;&lt;br /&gt;        while (i&amp;lt;10) {&lt;br /&gt;            MapMessage message = (MapMessage)subscriber.receive();                        &lt;br /&gt;            Enumeration e = message.getMapNames();&lt;br /&gt;&lt;br /&gt;            while (e.hasMoreElements()) {&lt;br /&gt;                key = (String)e.nextElement();&lt;br /&gt;                System.out.println("[ " + key + " = " + message.getObject(key) + " ]");&lt;br /&gt;            }&lt;br /&gt;            System.out.println("----------------------------------------");                        &lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        session.unsubscribe(selector);&lt;br /&gt;        subscriber.close();&lt;br /&gt;        session.close();&lt;br /&gt;        connection.stop();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private Context getInitialContext() throws NamingException {&lt;br /&gt;        Hashtable env = new Hashtable();&lt;br /&gt;        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.timesten.dataserver.jmsxla.SimpleInitialContextFactory");        &lt;br /&gt;        InitialContext initialContext = new InitialContext(env);&lt;br /&gt;        return initialContext;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) throws JMSException, NamingException {&lt;br /&gt;        DemoXLA demo = new DemoXLA("TopicConnectionFactory", "Level2Demo", "bookmark");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Ниже представлен пример классов, реализующих асинхронный режим (MyListener.java, DemoXLA2.java).  MyListener.java  &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;import java.util.Enumeration;&lt;br /&gt;import javax.jms.JMSException;&lt;br /&gt;import javax.jms.MapMessage;&lt;br /&gt;import javax.jms.Message;&lt;br /&gt;import javax.jms.MessageListener;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class MyListener implements MessageListener   {&lt;br /&gt;    public MyListener() {}&lt;br /&gt;&lt;br /&gt;    public void onMessage(Message message) {&lt;br /&gt;        MapMessage mp = (MapMessage)message;&lt;br /&gt;        Enumeration e;&lt;br /&gt;        try {&lt;br /&gt;            e = mp.getMapNames();&lt;br /&gt;        } catch (JMSException s) {&lt;br /&gt;            e = null;&lt;br /&gt;            System.out.println("error 1");&lt;br /&gt;        }&lt;br /&gt;        while (e.hasMoreElements()) {&lt;br /&gt;            String key = (String)e.nextElement();&lt;br /&gt;            try {&lt;br /&gt;                System.out.println("[ " + key + " = " + mp.getObject(key) + " ]");&lt;br /&gt;            } catch (JMSException f) {&lt;br /&gt;                System.out.println("error 2");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        System.out.println("----------------------------------------");&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;DemoXLA2.java  &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;import java.util.Hashtable;&lt;br /&gt;import javax.jms.JMSException;&lt;br /&gt;import javax.jms.Session;&lt;br /&gt;import javax.jms.Topic;&lt;br /&gt;import javax.jms.TopicConnectionFactory;&lt;br /&gt;import javax.jms.TopicSession;&lt;br /&gt;import javax.jms.TopicSubscriber;&lt;br /&gt;import javax.naming.Context;&lt;br /&gt;import javax.naming.InitialContext;&lt;br /&gt;import javax.naming.NamingException;&lt;br /&gt;&lt;br /&gt;public class DemoXLA2 {&lt;br /&gt;&lt;br /&gt;    private javax.jms.TopicConnectionFactory connectionFactory;&lt;br /&gt;    private javax.jms.TopicConnection connection;&lt;br /&gt;    private TopicSession session;&lt;br /&gt;    private Topic topic;&lt;br /&gt;    private TopicSubscriber subscriber;&lt;br /&gt;&lt;br /&gt;    public DemoXLA2( String cf,&lt;br /&gt;                    String topicName,&lt;br /&gt;                    String selector) throws JMSException, NamingException, InterruptedException {&lt;br /&gt;&lt;br /&gt;        Context messaging = getInitialContext();&lt;br /&gt;        Object connectionFactoryObject = messaging.lookup(cf);&lt;br /&gt;        connectionFactory = (TopicConnectionFactory)connectionFactoryObject;&lt;br /&gt;        connection = connectionFactory.createTopicConnection();&lt;br /&gt;&lt;br /&gt;        MyListener myListener = new MyListener();&lt;br /&gt;        session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);&lt;br /&gt;        topic = session.createTopic(topicName);&lt;br /&gt;        subscriber = session.createDurableSubscriber(topic, selector);&amp;nbsp;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;subscriber.setMessageListener(myListener);&lt;br /&gt;        connection.start();&lt;br /&gt;        Thread.sleep(60000);&lt;br /&gt;&lt;br /&gt;        session.unsubscribe(selector);&lt;br /&gt;        subscriber.close();&lt;br /&gt;        session.close();&lt;br /&gt;        connection.stop();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private Context getInitialContext() throws NamingException {&lt;br /&gt;        Hashtable env = new Hashtable();&lt;br /&gt;        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.timesten.dataserver.jmsxla.SimpleInitialContextFactory");&lt;br /&gt;        InitialContext initialContext = new InitialContext(env);&lt;br /&gt;        return initialContext;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) throws JMSException,&lt;br /&gt;                                                  NamingException,&lt;br /&gt;                                                  InterruptedException {&lt;br /&gt;        DemoXLA2 demo = new DemoXLA2("TopicConnectionFactory", "xlademo", "bookmark");&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Далее, запускаем любой из примеров и попытаемся внести, изменить и удалить данные из таблицы xlatest.  &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; insert into xlatest values (2, 'w');&lt;br /&gt;1 row inserted.&lt;br /&gt;Command&amp;gt; update xlatest set name = 'test' where id=2;&lt;br /&gt;1 row updated.&lt;br /&gt;Command&amp;gt; delete from xlatest;&lt;br /&gt;1 row deleted.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;Соответственно, в приложении получаем:  &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[ __TYPE = 10 ]&lt;br /&gt;[ __COMMIT = true ]&lt;br /&gt;[ __FIRST = true ]&lt;br /&gt;[ __NULLS =  ]&lt;br /&gt;[ __TBLNAME = XLATEST ]&lt;br /&gt;[ __TBLOWNER = ORATT ]&lt;br /&gt;[ __mver = 5621355056449191939 ]&lt;br /&gt;[ __mtyp = null ]&lt;br /&gt;[ ID = 2 ]&lt;br /&gt;[ NAME = w ]&lt;br /&gt;----------------------------------------&lt;br /&gt;[ __TYPE = 11 ]&lt;br /&gt;[ __COMMIT = true ]&lt;br /&gt;[ __FIRST = true ]&lt;br /&gt;[ __UPDCOLS = NAME ]&lt;br /&gt;[ __NULLS =  ]&lt;br /&gt;[ __TBLNAME = XLATEST ]&lt;br /&gt;[ __TBLOWNER = ORATT ]&lt;br /&gt;[ __mver = 5621355056449191942 ]&lt;br /&gt;[ __mtyp = null ]&lt;br /&gt;[ _ID = 2 ]&lt;br /&gt;[ ID = 2 ]&lt;br /&gt;[ _NAME = w ]&lt;br /&gt;[ NAME = test ]&lt;br /&gt;----------------------------------------&lt;br /&gt;[ __TYPE = 12 ]&lt;br /&gt;[ __COMMIT = true ]&lt;br /&gt;[ __FIRST = true ]&lt;br /&gt;[ __NULLS =  ]&lt;br /&gt;[ __TBLNAME = XLATEST ]&lt;br /&gt;[ __TBLOWNER = ORATT ]&lt;br /&gt;[ __mver = 5621355056449191945 ]&lt;br /&gt;[ __mtyp = D ]&lt;br /&gt;[ ID = 2 ]&lt;br /&gt;[ NAME = test ]&lt;br /&gt;----------------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видно, мы получили сообщения о прошедших с таблицей xlatest операциях.&lt;br /&gt;Сообщения имеют следующий формат:&lt;br /&gt;Системные атрибуты начинаются с двойного подчеркивания, например:&lt;br /&gt;__TYPE - тип операции (Insert (10), Update(11), Delete(12)) также возможны другие типы (см. документацию). Для определения типа операции присутствуют константы.&lt;br /&gt;__COMMIT - сигнализирует об завершении транзакции (если true).&lt;br /&gt;__FIRST - сигнализирует о первой операции в транзакции (если true).&lt;br /&gt;__TBLNAME - имя таблицы&lt;br /&gt;__TBLOWNER - владелец таблицы&lt;br /&gt;__NULLS - сигнализирует об атрибутах, в которых содержется значение null&lt;br /&gt;__mver и __mtyp - системные атрибуты.&lt;br /&gt;и т.д. (см. документацию)&lt;br /&gt;Атрибуты без подчеркивания - колонки таблиц, имеющие определенные значения, например:&lt;br /&gt;[ ID = 2 ]&lt;br /&gt;[ NAME = test ]&lt;br /&gt;Атрибуты начинающиеся на одно подчеркивание - старые значения полей (появляются при операции Update), например:&lt;br /&gt;[ _ID = 2 ]&lt;br /&gt;[ ID = 2 ]&lt;br /&gt;[ _NAME = w ]&lt;br /&gt;[ NAME = test ]&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Итог&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Следовательно, имея достаточно поверхностные знания по java, можно написать XLA приложение, которое может обрабатывать различные сообщения, полученнные из TimesTen. Кроме того, XLA приложение работает в асинхронном режиме, что практически не влияет на производительность Oracle TimesTen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-874212988039673866?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/874212988039673866/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=874212988039673866&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/874212988039673866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/874212988039673866'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/06/timesten-xla-application.html' title='Триггеры в TimesTen (XLA application)'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-3091047578369879186</id><published>2011-06-14T11:41:00.006+04:00</published><updated>2011-12-22T23:38:03.388+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><category scheme='http://www.blogger.com/atom/ns#' term='Cache'/><title type='text'>Доступ ко всем данным из TimesTen (Passthrough=1)</title><content type='html'>Недавно ко мне обратился заказчик с задачей: &lt;br /&gt;существуют "огромные партиционированные таблицы (терабайты данных), к части из которых идет частое обращение. Возможно ли чтобы из ТТ были доступны определенные партиции, а остальные брались из оракла по тому же подключению ТТ".&lt;br /&gt;&lt;br /&gt;Попробуем решить данную задачу.&lt;br /&gt;&lt;br /&gt;Предположим у насть есть партицированная таблица в Oracle Database. &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 cache_article]$ sqlplus oratt/oracle@orcl&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.1.0.7.0 - Production on Tue May 24 09:22:15 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2008, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; create table accounts (&lt;br /&gt;  2  Id number,&lt;br /&gt;  3  Name varchar2 (50),&lt;br /&gt;  4  Surname varchar2(50),&lt;br /&gt;  5  constraint accounts_pk primary key (id)&lt;br /&gt;  6      using index (create unique index account_pk_idx on accounts(id))&lt;br /&gt;  7  )&lt;br /&gt;  8  partition by range (id) (&lt;br /&gt;  9  partition part1 values less than (1000),&lt;br /&gt; 10  partition part2 values less than (2000),&lt;br /&gt; 11  partition part3 values less than (3000)&lt;br /&gt; 12  );&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; begin&lt;br /&gt;2  for i in 1 .. 100 loop&lt;br /&gt;3    insert into accounts values (i, 'Pit'||i, 'Jounes'||i);&lt;br /&gt;4  end loop;&lt;br /&gt;5 end;&lt;br /&gt;6/&lt;br /&gt;  &lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; begin&lt;br /&gt;2  for i in 1001 .. 1100 loop&lt;br /&gt;3    insert into accounts values (i, 'Pit'||i, 'Jounes'||i);&lt;br /&gt;4  end loop;&lt;br /&gt;5 end;&lt;br /&gt;6/&lt;br /&gt;  &lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; begin&lt;br /&gt;2  for i in 2001 .. 2100 loop&lt;br /&gt;3    insert into accounts values (i, 'Pit'||i, 'Jounes'||i);&lt;br /&gt;4  end loop;&lt;br /&gt;5 end;&lt;br /&gt;6/&lt;br /&gt;  &lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select count(*) from accounts;&lt;br /&gt;&lt;br /&gt;  COUNT(*)&lt;br /&gt;----------&lt;br /&gt;       300&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; grant select on accounts to cacheadmin;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Предположим, что частое обращение происходит к первой партиции, т.е. будем кэшировать первую партицию (ограничим ее условием where в определении кэш группы). &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE READONLY CACHE GROUP read_cg&lt;br /&gt;       &amp;gt;   AUTOREFRESH INTERVAL 5 SECONDS&lt;br /&gt;       &amp;gt; FROM oratt.accounts (   Id number not null primary key,&lt;br /&gt;       &amp;gt;                       Name varchar2 (50),&lt;br /&gt;       &amp;gt;                    Surname varchar2(50)&lt;br /&gt;       &amp;gt; ) &lt;b&gt;where id &amp;lt;= 999&lt;/b&gt;;&lt;br /&gt;Command&amp;gt; load cache group read_cg commit every 265 rows;&lt;br /&gt;100 cache instances affected.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Но как получить данные из других партиций?&lt;br /&gt;Для этого будем использовать параметр Passthrough.&lt;br /&gt;Если данный параметр имеет значение 1, то каждый запрос, выполненный к несуществующим обектам в TimesTen будет перенаправлен в Oracle Database для исполнения.&lt;br /&gt;&lt;br /&gt;Следовательно, создаем представление в Oracle Database, которое будет содержать данные из остальных партиций.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; create view accounts_all as select * from accounts where id &amp;gt; 999;&lt;br /&gt;&lt;br /&gt;View created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; grant select on accounts_all to cacheadmin;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;После чего можем иметь доступ ко всей информации через одно подключение (но, к сожалению, через разные таблицы).&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; connect "DSN=db_cache1;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache1;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache1;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=32;TempSize=50;TypeMode=0;PLSQL_TIMEOUT=1000;CacheGridEnable=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; select count(*) from accounts;&lt;br /&gt;&amp;lt; 100 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; select count(*) from accounts_all;&lt;br /&gt; 2206: Table ORATT.ACCOUNTS_ALL not found&lt;br /&gt;The command failed.&lt;br /&gt;Command&amp;gt; set autocommit 0;&lt;br /&gt;Command&amp;gt; call ttOptSetFlag('PassThrough', 1);&lt;br /&gt;Command&amp;gt; select count(*) from accounts_all;&lt;br /&gt;&amp;lt; 200 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;Command&amp;gt; set showplan 1;&lt;br /&gt;Command&amp;gt; select count(*) from accounts;&lt;br /&gt;&lt;br /&gt;Query Optimizer Plan:&lt;br /&gt;&lt;br /&gt;  STEP:                1&lt;br /&gt;  LEVEL:               1&lt;br /&gt;  OPERATION:           TblLkSerialScan&lt;br /&gt;  TBLNAME:             ACCOUNTS&lt;br /&gt;  IXNAME:              &lt;null&gt;&lt;br /&gt;  INDEXED CONDITION:   &lt;null&gt;&lt;br /&gt;  NOT INDEXED:         &lt;null&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; 100 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;  select count(*) from accounts_all;&lt;br /&gt;&lt;br /&gt;Query Optimizer Plan:&lt;br /&gt;&lt;br /&gt;  STEP:                1&lt;br /&gt;  LEVEL:               1&lt;br /&gt;  OPERATION:           Oracle PassThrough&lt;br /&gt;  TBLNAME:             &lt;null&gt;&lt;br /&gt;  IXNAME:              &lt;null&gt;&lt;br /&gt;  INDEXED CONDITION:   &lt;null&gt;&lt;br /&gt;  NOT INDEXED:         &lt;null&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; 200 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/pre&gt;&lt;br /&gt;Следовательно, получили доступ ко всей таблице Accounts через одно подключение в Oracle TimesTen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-3091047578369879186?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/3091047578369879186/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=3091047578369879186&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3091047578369879186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3091047578369879186'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/06/timesten-passthrough1.html' title='Доступ ко всем данным из TimesTen (Passthrough=1)'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-3803276898906168652</id><published>2011-05-04T10:27:00.004+04:00</published><updated>2011-05-04T14:14:42.641+04:00</updated><title type='text'>Igor Melnikov's Blog!!!</title><content type='html'>I wrote about&amp;nbsp;&lt;a href="http://ggsig.blogspot.com/2011/03/russian-exadata-man.html"&gt;Russian Exadata-man - Igor Melnikov!&amp;nbsp;&lt;/a&gt;&lt;br /&gt;And now he is starting the technical &lt;a href="http://www.igormelnikov.com/"&gt;blog!&lt;/a&gt;&lt;br /&gt;Welcome!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-3803276898906168652?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/3803276898906168652/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=3803276898906168652&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3803276898906168652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3803276898906168652'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/05/igor-melnokov-blog.html' title='Igor Melnikov&apos;s Blog!!!'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-1686800597382096714</id><published>2011-04-21T14:17:00.004+04:00</published><updated>2011-12-22T23:38:33.002+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><category scheme='http://www.blogger.com/atom/ns#' term='Cache'/><title type='text'>In-Memory Database Cache Grid</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-UzuxxCIIrlE/TbAD3duTHrI/AAAAAAAAACs/DyX9k6WHn_U/s1600/IMG_1148.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-UzuxxCIIrlE/TbAD3duTHrI/AAAAAAAAACs/DyX9k6WHn_U/s320/IMG_1148.JPG" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;Ну вот я наконец то добрался до рассмотрения появившегося в TimesTen 11g функционала - In-Memory Database Cache Grid.&lt;br /&gt;Начнем с настройки. В документации процесс создания Cache grid на нескольких машинах описан, на мой взгляд, не досточно четко, поэтому я и решил начать с его конфигурации.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Используемое окружение (три виртуальные машины):&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;OEL 5.3 (x86) - Oracle Database EE 11.2.0.2.0 – 192.168.2.131 (hostname - db)&lt;br /&gt;OEL 5.3 (x86) - Oracle TimesTen 11.2.1.7.0 (32 bit Linux/x86) – 192.168.2.132 (hostname – tt1)&lt;br /&gt;OEL 5.3 (x86) - Oracle TimesTen 11.2.1.7.0 (32 bit Linux/x86) – 192.168.2.133 (hostname – tt2)&lt;br /&gt;&lt;br /&gt;Предварительная настройка для кэш грида, в общем, очень похожа на настройку TimesTen для работы с Oracle Database (об этом можно почитать &lt;a href="http://ggsig.blogspot.com/2011/04/tech-in-memory-database-cache-11g.html"&gt;здесь&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Первоначально, создадим системные объекты и пользователя, с объектами которого будем работать, в Oracle Database.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 cache_article]$ sqlplus sys/oracle@orcl as sysdba&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.1.0.7.0 - Production on Mon Apr 11 02:57:11 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2008, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; create tablespace timesten_tbls&lt;br /&gt;  2  /&lt;br /&gt;&lt;br /&gt;Tablespace created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; create user oratt identified by oracle default tablespace timesten_tbls&lt;br /&gt;  2  /&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; grant create session, resource to oratt&lt;br /&gt;  2  /&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; create user cacheadmin identified by oracle default tablespace timesten_tbls quota unlimited on timesten_tbls&lt;br /&gt;  2  /&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; @/u01/app/oracle/product/11.2.1/TimesTen/tt1/oraclescripts/initCacheGlobalSchema.sql "timesten_tbls"&lt;br /&gt;&lt;br /&gt;Please enter the tablespace where TIMESTEN user is to be created&lt;br /&gt;The value chosen for tablespace is timesten_tbls&lt;br /&gt;&lt;br /&gt;******* Creation of TIMESTEN schema and TT_CACHE_ADMIN_ROLE starts *******&lt;br /&gt;1. Creating TIMESTEN schema&lt;br /&gt;2. Creating TIMESTEN.TT_GRIDID table&lt;br /&gt;3. Creating TIMESTEN.TT_GRIDINFO table&lt;br /&gt;4. Creating TT_CACHE_ADMIN_ROLE role&lt;br /&gt;5. Granting privileges to TT_CACHE_ADMIN_ROLE&lt;br /&gt;** Creation of TIMESTEN schema and TT_CACHE_ADMIN_ROLE done successfully **&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; @/u01/app/oracle/product/11.2.1/TimesTen/tt1/oraclescripts/grantCacheAdminPrivileges "cacheadmin"&lt;br /&gt;&lt;br /&gt;Please enter the administrator user id&lt;br /&gt;The value chosen for administrator user id is cacheadmin&lt;br /&gt;&lt;br /&gt;***************** Initialization for cache admin begins ******************&lt;br /&gt;0. Granting the CREATE SESSION privilege to CACHEADMIN&lt;br /&gt;1. Granting the TT_CACHE_ADMIN_ROLE to CACHEADMIN&lt;br /&gt;2. Granting the DBMS_LOCK package privilege to CACHEADMIN&lt;br /&gt;3. Granting the RESOURCE  privilege to CACHEADMIN&lt;br /&gt;4. Granting the CREATE PROCEDURE  privilege to CACHEADMIN&lt;br /&gt;5. Granting the CREATE ANY TRIGGER  privilege to CACHEADMIN&lt;br /&gt;6. Granting the DBMS_LOB package privilege to CACHEADMIN&lt;br /&gt;7. Granting the SELECT on SYS.ALL_OBJECTS privilege to CACHEADMIN&lt;br /&gt;8. Granting the SELECT on SYS.ALL_SYNONYMS privilege to CACHEADMIN&lt;br /&gt;9. Checking if the cache administrator user has permissions on the default&lt;br /&gt;tablespace&lt;br /&gt;     Permission exists&lt;br /&gt;11. Granting the CREATE ANY TYPE privilege to CACHEADMIN&lt;br /&gt;********* Initialization for cache admin user done successfully *********&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;На этом, настройки в Oracle Database завершены. Преступим к настройкам в TimesTen.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Настройка на узле tt1&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Создадим DSN и активируем возможность создания грида. Для этого явно зададим атрибут CachegridEnable( по умолчанию он имеет значение 1).&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[db_сache1]&lt;br /&gt;Driver=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so&lt;br /&gt;DataStore=/u01/app/oracle/datastore/db_cache1&lt;br /&gt;PermSize=100&lt;br /&gt;TempSize=32&lt;br /&gt;PLSQL=1&lt;br /&gt;DatabaseCharacterSet= WE8MSWIN1252&lt;br /&gt;&lt;b&gt;CachegridEnable=1&lt;/b&gt;&lt;br /&gt;OracleNetServiceName=ORCL&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Создадим необходимых пользователей в TimesTen.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 cache_article]$ ttisql db_cache1&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2010, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;connect "DSN=db_cache1";&lt;br /&gt;Connection successful: DSN=db_cache1;UID=oracle;DataStore=/u01/app/oracle/datastore/db_cache1;&lt;br /&gt;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;&lt;br /&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=50;TempSize=32;TypeMode=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; create user cacheadmin identified by oracle;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; grant create session, cache_manager, create any table, drop any table to cacheadmin;&lt;br /&gt;&lt;br /&gt;Command&amp;gt; create user oratt identified by oracle;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; grant create session to oratt;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее установим имя и пароль кэш администратора в Oracle Database.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; connect "DSN=db_cache1;UID=cacheadmin;PWD=oracle;OraclePWD=oracle";&lt;br /&gt;Connection successful: DSN=db_cache1;UID=cacheadmin;DataStore=/u01/app/oracle/datastore/db_cache1;&lt;br /&gt;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;&lt;br /&gt;PermSize=50;TempSize=32;TypeMode=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;con1: Command&amp;gt; call ttCacheUidPwdSet('cacheadmin','oracle');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее, создаем грид и устанавливаем имя грида с datastore. После чего, запускаем кэш агент.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;con1: Command&amp;gt; call ttGridCreate('myGrid');&lt;br /&gt;con1: Command&amp;gt; call ttGridInfo;&lt;br /&gt;&amp;lt; MYGRID, CACHEADMIN, Linux Intel x86, 32-bit, 11, 2, 1 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;con1: Command&amp;gt; call ttGridNameSet('myGrid');&lt;br /&gt;con1: Command&amp;gt; call ttCacheStart;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Последний шаг, это "присоединение" узла к гриду.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;con1: Command&amp;gt; call ttGridNodeStatus;&lt;br /&gt;0 rows found.&lt;br /&gt;con1: Command&amp;gt; call ttGridAttach(1, 'tt1', 'tt1', 5002);&lt;br /&gt;con1: Command&amp;gt; call ttGridNodeStatus;&lt;br /&gt;&amp;lt; MYGRID, 1, 1, T, tt1, MYGRID_tt1_1, 192.168.2.132, 5002, &amp;lt;null&amp;gt;, &amp;lt;null&amp;gt;, &amp;lt;null&amp;gt;, &amp;lt;null&amp;gt;, &amp;lt;null&amp;gt; &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;u&gt;Настройка на узле tt2&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;На втором узле (или любом последующем узле, который вы хотите включить в грид), необходимо выполнить теже действия, что и на узле tt1. Только создавать grid не нужно, т.к. он уже создан.&lt;br /&gt;Выполним эти действия.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt2 cache_article]$ ttisql db_cache2&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2010, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;connect "DSN=db_cache2";&lt;br /&gt;Connection successful: DSN=db_cache2;UID=oracle;DataStore=/u01/app/oracle/datastore/db_cache2;&lt;br /&gt;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;&lt;br /&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt2/lib/libtten.so;&lt;br /&gt;PermSize=32;TempSize=32;TypeMode=0;PLSQL_TIMEOUT=1000;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; create user cacheadmin identified by oracle;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; grant create session, cache_manager, create any table, drop any table to cacheadmin;&lt;br /&gt;&lt;br /&gt;Command&amp;gt; create user oratt identified by oracle;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; grant create session to oratt;&lt;br /&gt;Command&amp;gt; connect "DSN=db_cache2;UID=cacheadmin;PWD=oracle;OraclePWD=oracle";&lt;br /&gt;connect "DSN=db_cache2;UID=cacheadmin;PWD=oracle;OraclePWD=oracle";&lt;br /&gt;Connection successful: DSN=db_cache2;UID=cacheadmin;DataStore=/u01/app/oracle/datastore/db_cache2;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt2/lib/libtten.so;&lt;br /&gt;PermSize=32;TempSize=32;TypeMode=0;PLSQL_TIMEOUT=1000;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;con1: Command&amp;gt; call ttCacheUidPwdSet('cacheadmin','oracle');&lt;br /&gt;con1: Command&amp;gt; call ttGridInfo;&lt;br /&gt;&amp;lt; MYGRID, CACHEADMIN, Linux Intel x86, 32-bit, 11, 2, 1 &amp;gt;&lt;br /&gt;con1: Command&amp;gt; call ttGridNameSet('myGrid');&lt;br /&gt;con1: Command&amp;gt; call ttCacheStart;&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Далее, подсоединим данный узел к гриду.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt;  call ttGridNodeStatus;&lt;br /&gt;&amp;lt; MYGRID, 1, 1, T, tt1, MYGRID_tt1_1, 192.168.2.132, 5002, &lt;null&gt;, &lt;null&gt;, &lt;null&gt;, &lt;null&gt;, &lt;null&gt; &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; call ttGridAttach(1, 'tt2', 'tt2', 5002);&lt;br /&gt;Command&amp;gt; call ttGridNodeStatus;&lt;br /&gt;&amp;lt; MYGRID, 1, 1, T, tt1, MYGRID_tt1_1, 192.168.2.132, 5002, &lt;null&gt;, &lt;null&gt;, &lt;null&gt;, &lt;null&gt;, &lt;null&gt; &amp;gt;&lt;br /&gt;&amp;lt; MYGRID, 2, 1, T, tt2, MYGRID_tt2_2, 192.168.2.133, 5002, &lt;null&gt;, &lt;null&gt;, &lt;null&gt;, &lt;null&gt;, &lt;null&gt; &amp;gt;&lt;br /&gt;2 rows found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/pre&gt;&lt;br /&gt;На этом конфигурация грида закончена.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Read only Cache Grid&lt;/u&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;В данном пункте рассмотрим работу Cache Grid с read only кэш группами.&lt;br /&gt;&lt;br /&gt;Первоначально создадим таблицу в Oracle Database, которую будем кэшировать, и наполним ее данными.Также предоставим необходимые привилегии кэш администратору.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@db ~]$ sqlplus oratt/oracle&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.2.0.2.0 Production on Mon Apr 18 08:22:13 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2010, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; create table readtab ( a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;2                        b VARCHAR2(100));&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select count(*) from readtab;&lt;br /&gt;&lt;br /&gt;COUNT(*)&lt;br /&gt;----------&lt;br /&gt;0&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; begin&lt;br /&gt;for i in 1 .. 10000  loop&lt;br /&gt;insert into readtab values (i,'db');&lt;br /&gt;end loop;&lt;br /&gt;end;&lt;br /&gt;/&lt;br /&gt;2    3    4    5    6&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select count(*) from readtab;&lt;br /&gt;&lt;br /&gt;COUNT(*)&lt;br /&gt;----------&lt;br /&gt;10000&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; grant select on readtab to cacheadmin;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Теперь создадим и загрузим кэш группы на узлах tt1 и tt2. Данную команду нужно выполнить на обоих узлах.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE READONLY CACHE GROUP readcache&lt;br /&gt;&amp;gt;    AUTOREFRESH INTERVAL&lt;br /&gt;&amp;gt;    5 SECONDS&lt;br /&gt;&amp;gt;  FROM oratt.readtab ( a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;&amp;gt;                       b VARCHAR2(100) );&lt;br /&gt;Command&amp;gt; load cache group readcache commit every 265 rows;&lt;br /&gt;10000 cache instances affected.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь проверим работу кэш грида.&lt;br /&gt;Для выполнения распределенного запроса, необходимо на уровне сессии установить флаг 'GlobalProcessing' в значение 1. Для этого необходимо воспользоваться функцией ttOptSetFlag. Перед этим необходимо отключить autocommit.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; connect "DSN=db_cache1;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache1;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache1;&lt;br /&gt;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;&lt;br /&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;&lt;br /&gt;PermSize=32;TempSize=50;TypeMode=0;PLSQL_TIMEOUT=1000;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; select count(*) from readtab;&lt;br /&gt;&amp;lt; 10000 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; set autocommit 0;&lt;br /&gt;Command&amp;gt; call ttOptSetFlag('GlobalProcessing',1);&lt;br /&gt;Command&amp;gt; call ttOptGetFlag('GlobalProcessing');&lt;br /&gt;&amp;lt; GlobalProcessing, 1 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; select count(*) from readtab;&lt;br /&gt;&amp;lt; 20000 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видим, при выполнени распределенного запроса, объем данных увеличился вдвое, т.е. записи задвоились.Поэтому, если у вас есть TimesTen и вы планируете с помощью Grid увеличить объем read only данных, вы должны учитывать, что при создании read only кэш групп, данные кэшируются не глобально, а локально!!! Т.е. по сути, Grid в для read only КЭШ ГРУПП - это только возможность выполнять глобальные запросы и все. Именно поэтому в определении кэш группы нет ключевого слова global. &lt;br /&gt;Так что данную задачу можно решить, к сожалению, только сегментируя данные.&lt;br /&gt;Например, на уровне создания кэш групп.&lt;br /&gt;&lt;br /&gt;Пример.&lt;br /&gt;На одном узле (tt1) выполняем:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE READONLY CACHE GROUP readcache&lt;br /&gt;&amp;gt;    AUTOREFRESH INTERVAL&lt;br /&gt;&amp;gt;    5 SECONDS&lt;br /&gt;&amp;gt;  FROM oratt.readtab ( a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;&amp;gt;                       b VARCHAR2(100) )&lt;br /&gt;&amp;gt; where a &amp;lt;= 5000; Command&amp;gt; load cache group readcache commit every 265 rows;&lt;br /&gt;5000 cache instances affected.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;А на другом узле (tt2):&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE READONLY CACHE GROUP readcache&lt;br /&gt;&amp;gt;    AUTOREFRESH INTERVAL&lt;br /&gt;&amp;gt;    5 SECONDS&lt;br /&gt;&amp;gt;  FROM oratt.readtab ( a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;&amp;gt;                       b VARCHAR2(100) )&lt;br /&gt;&amp;gt; where a &amp;gt;5000;&lt;br /&gt;Command&amp;gt; load cache group readcache commit every 265 rows;&lt;br /&gt;5000 cache instances affected.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Следовательно, при выполнении глобальных запросов мы увидим все множество:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; connect "DSN=db_cache1;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache1;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache1;&lt;br /&gt;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;&lt;br /&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;&lt;br /&gt;PermSize=32;TempSize=50;TypeMode=0;PLSQL_TIMEOUT=1000;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;con1: Command&amp;gt; select max(a) from readtab;&lt;br /&gt;&amp;lt; 5000 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;con1: Command&amp;gt; select count(*) from readtab;&lt;br /&gt;&amp;lt; 5000 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;con1: Command&amp;gt; set autocommit 0;&lt;br /&gt;con1: Command&amp;gt; call ttOptSetFlag('GlobalProcessing',1);&lt;br /&gt;con1: Command&amp;gt; call ttOptGetFlag('GlobalProcessing');&lt;br /&gt;&amp;lt; GlobalProcessing, 1 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;con1: Command&amp;gt; select count(*) from readtab;&lt;br /&gt;&amp;lt; 10000 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;con1: Command&amp;gt; select max(a) from readtab;&lt;br /&gt;&amp;lt; 10000 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Абсолютно также работают все остальные локальные кэш группы, но у AWT кэш групп есть возможность создания в глобальном режиме. Далее рассмотрим работу AWT кэш групп.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;AWT кэш группы в In-Memory DB Cache Grid&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;C версии 11g при создании AWT кэш групп, можно указать ключевое слово Global,&lt;br /&gt;причем, глобальными могут только AWT кэш группы. Следовательно при указании данного слова, мы говорим о создании распределенного кэша.&lt;br /&gt;&lt;br /&gt;Создадим объекты в Oracle DB&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@db ~]$ sqlplus oratt/oracle&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.2.0.2.0 Production on Tue Apr 19 06:33:32 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2010, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; create table awttab ( a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;b VARCHAR2(100));&lt;br /&gt;2&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; begin&lt;br /&gt;for i in 1 .. 100  loop&lt;br /&gt;insert into awttab values (i,'db');&lt;br /&gt;end loop;&lt;br /&gt;end;&lt;br /&gt;2    3    4    5    6  /&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; grant select, insert, update, delete on awttab to cacheadmin;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select count(*) from awttab;&lt;br /&gt;&lt;br /&gt;COUNT(*)&lt;br /&gt;----------&lt;br /&gt;100&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Создадим AWT кэш группу. Данный код необходимо выполнить на обоих узлах.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; create asynchronous writethrough global cache group awtcache&lt;br /&gt;&amp;gt; from oratt.awttab ( a number not null primary key,&lt;br /&gt;&amp;gt;                     b varchar2(100));&lt;br /&gt;Command&amp;gt;&lt;br /&gt;Command&amp;gt; call ttRepStart;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Инициируем первоначальные данные. Загружаем данные на узле tt2.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; dssize;&lt;br /&gt;&lt;br /&gt;  PERM_ALLOCATED_SIZE:      32768&lt;br /&gt;  PERM_IN_USE_SIZE:         5867&lt;br /&gt;  PERM_IN_USE_HIGH_WATER:   5867&lt;br /&gt;  TEMP_ALLOCATED_SIZE:      32768&lt;br /&gt;  TEMP_IN_USE_SIZE:         6789&lt;br /&gt;  TEMP_IN_USE_HIGH_WATER:   7351&lt;br /&gt;&lt;br /&gt;Command&amp;gt; load cache group awtcache commit every 265 rows;&lt;br /&gt;100 cache instances affected.&lt;br /&gt;Command&amp;gt; dssize;&lt;br /&gt;&lt;br /&gt;PERM_ALLOCATED_SIZE:      32768&lt;br /&gt;PERM_IN_USE_SIZE:         5903&lt;br /&gt;PERM_IN_USE_HIGH_WATER:   5903&lt;br /&gt;TEMP_ALLOCATED_SIZE:      32768&lt;br /&gt;TEMP_IN_USE_SIZE:         6800&lt;br /&gt;TEMP_IN_USE_HIGH_WATER:   7351&lt;br /&gt;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Видно, что записи загрузились. Теперь хост tt2 является владельцем данных строк.&lt;br /&gt;Если мы попытаемся загрузить те же записи на узле tt1, то получим ошибку TT3356.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; load cache group awtcache commit every 265 rows;&lt;br /&gt;5056: The cache operation fails: error_type=&lt;timesten error=""&gt;, error_code=&amp;lt;3356&amp;gt;, error_message: [TimesTen]&lt;br /&gt;TT3356: Error loading cache instance from member MYGRID_tt1_1; &lt;br /&gt;some instance is already owned by some member - from grid member MYGRID_tt2_2&lt;br /&gt;The command failed.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/timesten&gt;&lt;/pre&gt;&lt;br /&gt;Т.е. видно, что записи отслеживаются глобально для избежания повторения.&lt;br /&gt;Также, в данной конфигурации можно выполнять глобальные запросы.&lt;br /&gt;&lt;br /&gt;Например:&lt;br /&gt;Узел tt2 содержит 100 строк.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; connect "DSN=db_cache2;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache2;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache2;&lt;br /&gt;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;&lt;br /&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt2/lib/libtten.so;&lt;br /&gt;PermSize=32;TempSize=32;TypeMode=0;PLSQL_TIMEOUT=1000;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; select count(*) from awttab;&lt;br /&gt;&amp;lt; 100 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;На узле tt1 строк нет и выполняя глобальный запрос мы можем получить необходимые строки с узла tt2.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; connect "DSN=db_cache1;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache1;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache1;&lt;br /&gt;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;&lt;br /&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;&lt;br /&gt;PermSize=32;TempSize=50;TypeMode=0;PLSQL_TIMEOUT=1000;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; select count(*) from awttab;&lt;br /&gt;&amp;lt; 0 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; dssize;&lt;br /&gt;&lt;br /&gt;PERM_ALLOCATED_SIZE:      32768&lt;br /&gt;PERM_IN_USE_SIZE:         5867&lt;br /&gt;PERM_IN_USE_HIGH_WATER:   5903&lt;br /&gt;TEMP_ALLOCATED_SIZE:      51200&lt;br /&gt;TEMP_IN_USE_SIZE:         6864&lt;br /&gt;TEMP_IN_USE_HIGH_WATER:   7351&lt;br /&gt;&lt;br /&gt;Command&amp;gt; set autocommit 0;&lt;br /&gt;Command&amp;gt; call ttOptSetFlag('GlobalProcessing',1);&lt;br /&gt;Command&amp;gt; call ttOptGetFlag('GlobalProcessing');&lt;br /&gt;&amp;lt; GlobalProcessing, 1 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; select count(*) from awttab;&lt;br /&gt;&amp;lt; 100 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; dssize;&lt;br /&gt;&lt;br /&gt;PERM_ALLOCATED_SIZE:      32768&lt;br /&gt;PERM_IN_USE_SIZE:         5867&lt;br /&gt;PERM_IN_USE_HIGH_WATER:   5903&lt;br /&gt;TEMP_ALLOCATED_SIZE:      51200&lt;br /&gt;TEMP_IN_USE_SIZE:         6927&lt;br /&gt;TEMP_IN_USE_HIGH_WATER:   7351&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PERM_ALLOCATED_SIZE:      32768&lt;br /&gt;PERM_IN_USE_SIZE:         5903&lt;br /&gt;PERM_IN_USE_HIGH_WATER:   5903&lt;br /&gt;TEMP_ALLOCATED_SIZE:      32768&lt;br /&gt;TEMP_IN_USE_SIZE:         6864&lt;br /&gt;TEMP_IN_USE_HIGH_WATER:   7351&lt;br /&gt;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Кроме того, видно, что при выполнении глобальных операции чтения с удаленных узлов, информация не передается на сторону запрашиваемого узла. &lt;br /&gt;&lt;br /&gt;Также, определить, выполняется ли глобальный запрос или нет, можно с помощью просмотра плана выполнения запроса.&lt;br /&gt;Например:&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; showplan 1;&lt;br /&gt;Command&amp;gt; select count(*) from awttab;&lt;br /&gt;&lt;br /&gt;Query Optimizer Plan:&lt;br /&gt;&lt;br /&gt;STEP:                1&lt;br /&gt;LEVEL:               1&lt;br /&gt;OPERATION:           RowLkSerialScan&lt;br /&gt;TBLNAME:             AWTTAB&lt;br /&gt;IXNAME:              &lt;null&gt;&lt;br /&gt;INDEXED CONDITION:   &lt;null&gt;&lt;br /&gt;NOT INDEXED:         &lt;null&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; 0 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;Command&amp;gt; select * from awttab;&lt;br /&gt;&lt;br /&gt;Query Optimizer Plan:&lt;br /&gt;&lt;br /&gt;STEP:                1&lt;br /&gt;LEVEL:               1&lt;br /&gt;OPERATION:           RowLkTtreeScan&lt;br /&gt;TBLNAME:             AWTTAB&lt;br /&gt;IXNAME:              AWTTAB&lt;br /&gt;INDEXED CONDITION:   &lt;null&gt;&lt;br /&gt;NOT INDEXED:         &lt;null&gt;&lt;br /&gt;&lt;br /&gt;0 rows found.&lt;br /&gt;Command&amp;gt; call ttOptSetFlag('GlobalProcessing',1);&lt;br /&gt;Command&amp;gt; call ttOptGetFlag('GlobalProcessing');&lt;br /&gt;&amp;lt; GlobalProcessing, 1 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;  select count(*) from awttab;&lt;br /&gt;&lt;br /&gt;Query Optimizer Plan:&lt;br /&gt;&lt;br /&gt;STEP:                1&lt;br /&gt;LEVEL:               1&lt;br /&gt;OPERATION:           GridScan&lt;br /&gt;TBLNAME:             &lt;null&gt;&lt;br /&gt;IXNAME:              &lt;null&gt;&lt;br /&gt;INDEXED CONDITION:   &lt;null&gt;&lt;br /&gt;NOT INDEXED:         &lt;null&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt; 100 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/null&gt;&lt;/pre&gt;&lt;br /&gt;Но ,что будет, если мы попытаемся вставить запись с уже существующим идентификатором на узле tt1.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; select * from awttab where a =50;&lt;br /&gt;&amp;lt; 50, db &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; insert into awttab values (50,'tt1');&lt;br /&gt;3342: Inserted key already exists on Oracle or remote node&lt;br /&gt;The command failed.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видно, изменения в строках отслеживается на всех узлах грида.&lt;br /&gt;Но, что же будет с изменением данных? Т.е., что будет, если мы попытаемся изменить &lt;br /&gt;данные на одном узле и прочитать с другого.&lt;br /&gt;&lt;br /&gt;Например:&lt;br /&gt;&lt;br /&gt;Я выполняю update на узле tt2.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; set autocommit 0;&lt;br /&gt;Command&amp;gt; update awttab set b='tt2' where a=1;&lt;br /&gt;1 row updated.&lt;br /&gt;Command&amp;gt; select * from awttab where a=1;&lt;br /&gt;&amp;lt; 1, tt2 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Конечно, у меня появляется эксклюзивная блокировка на данную строку.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt2 ~]$ ttXactAdmin db_cache2&lt;br /&gt;2011-04-19 07:30:58.367&lt;br /&gt;/u01/app/oracle/datastore/db_cache2&lt;br /&gt;TimesTen Release 11.2.1.7.0&lt;br /&gt;&lt;br /&gt;Outstanding locks&lt;br /&gt;&lt;br /&gt;PID     Context    TransID     TransStatus Resource  ResourceID           Mode  SqlCmdID   Name&lt;br /&gt;&lt;br /&gt;Program File Name: ttIsqlCmd&lt;br /&gt;&lt;br /&gt;3754    0x920c740    19.16     Active      Database  0x01312d00           IX    0&lt;br /&gt;Row       BMUFVUAAABcAAAACBA   Xn    34000460   ORATT.AWTTAB                &lt;br /&gt;Table     574836               IXn   34000460   ORATT.AWTTAB&lt;br /&gt;&lt;br /&gt;1 outstanding transaction found&lt;br /&gt;[oracle@tt2 ~]$&lt;/pre&gt;&lt;br /&gt;Пока все отлично, но если я попытаюсь запросить изменяемые данные с другого узла в гриде, я получаю неожиданный результат.&lt;br /&gt;На узле tt1 запрашиваю данные.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; call ttOptSetFlag('GlobalProcessing',1);&lt;br /&gt;Command&amp;gt; call ttOptGetFlag('GlobalProcessing');&lt;br /&gt;&amp;lt; GlobalProcessing, 1 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; select * from  awttab where a=1;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Моя сессия подвисает, а на узле tt2 обнаруживаю&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt2 ~]$ ttXactAdmin db_cache2&lt;br /&gt;2011-04-19 07:37:38.835&lt;br /&gt;/u01/app/oracle/datastore/db_cache2&lt;br /&gt;TimesTen Release 11.2.1.7.0&lt;br /&gt;&lt;br /&gt;Outstanding locks&lt;br /&gt;&lt;br /&gt;PID     Context    TransID     TransStatus Resource  ResourceID           Mode  SqlCmdID   Name&lt;br /&gt;&lt;br /&gt;Program File Name: ttIsqlCmd&lt;br /&gt;&lt;br /&gt;3754    0x920c740    19.18     Active      Database  0x01312d00           IX    0&lt;br /&gt;Row       BMUFVUAAABcAAAACBA   Xn    34000460   ORATT.AWTTAB&lt;br /&gt;Table     574836               IXn   34000460   ORATT.AWTTAB&lt;br /&gt;&lt;br /&gt;Program File Name:&lt;b&gt; timestenorad&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;3775    0xa3ac540    10.4      Active      Database  0x01312d00           IX    0&lt;br /&gt;Table     574836               IXn   0          ORATT.AWTTAB&lt;br /&gt;Row       BMUFVUAAABqAgAAPSU   Xn    0          GRID.AWTTAB_1&lt;br /&gt;Table     574844               IXn   0          GRID.AWTTAB_1&lt;br /&gt;&lt;br /&gt;Awaiting locks&lt;br /&gt;&lt;br /&gt;PID     Context    TransID     Resource  ResourceID           RMode RSqlCmdID  HolderTransID HMode HSqlCmdID  Name&lt;br /&gt;&lt;b&gt;3775    0xa3ac540    10.4      Row       BMUFVUAAABcAAAACBA   Xn    0            19.18       Xn    34000460   ORATT.AWTTAB&lt;/b&gt;&lt;br /&gt;2 outstanding transactions found&lt;br /&gt;[oracle@tt2 ~]$&lt;/pre&gt;&lt;br /&gt;Неожиданно!!! &lt;br /&gt;&lt;br /&gt;Мой простой запрос на узле tt1 инициировал блокировку кэш агента на узле tt2. &lt;br /&gt;Т.е. перед тем как запросить данные, необходимо сбросить изменения в Oracle Database.&lt;br /&gt;Ну и естественно, после таймаута на подвисшей сессии на узле tt1 получил&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;6003: Lock request denied because of time-out&lt;br /&gt;Details: Tran 10.4 (pid 3775) wants Xn lock on rowid BMUFVUAAABcAAAACBA, table ORATT.AWTTAB. &lt;br /&gt;But tran 19.18 (pid 3754) has it in Xn (request was Xn). Holder SQL &lt;br /&gt;(update awttab set b='tt2' where a=1) - from grid member MYGRID_tt2_2&lt;br /&gt;0 rows found.&lt;br /&gt;The command failed.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Процесс 3775 - это pid кэш агента на узле tt2.&lt;br /&gt;Такое поведение кэша стало для меня полной неожиданностью.&lt;br /&gt;&lt;br /&gt;Кроме того, изменение данных может проводить, только владелец объекта.&lt;br /&gt;Например, в моем случае, всеми строками в таблице awttab владеет хост tt2 и если я попытаюсь изменить данные через глобальный запрос с узла tt1, то получу ошибку.&lt;br /&gt;&lt;br /&gt;Пример:&lt;br /&gt;&lt;br /&gt;Узел tt2.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; connect "DSN=db_cache2;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache2;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache2;&lt;br /&gt;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;&lt;br /&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt2/lib/libtten.so;&lt;br /&gt;PermSize=32;TempSize=32;TypeMode=0;PLSQL_TIMEOUT=1000;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; select count(*) from awttab;&lt;br /&gt;&amp;lt; 100 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Узел tt1.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; connect "DSN=db_cache1;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache1;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache1;&lt;br /&gt;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;&lt;br /&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;&lt;br /&gt;PermSize=32;TempSize=50;TypeMode=0;PLSQL_TIMEOUT=1000;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; select * from awttab;&lt;br /&gt;0 rows found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь попытаемся выполнить изменение строки с узла tt1.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; update awttab set b='tt1' where a=30;&lt;br /&gt;805: Global statements other than select and unload has not been implemented&lt;br /&gt;The command failed.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видно, изменения данных может делать только владелец объекта. Но каким образом сделать так, чтобы строки очутились на необходимом узле?&lt;br /&gt;Это можно сделать опять с помощью распределения загружаемых данных или с помощью динамических кэш групп. В TimesTen Cache Grid можно создавать глобальные динамические AWT кэш группы.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Итог&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;На мой взгляд, данная конфигурация имеет свои плюсы и минусы. К минусам можно отнести неудобство, что на каждом из узлов грида необходимо выполнить одни и теже действия (кроме создания грида), изменение данных может проводить только владелец объектов и самое большое ограничение, на мой взгяд, невозможностью причитать изменяемые данные с разных узлов. Но сама по себе возможность выполнения распределенных запросов является безусловным плюсом данной конфигурации и может достаточно эффективно использоваться с read only данными, ну и конечно, будем надеяться, что в последующих версиях, данные недочеты будут устранены.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-1686800597382096714?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/1686800597382096714/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=1686800597382096714&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/1686800597382096714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/1686800597382096714'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/04/in-memory-database-cache-grid.html' title='In-Memory Database Cache Grid'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-UzuxxCIIrlE/TbAD3duTHrI/AAAAAAAAACs/DyX9k6WHn_U/s72-c/IMG_1148.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-142240094640705335</id><published>2011-04-07T09:09:00.004+04:00</published><updated>2011-12-22T23:39:07.220+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><category scheme='http://www.blogger.com/atom/ns#' term='Cache'/><title type='text'>Tech: Настройка In-Memory Database Cache 11g</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-cP9LGwEv_RU/TZ1D0e5ZwVI/AAAAAAAAACo/6qkt-V7zdIE/s1600/IMG_1254.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-cP9LGwEv_RU/TZ1D0e5ZwVI/AAAAAAAAACo/6qkt-V7zdIE/s320/IMG_1254.JPG" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;Давно я что-то не писал не чего технического (да и на русском :) ), вот и решил это исправить. Так как литературы по TimesTen мало, то я решил обновить статью &lt;a href="http://www.oracle.com/technetwork/issue-archive/2006/06-nov/o66timesten-084210.html"&gt;Jonathan Gennick -а&lt;/a&gt; о кэшировании. В данном посте рассматривается возможность кэширования данных из Oracle Database в Oracle TimesTen.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Примечание:&lt;/u&gt; в данной статье не будет рассматриваться функциональность In-Memory Database Cache Grid, т.е. будет рассмотрена возможность создания только локальных кэш групп.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Используемое окружение (две виртуальные машины):&lt;/u&gt;&lt;br /&gt;OEL 5.3 (x86) - Oracle Database EE 11.2.0.2.0 (Linux/x86), ip - 192.168.2.131 (hostname - db)&lt;br /&gt;OEL 5.3 (x86) - Oracle TimesTen 11.2.1.7.0 (Linux/x86), ip - 192.168.2.132 (hostname - tt1)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Предварительная настройка In-Memory Database Cache &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Настройка Oracle Database&amp;nbsp; &lt;/b&gt;&lt;/li&gt;Для работы In-Memory Database Cache необходимо выполнить ряд настроек. Первоначально создадим табличное пространство в Oracle Database для хранения системных объектов, необходимых для работы TimesTen.  &lt;pre class="c-sharp" name="code"&gt;[oracle@db ~]$ sqlplus / as sysdba&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.2.0.2.0 Production on Mon Mar 28 07:53:57 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2010, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; CREATE TABLESPACE timesten_tbls;&lt;br /&gt;&lt;br /&gt;Tablespace created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select tablespace_name, file_name from dba_data_files where tablespace_name='TIMESTEN_TBLS';&lt;br /&gt;&lt;br /&gt;TABLESPACE_NAME         FILE_NAME&lt;br /&gt;----------------------- ------------------------------------------------------------&lt;br /&gt;TIMESTEN_TBLS           /u02/oradata/DB1/datafile/o1_mf_timesten_6s0t74rm_.dbf&lt;br /&gt;&lt;/pre&gt;Теперь создадим необходимые объекты в Oracle Database. Создадим пользователя, объекты которого будем кэшировать. Предоставим данному пользователю минимальный набор привилегий, необходимых для создания таблиц. В данном примере, я буду размещать кэшируемые объекты в том же табличном пространстве, что и системные объекты TimesTen. &lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; create user oratt identified by oracle default tablespace timesten_tbls;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; GRANT CREATE SESSION, RESOURCE TO oratt;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;/pre&gt;Далее, создадим пользователя – администратора кэша.  &lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; CREATE USER cacheadmin IDENTIFIED BY oracle DEFAULT TABLESPACE timesten_tbls QUOTA UNLIMITED ON timesten_tbls;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;/pre&gt;На этом первоначальные настройки с хоста db закончены, но настройки Oracle Database еще не завершены, они будут проводиться с хоста tt1.  Для того, чтобы продолжить настраивать Oracle Database c хоста tt1, необходимо подключиться к базе данных. При установке Oracle TimesTen устанавливается Instant client (11.1.0.7.0), размещенный в директории TimesTen_install_dir/TimesTen/Instance_name/ttoracle_home/instantclient_11_1 и подключение должно осуществляться с помощью данного клиента (остальные способы не поддерживаются). В версии 7.0.5, нужно было отдельно устанавливать клиента, как видим, в версии 11g это уже не нужно. Первоначально, настроим окружение на сервере tt1. Выставим переменные окружения TNS_ADMIN и LD_LIBRARY_PATH. В моем случае, я использую следующее окружение: &lt;pre class="c-sharp" name="code"&gt;export TIMESTEN_HOME=/u01/app/oracle/product/11.2.1/TimesTen/tt1&lt;br /&gt;export TNS_ADMIN=$TIMESTEN_HOME/network/admin&lt;br /&gt;export LD_LIBRARY_PATH=$TIMESTEN_HOME/ttoracle_home/instantclient_11_1&lt;br /&gt;export PATH=$PATH:$HOME/bin:$TIMESTEN_HOME/bin:$LD_LIBRARY_PATH&lt;br /&gt;&lt;/pre&gt;Прописываем сущность в TNSNAMES.ORA  &lt;pre class="c-sharp" name="code"&gt;ORCL =&lt;br /&gt;  (DESCRIPTION =&lt;br /&gt;     (ADDRESS = (PROTOCOL = TCP)(HOST = db)(PORT=1521))&lt;br /&gt;     (CONNECT_DATA =&lt;br /&gt;       (SERVICE_NAME = db1)&lt;br /&gt;     )&lt;br /&gt;)&lt;br /&gt;&lt;/pre&gt;Проверяем подключение. &lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 ~]$ sqlplus sys/oracle@orcl as sysdba&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.1.0.7.0 - Production on Mon Mar 28 07:42:29 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2008, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;Также, сразу установим значение TNS_ADMIN на уровне экземпляра TimesTen. Для этого воспользуемся утилитой ttmodinstall.  &lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 ~]$ /u01/app/oracle/product/11.2.1/TimesTen/tt1/bin/ttmodinstall    The daemon for instance 'tt1' is currently configured to use port 53384.&lt;br /&gt;Would you like to change this port? [ no ]&lt;br /&gt;The server for instance 'tt1' is currently configured to use port 53385.&lt;br /&gt;Would you like to change this port? [ no ]&lt;br /&gt;TNS_ADMIN for the instance 'tt1' is currently not set.&lt;br /&gt;Would you like to change TNS_ADMIN for this instance? [ yes ]&lt;br /&gt;Please enter a value for TNS_ADMIN (q=quit)? [  ] /u01/app/oracle/product/11.2.1/TimesTen/tt1/network/admin&lt;br /&gt;&lt;br /&gt;Do you want to restart the daemon using the new configuration? [ yes ]&lt;br /&gt;Restarting the daemon ...&lt;br /&gt;TimesTen Daemon stopped.&lt;br /&gt;TimesTen Daemon startup OK.&lt;br /&gt;Instance tt1 is now configured with TNS_ADMIN=/u01/app/oracle/product/11.2.1/TimesTen/tt1/network/admin&lt;br /&gt;Would you like to configure TimesTen Replication with Oracle Clusterware? [ no ]&lt;br /&gt;Done ...&lt;br /&gt;[oracle@tt1 ~]$&lt;br /&gt;&lt;/pre&gt;Теперь создадим пользователя timesten. Данный пользователь содержит информацию о cache grid. Для его создания, воспользуемся скриптом initCacheGlobalSchema.sql, расположенным в директории TimesTen_install_dir/TimesTen/Instance_name/oraclescripts  &lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 admin]$ cd /u01/app/oracle/product/11.2.1/TimesTen/tt1/oraclescripts/&lt;br /&gt;[oracle@tt1 oraclescripts]$ ls&lt;br /&gt;cacheCleanUp.sql               initCacheAdminSchema.sql   README.TXT&lt;br /&gt;cacheInfo.sql                  initCacheGlobalSchema.sql&lt;br /&gt;grantCacheAdminPrivileges.sql  initCacheGridSchema.sql&lt;br /&gt;[oracle@tt1 oraclescripts]$ sqlplus sys/oracle@orcl as sysdba &lt;br /&gt;                     &lt;br /&gt;SQL*Plus: Release 11.1.0.7.0 - Production on Mon Mar 28 08:11:02 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2008, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; @initCacheGlobalSchema "timesten_tbls"&lt;br /&gt;&lt;br /&gt;Please enter the tablespace where TIMESTEN user is to be created&lt;br /&gt;The value chosen for tablespace is timesten_tbls&lt;br /&gt;&lt;br /&gt;******* Creation of TIMESTEN schema and TT_CACHE_ADMIN_ROLE starts *******&lt;br /&gt;1. Creating TIMESTEN schema&lt;br /&gt;2. Creating TIMESTEN.TT_GRIDID table&lt;br /&gt;3. Creating TIMESTEN.TT_GRIDINFO table&lt;br /&gt;4. Creating TT_CACHE_ADMIN_ROLE role&lt;br /&gt;5. Granting privileges to TT_CACHE_ADMIN_ROLE&lt;br /&gt;** Creation of TIMESTEN schema and TT_CACHE_ADMIN_ROLE done successfully **&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Также, предоставим привилегии, ранее созданному администратору кэша. Для этого воспользуемся скриптом  grantCacheAdminPrivileges.sql   &lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; @grantCacheAdminPrivileges "cacheadmin"&lt;br /&gt;&lt;br /&gt;Please enter the administrator user id&lt;br /&gt;The value chosen for administrator user id is cacheadmin&lt;br /&gt;&lt;br /&gt;***************** Initialization for cache admin begins ******************&lt;br /&gt;0. Granting the CREATE SESSION privilege to CACHEADMIN&lt;br /&gt;1. Granting the TT_CACHE_ADMIN_ROLE to CACHEADMIN&lt;br /&gt;2. Granting the DBMS_LOCK package privilege to CACHEADMIN&lt;br /&gt;3. Granting the RESOURCE  privilege to CACHEADMIN&lt;br /&gt;4. Granting the CREATE PROCEDURE  privilege to CACHEADMIN&lt;br /&gt;5. Granting the CREATE ANY TRIGGER  privilege to CACHEADMIN&lt;br /&gt;6. Granting the DBMS_LOB package privilege to CACHEADMIN&lt;br /&gt;7. Granting the SELECT on SYS.ALL_OBJECTS privilege to CACHEADMIN&lt;br /&gt;8. Granting the SELECT on SYS.ALL_SYNONYMS privilege to CACHEADMIN&lt;br /&gt;9. Checking if the cache administrator user has permissions on the default&lt;br /&gt;tablespace&lt;br /&gt;     Permission exists&lt;br /&gt;11. Granting the CREATE ANY TYPE privilege to CACHEADMIN&lt;br /&gt;********* Initialization for cache admin user done successfully *********&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Набор привилегий, который необходим кэш администратору зависит от типа кэш групп, которые планируется создать. В дальнейшем данный набор привилегий будет расширен.  На этом, предварительная настройка Oracle Database завершена. &lt;pre class="c-sharp" name="code"&gt;&lt;/pre&gt;&lt;li&gt;&lt;b&gt;Настройка в TimesTen&lt;/b&gt;&lt;/li&gt;&lt;pre class="c-sharp" name="code"&gt;&lt;/pre&gt;Теперь приступим к настройке TimesTen. Проверим состояние экземпляра.  &lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 ~]$ ttstatus&lt;br /&gt;TimesTen status report as of Tue Mar 29 09:40:19 2011&lt;br /&gt;&lt;br /&gt;Daemon pid 4392 port 53384 instance tt1&lt;br /&gt;TimesTen server pid 4400 started on port 53385&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;Accessible by group oinstall&lt;br /&gt;End of report&lt;br /&gt;[oracle@tt1 ~]$&lt;br /&gt;&lt;/pre&gt;Первоначально, создадим сущность в sys.odbc.ini. В данном примере, я создаю data store и отключаю возможность создания cache grid (CachegridEnable=0), т.к. данной функциональности будет посвящена отдельная статья. Также, в данной сущности я прописываю атрибут OracleNetServiceName со значением алиаса из tnsnames.ora  &lt;pre class="c-sharp" name="code"&gt;[db_сache]&lt;br /&gt;Driver=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so&lt;br /&gt;DataStore=/u01/app/oracle/datastore/db_cache&lt;br /&gt;PermSize=100&lt;br /&gt;TempSize=32&lt;br /&gt;PLSQL=1&lt;br /&gt;DatabaseCharacterSet= WE8MSWIN1252&lt;br /&gt;CachegridEnable=0&lt;br /&gt;OracleNetServiceName=ORCL&lt;br /&gt;&lt;/pre&gt;Далее, необходимо создать некоторых пользователей в Oracle TimesTen. Вначале создадим пользователя – управляющего кэшем (cache manager user). Данный пользователь должен иметь тоже имя, что и пользователь в Oracle Database, который будет иметь доступ к кэшируемым таблицам. Пароль может отличаться. Предоставим данному пользователю набор привилегий, необходимый для создания cache grid и кэш групп.  &lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 ~]$ ttisql db_cache&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2010, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;connect "DSN=db_cache";&lt;br /&gt;Connection successful: DSN=db_cache;UID=oracle;DataStore=/u01/app/oracle/datastore/db_cache;DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=100;TempSize=32;TypeMode=0;CacheGridEnable=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; CREATE USER cacheadmin IDENTIFIED BY oracle;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; GRANT CREATE SESSION, CACHE_MANAGER, CREATE ANY TABLE, DROP ANY TABLE TO cacheadmin;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;Далее, создадим пользователя, владельца кэшируемых таблиц и предоставим ему привилегии. Данный пользователь должен иметь тоже имя, что и пользователь в Oracle Database, который будет владеть кэшируемыми объектами. Пароль может отличаться.  &lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE USER oratt IDENTIFIED BY oracle;&lt;br /&gt;&lt;br /&gt;User created.&lt;br /&gt;&lt;br /&gt;Command&amp;gt; grant create session to oratt;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;Далее, подсоединимся к базе данных под пользователем cache manager user, и также установим имя и пароль кэш администратора в Oracle Database с помощью процедуры ttCacheUidPwdSet.   &lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 ~]$ ttIsql "DSN=db_cache;UID=cacheadmin;PWD=oracle;OraclePWD=oracle"&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2010, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;connect "DSN=db_cache;UID=cacheadmin;PWD=oracle;OraclePWD=oracle";&lt;br /&gt;Connection successful: DSN=db_cache;UID=cacheadmin;DataStore=/u01/app/oracle/datastore/db_cache;DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=100;TempSize=32;TypeMode=0;CacheGridEnable=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; call ttCacheUidPwdSet('cacheadmin','oracle');&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;Как видим, после выполнения данной команды, TimesTen инициировал сессию в Oracle Database.  &lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; select s.sid,&lt;br /&gt;  2         s.username,&lt;br /&gt;  3         s.status,    &lt;br /&gt;  4         s.schemaname,&lt;br /&gt;  5         s.osuser,&lt;br /&gt;  6         s.machine,&lt;br /&gt;  7         s.terminal,&lt;br /&gt;  8         s.program&lt;br /&gt;  9    from V$SESSION s&lt;br /&gt; 10   where s.type = 'USER'&lt;br /&gt; 11     and s.username is not null;&lt;br /&gt;&lt;br /&gt;SID  USERNAME      STATUS    SCHEMANAME    OSUSER   MACHINE TERMINAL  PROGRAM      &lt;br /&gt;---- ------------- --------  ------------- -------- ------- --------  ------- &lt;br /&gt;36   CACHEADMIN    INACTIVE  CACHEADMIN    oracle   tt1     pts/1     ttIsqlCmd@tt1 &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;На этом предварительные настройки в TimesTen закончены.      &lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Создание Read Only кэш группы&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Для создания read only кэш группы, первоначально необходимо создать объект кэширования – таблицу в Oracle Database и затем наполнить ее данными.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@db ~]$ sqlplus oratt/oracle&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.2.0.2.0 Production on Mon Apr 4 05:53:20 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2010, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; create table readtab ( a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;   2                    b VARCHAR2(100) );&lt;br /&gt;  &lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; insert into readtab values (1,'1');&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; insert into readtab values (2,'2');&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; insert into readtab values (3,'3');&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; insert into readtab values (4,'4');&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; insert into readtab values (5,'5');&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; commit;&lt;br /&gt;&lt;br /&gt;Commit complete.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select * from readtab;&lt;br /&gt;&lt;br /&gt;         A       B &lt;br /&gt;----------  -------------------------------------&lt;br /&gt;         1  1&lt;br /&gt;         2  2&lt;br /&gt;         3  3&lt;br /&gt;         4  4&lt;br /&gt;         5  5&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;После этого, необходимо предоставить SELECT привилегию на таблицу readtab кэш администратору. Данная привилегия необходима для создания read only кэш группы, которая кэширует данную таблицу и выполняет автоматическое обновление данных из Oracle Database в TimesTen.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; GRANT SELECT ON readtab TO cacheadmin;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее необходимо запустить кэш агент. Для этого воспользуемся процедурой ttCacheStart.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; call ttCacheStart;&lt;br /&gt;Command&amp;gt; host ttstatus&lt;br /&gt;TimesTen status report as of Mon Apr  4 06:05:43 2011&lt;br /&gt;&lt;br /&gt;Daemon pid 29809 port 53384 instance tt1&lt;br /&gt;TimesTen server pid 29823 started on port 53385&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;Data store /u01/app/oracle/datastore/db_cache&lt;br /&gt;There are 14 connections to the data store&lt;br /&gt;Shared Memory KEY 0x060008cd ID 786433&lt;br /&gt;PL/SQL Memory KEY 0x070008cd ID 819202 Address 0x10000000&lt;br /&gt;Type            PID     Context     Connection Name              ConnID&lt;br /&gt;Cache Agent     30043   0x088faab8  Handler                           2&lt;br /&gt;Cache Agent     30043   0x08a185c0  Timer                             3&lt;br /&gt;Cache Agent     30043   0x08a74940  Aging                             4&lt;br /&gt;Process         29949   0x08660338  db_cache                          1&lt;br /&gt;Subdaemon       29813   0x087cf2e8  Manager                        2032&lt;br /&gt;Subdaemon       29813   0x08821cb8  Rollback                       2033&lt;br /&gt;Subdaemon       29813   0x088eaca8  Flusher                        2034&lt;br /&gt;Subdaemon       29813   0x0893b718  Monitor                        2035&lt;br /&gt;Subdaemon       29813   0x0899a110  Deadlock Detector              2036&lt;br /&gt;Subdaemon       29813   0x089f8b08  Checkpoint                     2037&lt;br /&gt;Subdaemon       29813   0x08a57500  Aging                          2038&lt;br /&gt;Subdaemon       29813   0x08ac81d8  Log Marker                     2039&lt;br /&gt;Subdaemon       29813   0x08b18c48  AsyncMV                        2040&lt;br /&gt;Subdaemon       29813   0x08bb9f38  HistGC                         2041&lt;br /&gt;Replication policy  : Manual&lt;br /&gt;Cache Agent policy  : Manual&lt;br /&gt;TimesTen's Cache agent is running for this data store&lt;br /&gt;PL/SQL enabled.&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;Accessible by group oinstall&lt;br /&gt;End of report&lt;br /&gt;Command&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;После этого, можно создавать кэш группу.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE READONLY CACHE GROUP readcache&lt;br /&gt;       &amp;gt;   AUTOREFRESH INTERVAL&lt;br /&gt;       &amp;gt;   5 SECONDS&lt;br /&gt;       &amp;gt; FROM oratt.readtab (&lt;br /&gt;       &amp;gt;        a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;       &amp;gt;        b VARCHAR2(100) );&lt;br /&gt;Command&amp;gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Проверим наличие записей в кэше.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 ~]$ ttIsql "DSN=db_cache;UID=oratt;PWD=oracle;"                     &lt;br /&gt;Copyright (c) 1996-2010, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;connect "DSN=db_cache;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=100;TempSize=32;TypeMode=0;CacheGridEnable=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; select * from readtab;&lt;br /&gt;0 rows found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее необходимо выполнить первоначальную загрузку данных в кэш.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@tt1 ~]$ ttIsql "DSN=db_cache;UID=cacheadmin;PWD=oracle;OraclePWD=oracle"&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2010, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;connect "DSN=db_cache;UID=cacheadmin;PWD=oracle;OraclePWD=oracle";&lt;br /&gt;Connection successful: DSN=db_cache;UID=cacheadmin;DataStore=/u01/app/oracle/datastore/db_cache;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=100;TempSize=32;TypeMode=0;CacheGridEnable=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;&lt;br /&gt;5 cache instances affected.&lt;br /&gt;Command&amp;gt; connect "DSN=db_cache;UID=oratt;PWD=oracle";&lt;br /&gt;Connection successful: DSN=db_cache;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=100;TempSize=32;TypeMode=0;CacheGridEnable=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;con1: Command&amp;gt; select * from readtab;&lt;br /&gt;&amp;lt; 1, 1 &amp;gt;&lt;br /&gt;&amp;lt; 2, 2 &amp;gt;&lt;br /&gt;&amp;lt; 3, 3 &amp;gt;&lt;br /&gt;&amp;lt; 4, 4 &amp;gt;&lt;br /&gt;&amp;lt; 5, 5 &amp;gt;&lt;br /&gt;5 rows found.&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Следовательно, данные загрузились. Попробуем изменить данные в Oracle Database. &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; conn oratt/oracle&lt;br /&gt;Connected.&lt;br /&gt;SQL&amp;gt; INSERT INTO readtab VALUES (0, '0');&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; DELETE FROM readtab WHERE a=2;&lt;br /&gt;&lt;br /&gt;1 row deleted.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; UPDATE readtab SET b='8' WHERE a=4;&lt;br /&gt;&lt;br /&gt;1 row updated.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; commit;&lt;br /&gt;&lt;br /&gt;Commit complete.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select * from readtab;&lt;br /&gt;&lt;br /&gt;         A B&lt;br /&gt;---------- ------------------------------------------------------&lt;br /&gt;         1 1&lt;br /&gt;         3 3&lt;br /&gt;         4 8&lt;br /&gt;         5 5&lt;br /&gt;         0 0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь проверим кэш.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;con1: Command&amp;gt; select * from readtab;&lt;br /&gt;&amp;lt; 0, 0 &amp;gt;&lt;br /&gt;&amp;lt; 1, 1 &amp;gt;&lt;br /&gt;&amp;lt; 3, 3 &amp;gt;&lt;br /&gt;&amp;lt; 4, 8 &amp;gt;&lt;br /&gt;&amp;lt; 5, 5 &amp;gt;&lt;br /&gt;5 rows found.&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видно, измененные данные переносятся  из Oracle Database в Oracle TimesTen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Создание AWT кэш группы&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Вначале опять создадим таблицу в Oracle Database и затем наполнить ее данными.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@db ~]$ sqlplus oratt/oracle&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 11.2.0.2.0 Production on Tue Apr 5 01:38:30 2011&lt;br /&gt;&lt;br /&gt;Copyright (c) 1982, 2010, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Connected to:&lt;br /&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production&lt;br /&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; create table awttab ( a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;                      b VARCHAR2(100),&lt;br /&gt;                      c TIMESTAMP DEFAULT SYSDATE NOT NULL);  2    3&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; insert into awttab values (1,'1',sysdate);&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; insert into awttab values (2,'2',sysdate);&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; insert into awttab values (3,'3',sysdate);&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; commit;&lt;br /&gt;&lt;br /&gt;Commit complete.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; grant select, insert, update, delete on awttab to cacheadmin;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select * from awttab;&lt;br /&gt;&lt;br /&gt;         A B                                  C&lt;br /&gt;---------- ---------------------------------- ----------------------------&lt;br /&gt;         1 1                                  05-APR-11 01.39.26.000000 AM&lt;br /&gt;         2 2                                  05-APR-11 01.39.32.000000 AM&lt;br /&gt;         3 3                                  05-APR-11 01.39.38.000000 AM&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;После этого, необходимо предоставить привилегии на таблицу awttab кэш администратору.   &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; grant select, insert, update, delete on awttab to cacheadmin;&lt;br /&gt;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;SELECT привилегия необходима для создания AWT кэш группы, которая кэширует данную таблицу. INSERT, UPDATE, DELETE привилегии необходимы для выполнения операций изменения в TimesTen и переноса их в Oracle Database.&lt;br /&gt;Далее запускаем кэш агент. Для этого воспользуемся процедурой ttCacheStart.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; call ttCacheStart;&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;Далее создаем AWT кэш группу.  &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP awtcache&lt;br /&gt;       &amp;gt; FROM oratt.awttab ( a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;       &amp;gt;                     b VARCHAR2(100),&lt;br /&gt;       &amp;gt;                     c TIMESTAMP NOT NULL DEFAULT SYSDATE );&lt;br /&gt;Command&amp;gt; connect "DSN=db_cache;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=100;TempSize=32;TypeMode=0;CacheGridEnable=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;con1: Command&amp;gt; select * from awttab;&lt;br /&gt;0 rows found.&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Запускаем репликационный агент. Для этого воспользуемся процедурой ttRepStart.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; call ttRepStart;&lt;br /&gt;Command&amp;gt; host ttstatus;&lt;br /&gt;TimesTen status report as of Tue Apr  5 02:00:56 2011&lt;br /&gt;&lt;br /&gt;Daemon pid 3637 port 53384 instance tt1&lt;br /&gt;TimesTen server pid 3645 started on port 53385&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;Data store /u01/app/oracle/datastore/db_cache&lt;br /&gt;There are 21 connections to the data store&lt;br /&gt;Shared Memory KEY 0x090008cd ID 294913&lt;br /&gt;PL/SQL Memory KEY 0x0a0008cd ID 327682 Address 0x10000000&lt;br /&gt;Type            PID     Context     Connection Name              ConnID&lt;br /&gt;Cache Agent     3778    0x0987bab8  Handler                           2&lt;br /&gt;Cache Agent     3778    0x099995c0  Timer                             3&lt;br /&gt;Cache Agent     3778    0x099f5940  Aging                             4&lt;br /&gt;Cache Agent     3778    0x09ac91a0  Refresher(S,5000)                 6&lt;br /&gt;Cache Agent     3778    0x09b7e948  BMReporter(-1594258544)           5&lt;br /&gt;Process         3807    0x084aa338  db_cache                          1&lt;br /&gt;Replication     4156    0x0a0162c8  LOGFORCE                          9&lt;br /&gt;Replication     4156    0x0a034250  REPHOLD                           7&lt;br /&gt;Replication     4156    0x0a084cc0  REPLISTENER                       8&lt;br /&gt;Replication     4156    0x0a0d6780  TRANSMITTER                      10&lt;br /&gt;Replication     4156    0x0a14c9f8  RECEIVER                         11&lt;br /&gt;Subdaemon       3642    0x0900b2e8  Manager                        2032&lt;br /&gt;Subdaemon       3642    0x090970d0  Flusher                        2034&lt;br /&gt;Subdaemon       3642    0x090f5cd8  Monitor                        2035&lt;br /&gt;Subdaemon       3642    0x091548e0  Deadlock Detector              2036&lt;br /&gt;Subdaemon       3642    0xa7940038  Log Marker                     2039&lt;br /&gt;Subdaemon       3642    0xa7990aa8  AsyncMV                        2040&lt;br /&gt;Subdaemon       3642    0xa79e1518  HistGC                         2041&lt;br /&gt;Subdaemon       3642    0xb5342400  Rollback                       2033&lt;br /&gt;Subdaemon       3642    0xb5393110  Checkpoint                     2037&lt;br /&gt;Subdaemon       3642    0xb53e3d90  Aging                          2038&lt;br /&gt;Replication policy  : Manual&lt;br /&gt;Replication agent is running.&lt;br /&gt;Cache Agent policy  : Manual&lt;br /&gt;TimesTen's Cache agent is running for this data store&lt;br /&gt;PL/SQL enabled.&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;Accessible by group oinstall&lt;br /&gt;End of report&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Можем выполнить первоначальную инициализацию данных. Данный шаг не обязателен.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; load cache group AWTCACHE commit every 265 rows;&lt;br /&gt;3 cache instances affected.&lt;br /&gt;Command&amp;gt; connect "DSN=db_cache;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=100;TempSize=32;TypeMode=0;CacheGridEnable=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;con1: Command&amp;gt; select * from awttab;&lt;br /&gt;&amp;lt; 1, 1, 2011-04-05 01:39:26.000000 &amp;gt;&lt;br /&gt;&amp;lt; 2, 2, 2011-04-05 01:39:32.000000 &amp;gt;&lt;br /&gt;&amp;lt; 3, 3, 2011-04-05 01:39:38.000000 &amp;gt;&lt;br /&gt;3 rows found.&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Вставим несколько строк в TimesTen.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;con1: Command&amp;gt; insert into awttab values (-1,'-1',sysdate);&lt;br /&gt;1 row inserted.&lt;br /&gt;con1: Command&amp;gt; insert into awttab values (-2,'-2',sysdate);&lt;br /&gt;1 row inserted.&lt;br /&gt;con1: Command&amp;gt; select * from awttab;&lt;br /&gt;&amp;lt; -2, -2, 2011-04-05 02:06:43.000000 &amp;gt;&lt;br /&gt;&amp;lt; -1, -1, 2011-04-05 02:06:37.000000 &amp;gt;&lt;br /&gt;&amp;lt; 1, 1, 2011-04-05 01:39:26.000000 &amp;gt;&lt;br /&gt;&amp;lt; 2, 2, 2011-04-05 01:39:32.000000 &amp;gt;&lt;br /&gt;&amp;lt; 3, 3, 2011-04-05 01:39:38.000000 &amp;gt;&lt;br /&gt;5 rows found.&lt;br /&gt;con1: Command&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Теперь посмотрим состояние данных в Oracle Database.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt;  select * from awttab;&lt;br /&gt;         A B                                  C&lt;br /&gt;---------- ---------------------------------- ----------------------------&lt;br /&gt;        -1 -1                                 05-APR-11 02.06.37.000000 AM&lt;br /&gt;        -2 -2                                 05-APR-11 02.06.43.000000 AM&lt;br /&gt;         1 1                                  05-APR-11 01.39.26.000000 AM&lt;br /&gt;         2 2                                  05-APR-11 01.39.32.000000 AM&lt;br /&gt;         3 3                                  05-APR-11 01.39.38.000000 AM&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Как видно, новые данные, появившиеся в TimesTen, переносятся в Oracle Database.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Создание SWT кэш группы&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Процесс создания SWT кэш группы идентичен созданию AWT кэш группы, за исключением, предоставления SELECT, UPDATE,DELETE, INSERT привилегий не только кэш администратору на уровне Oracle Database, но, данные привилегии необходимо предоставить и cache manager пользователю на уровне TimesTen. Кроме того, при работе пользователем oratt, необходимо указать при подключении атрибут OraclePWD, для синхронной передачи данный в Oracle Database. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Создание User Managed кэш группы&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Для создания кэш групп с нестандартным поведением можно создать User Managed кэш группу. Процесс создания данной кэш группы зависит от того, какой функционал вам необходим. Если вы используете возможность передачи данных из Oracle TimesTen в Oracle Database (Propagate) и обратно (Autorefresh), тогда процесс создания аналогичен SWT кэш группе.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Создание динамических (dynamic) кэш групп&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Также в TimesTen 11g существует возможность создания динамических (dynamic) кэш групп. Что такое динамические кэш группы? &lt;br /&gt;В версии TimesTen 7.0.5 у Data store был атрибут, который назывался transparentload, который позволял загрузить данные из Oracle Database в TimesTen при использовании изменяемого (updatable) кэша (awt, awt, um группы). С версии 11g (11.2.1.1.0) установка данного параметра   вручную устарел (deprecated) и теперь для обеспечения данного функционала, необходимо использовать ключевое слово Dynamic в определении кэш группы.&lt;br /&gt;Предположим, у меня есть AWT кэш группа.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; cachegroups;&lt;br /&gt;&lt;br /&gt;Cache Group CACHEADMIN.AWTCACHE:&lt;br /&gt;…&lt;br /&gt;  Cache Group Type: Asynchronous Writethrough&lt;br /&gt;  Autorefresh: No&lt;br /&gt;  Aging: No aging defined&lt;br /&gt;&lt;br /&gt;  Root Table: ORATT.AWTTAB&lt;br /&gt;  Table Type: Propagate&lt;br /&gt;…&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Удалим данную группу и создадим заново с атрибутом dynamic. &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; call ttRepStop;&lt;br /&gt;Command&amp;gt; drop cache group awtcache;&lt;br /&gt;Command&amp;gt; CREATE DYNAMIC ASYNCHRONOUS WRITETHROUGH CACHE GROUP awtcache&lt;br /&gt;       &amp;gt; FROM oratt.awttab ( a NUMBER NOT NULL PRIMARY KEY,&lt;br /&gt;       &amp;gt;                     b VARCHAR2(100),&lt;br /&gt;       &amp;gt;                     c TIMESTAMP NOT NULL DEFAULT SYSDATE );&lt;br /&gt;Command&amp;gt; call ttRepStart;&lt;br /&gt;Command&amp;gt; connect "DSN=db_cache;UID=oratt;PWD=oracle;";&lt;br /&gt;Connection successful: DSN=db_cache;UID=oratt;DataStore=/u01/app/oracle/datastore/db_cache;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=100;TempSize=32;TypeMode=0;CacheGridEnable=0;OracleNetServiceName=ORCL;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Con1: Command&amp;gt; select * from awttab;&lt;br /&gt;0 rows found.&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Загружаем данные.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;con2: Command&amp;gt; load cache group AWTCACHE commit every 265 rows;&lt;br /&gt;5 cache instances affected.&lt;br /&gt;сon1: Command&amp;gt; select * from awttab;&lt;br /&gt;&amp;lt; -2, -2, 2011-04-05 02:06:43.000000 &amp;gt;&lt;br /&gt;&amp;lt; -1, -1, 2011-04-05 02:06:37.000000 &amp;gt;&lt;br /&gt;&amp;lt; 1, 1, 2011-04-05 01:39:26.000000 &amp;gt;&lt;br /&gt;&amp;lt; 2, 2, 2011-04-05 01:39:32.000000 &amp;gt;&lt;br /&gt;&amp;lt; 3, 3, 2011-04-05 01:39:38.000000 &amp;gt;&lt;br /&gt;5 rows found.&lt;br /&gt;&lt;/pre&gt;Вставим строку в кэше.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;сon1: Command&amp;gt; insert into awttab values (-3,'-3');&lt;br /&gt;1 row inserted.&lt;br /&gt;сon1: Command&amp;gt; select * from awttab;&lt;br /&gt;&amp;lt; -3, -3, 2011-04-05 03:30:40.000000 &amp;gt;&lt;br /&gt;&amp;lt; -2, -2, 2011-04-05 02:06:43.000000 &amp;gt;&lt;br /&gt;&amp;lt; -1, -1, 2011-04-05 02:06:37.000000 &amp;gt;&lt;br /&gt;&amp;lt; 1, 1, 2011-04-05 01:39:26.000000 &amp;gt;&lt;br /&gt;&amp;lt; 2, 2, 2011-04-05 01:39:32.000000 &amp;gt;&lt;br /&gt;&amp;lt; 3, 3, 2011-04-05 01:39:38.000000 &amp;gt;&lt;br /&gt;&lt;br /&gt;6 rows found.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Проверим данные в Oracle Database.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt;  select * from awttab;&lt;br /&gt;         A B                                  C&lt;br /&gt;---------- ---------------------------------- ----------------------------&lt;br /&gt;        -1 -1                                 05-APR-11 02.06.37.000000 AM&lt;br /&gt;        -2 -2                                 05-APR-11 02.06.43.000000 AM&lt;br /&gt;         1 1                                  05-APR-11 01.39.26.000000 AM&lt;br /&gt;         2 2                                  05-APR-11 01.39.32.000000 AM&lt;br /&gt;         3 3                                  05-APR-11 01.39.38.000000 AM&lt;br /&gt;        -3 -3                                 05-APR-11 03.30.40.000000 AM&lt;br /&gt;6 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;/pre&gt;Видно, что передача изменений из Кэша в Oracle Database работает. Но что делать, если необходимо вставить данные в Oracle Database и после этого, загрузить эти данные в кэш без пересоздания кэш группы. Именно в данной ситуации мы воспользуемся функционалом прозрачной загрузки данных из Oracle Database в TimesTen при выполнении SQL запроса. Работает данный функционал следующим образом: если определенный (поддерживаются только некоторые конструкции – см.  Types of SQL statements for which dynamic load is available в Oracle® In-Memory Database Cache User's Guide ) SQL запрос не возвращает не одной строки в TimesTen, то данный запрос будет перенаправлен в Oracle Database и выполнен там и если данный запрос что-то вернул, эти строки будут загружены в TimesTen. &lt;br /&gt;&lt;br /&gt;Предположим, нам необходимо вставить строку в Oracle Database.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;SQL&amp;gt; insert into oratt.awttab values (0,'DB insert',sysdate);&lt;br /&gt;&lt;br /&gt;1 row created.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; commit;&lt;br /&gt;&lt;br /&gt;Commit complete.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt; select * from awttab;&lt;br /&gt;&lt;br /&gt;         A B                                  C&lt;br /&gt;---------- ---------------------------------- ----------------------------&lt;br /&gt;        -1 -1                                 05-APR-11 02.06.37.000000 AM&lt;br /&gt;        -2 -2                                 05-APR-11 02.06.43.000000 AM&lt;br /&gt;         1 1                                  05-APR-11 01.39.26.000000 AM&lt;br /&gt;         2 2                                  05-APR-11 01.39.32.000000 AM&lt;br /&gt;         3 3                                  05-APR-11 01.39.38.000000 AM&lt;br /&gt;        -3 -3                                 05-APR-11 03.30.40.000000 AM&lt;br /&gt;         0 DB insert                          05-APR-11 03.50.35.000000 AM&lt;br /&gt;&lt;br /&gt;7 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;И теперь необходимо переместить ее в изменяемый кэш. Для этого необходимо выполнить банальный запрос.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Command&amp;gt; select * from oratt.awttab;&lt;br /&gt;&amp;lt; -3, -3, 2011-04-05 03:30:40.000000 &amp;gt;&lt;br /&gt;&amp;lt; -2, -2, 2011-04-05 02:06:43.000000 &amp;gt;&lt;br /&gt;&amp;lt; -1, -1, 2011-04-05 02:06:37.000000 &amp;gt;&lt;br /&gt;&amp;lt; 1, 1, 2011-04-05 01:39:26.000000 &amp;gt;&lt;br /&gt;&amp;lt; 2, 2, 2011-04-05 01:39:32.000000 &amp;gt;&lt;br /&gt;&amp;lt; 3, 3, 2011-04-05 01:39:38.000000 &amp;gt;&lt;br /&gt;6 rows found.&lt;br /&gt;Command&amp;gt; select * from oratt.awttab where a = 0;&lt;br /&gt;&amp;lt; 0, DB insert, 2011-04-05 03:50:35.000000 &amp;gt;&lt;br /&gt;1 row found.&lt;br /&gt;Command&amp;gt; select * from oratt.awttab;&lt;br /&gt;&amp;lt; -3, -3, 2011-04-05 03:30:40.000000 &amp;gt;&lt;br /&gt;&amp;lt; -2, -2, 2011-04-05 02:06:43.000000 &amp;gt;&lt;br /&gt;&amp;lt; -1, -1, 2011-04-05 02:06:37.000000 &amp;gt;&lt;br /&gt;&amp;lt; 0, DB insert, 2011-04-05 03:50:35.000000 &amp;gt;&lt;br /&gt;&amp;lt; 1, 1, 2011-04-05 01:39:26.000000 &amp;gt;&lt;br /&gt;&amp;lt; 2, 2, 2011-04-05 01:39:32.000000 &amp;gt;&lt;br /&gt;&amp;lt; 3, 3, 2011-04-05 01:39:38.000000 &amp;gt;&lt;br /&gt;7 rows found.&lt;br /&gt;Command&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Но нужно помнить, что данный функционал имеет ограничения и перед тем как его применять, рекомендую ознакомиться с документацией.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Заключение&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Oracle TimesTen может быть использована как быстрый кэш над Oracle Database. Как видно из статьи, TimesTen позволяет очень быстро создать кэш группы с различным функционалом – передачей данный из Oracle Database в TimesTen или наоборот, или в обе стороны. Учитывая существенное увеличение скорости выполнения SQL запросов, данный механизм может позволить увеличить производительность различных приложений.  &lt;br /&gt;&lt;br /&gt;PS. Но фото Мальдивы :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-142240094640705335?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/142240094640705335/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=142240094640705335&amp;isPopup=true' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/142240094640705335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/142240094640705335'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/04/tech-in-memory-database-cache-11g.html' title='Tech: Настройка In-Memory Database Cache 11g'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-cP9LGwEv_RU/TZ1D0e5ZwVI/AAAAAAAAACo/6qkt-V7zdIE/s72-c/IMG_1254.JPG' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-7137596392484400105</id><published>2011-03-22T09:33:00.002+03:00</published><updated>2011-04-01T12:35:17.084+04:00</updated><title type='text'>Russian Exadata-man!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-g10cBOaP_tg/TYg_T5lijzI/AAAAAAAAACk/tg3lQdbXzig/s1600/ExadataImport.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh6.googleusercontent.com/-g10cBOaP_tg/TYg_T5lijzI/AAAAAAAAACk/tg3lQdbXzig/s320/ExadataImport.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Update 1&lt;/b&gt;. The Igor Melnikov's presentation about loading data in Exadata, you can download&amp;nbsp;&lt;a href="http://www.4shared.com/document/MXjdHjoq/ExadataLoad.html"&gt;here&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;On foto, my colleague Igor Melnikov. He is testing some application on Oracle Exadata V2-8 in Edinburgh now, and i think he is one of the first people in Russia, who can looking on this machine in real life :)) &lt;br /&gt;&lt;br /&gt;PS. Igor developed a very good method of loading a lot of data in Exadata (tens of terabytes) and tested it in Edinburgh. He promised, that he posted the presentation about it in&amp;nbsp;&lt;a href="http://dsvolk.blogspot.com/"&gt;blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-7137596392484400105?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/7137596392484400105/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=7137596392484400105&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7137596392484400105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7137596392484400105'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/03/russian-exadata-man.html' title='Russian Exadata-man!'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-g10cBOaP_tg/TYg_T5lijzI/AAAAAAAAACk/tg3lQdbXzig/s72-c/ExadataImport.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-6195088236407187302</id><published>2011-02-07T10:12:00.000+03:00</published><updated>2011-02-07T10:12:34.187+03:00</updated><title type='text'>Oracle TimesTen 11.2.1.8.0 is now available in OTN</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2u-2ZxvJAg8/TU-ay5VTQjI/AAAAAAAAACg/11I-ppPKmYs/s1600/IMG_8659.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/_2u-2ZxvJAg8/TU-ay5VTQjI/AAAAAAAAACg/11I-ppPKmYs/s320/IMG_8659.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;New version Oracle TimesTen is now available on &lt;a href="http://www.oracle.com/technetwork/database/timesten/downloads/index.html"&gt;OTN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have written about &lt;a href="http://ggsig.blogspot.com/2010/11/active-standby-pair-feature.html"&gt;"feature"&lt;/a&gt; Oracle TimesTen in Active-Standby pair configuration. In previous versions, if you wanted to add some abject (table, index and etc/) in your Active-Standby pair replication you had to restart your replication (stop, add your tables and start). It it not convenient, isn't it?&lt;br /&gt;In 11.2.1.8.0 version you can create or drop a table, index or synonym in an active standby pair without stopping the replication agent. You can choose to have these statements replicated to the standby database. You can include a table in an active standby pair when the table is created. Use the &lt;code&gt;DDLReplicationLevel&lt;/code&gt; and &lt;code&gt;DDLReplicationAction&lt;/code&gt; connection attributes to control what is replicated. &lt;br /&gt;&lt;br /&gt;More information you can find in &lt;a href="http://download.oracle.com/docs/cd/E13085_01/doc/timesten.1121/e13080/toc.htm"&gt;documentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PS. Foto - Santorini, Greece. I like this island :)).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-6195088236407187302?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/6195088236407187302/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=6195088236407187302&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/6195088236407187302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/6195088236407187302'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/02/oracle-timesten-112180-is-now-available.html' title='Oracle TimesTen 11.2.1.8.0 is now available in OTN'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2u-2ZxvJAg8/TU-ay5VTQjI/AAAAAAAAACg/11I-ppPKmYs/s72-c/IMG_8659.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-8454735386684169615</id><published>2011-01-27T17:38:00.000+03:00</published><updated>2011-01-27T17:38:57.924+03:00</updated><title type='text'>Learning, learning and learning</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2u-2ZxvJAg8/TUGC1LZDXvI/AAAAAAAAACY/FlsaaFKK5_k/s1600/16676663_1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" src="http://4.bp.blogspot.com/_2u-2ZxvJAg8/TUGC1LZDXvI/AAAAAAAAACY/FlsaaFKK5_k/s320/16676663_1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Dear friends,&lt;br /&gt;&lt;br /&gt;Yesterday, I graduated from second HIGHER EDUCATION!!!!&amp;nbsp;&lt;br /&gt;&lt;br /&gt;URA!!!!!&lt;br /&gt;URA!!!!!&lt;br /&gt;URA!!!!!&lt;br /&gt;&lt;br /&gt;PS. I got it with honors :)))))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-8454735386684169615?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/8454735386684169615/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=8454735386684169615&amp;isPopup=true' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8454735386684169615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8454735386684169615'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/01/learning-learning-and-learning.html' title='Learning, learning and learning'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2u-2ZxvJAg8/TUGC1LZDXvI/AAAAAAAAACY/FlsaaFKK5_k/s72-c/16676663_1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-4532377060472457901</id><published>2011-01-24T14:44:00.001+03:00</published><updated>2011-08-29T18:49:24.577+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>TimesTen on YouTube</title><content type='html'>Very good video about TimesTen.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/MoifpZh-lIw/0.jpg" height="270" width="420"&gt;&lt;param name="movie" value="http://www.youtube.com/v/MoifpZh-lIw?f=videos&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/MoifpZh-lIw?f=videos&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-4532377060472457901?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/4532377060472457901/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=4532377060472457901&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4532377060472457901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4532377060472457901'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2011/01/timesten-on-youtube.html' title='TimesTen on YouTube'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-3123141262824402604</id><published>2010-12-31T17:27:00.001+03:00</published><updated>2011-12-22T23:33:11.218+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NY'/><title type='text'>Happy New Year!!!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_2u-2ZxvJAg8/TR3nVTAWXeI/AAAAAAAAACU/GmQU_swILJ8/s1600/IMG_0952.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://1.bp.blogspot.com/_2u-2ZxvJAg8/TR3nVTAWXeI/AAAAAAAAACU/GmQU_swILJ8/s320/IMG_0952.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Dear friends!&lt;br /&gt;&lt;br /&gt;At this day i want to wish you all the best, that all yours dreams comes true next year!&lt;br /&gt;&lt;br /&gt;I want to congratulate my colleague &lt;a href="http://apex.oracle.com/pls/otn/f?p=19297:4:906365293943199::NO:4:P4_ID:2920"&gt;Dmitry Volkov&lt;/a&gt; as well with getting Oracle ACE nomination.&lt;br /&gt;(It is my dream :)))&lt;br /&gt;&lt;br /&gt;PS. Foto - Santa Claus village, Rovaniemi, Finland.&lt;br /&gt;I am in Finland now :)))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-3123141262824402604?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/3123141262824402604/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=3123141262824402604&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3123141262824402604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3123141262824402604'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/12/happy-new-year.html' title='Happy New Year!!!'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2u-2ZxvJAg8/TR3nVTAWXeI/AAAAAAAAACU/GmQU_swILJ8/s72-c/IMG_0952.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-8764477633238410836</id><published>2010-11-28T09:39:00.003+03:00</published><updated>2011-12-22T23:36:20.807+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Технологический день Oracle в Челябинске</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2u-2ZxvJAg8/TPM3TI3cHEI/AAAAAAAAACM/tgZzuHL_mVg/s1600/chelyabinsk.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" ox="true" src="http://2.bp.blogspot.com/_2u-2ZxvJAg8/TPM3TI3cHEI/AAAAAAAAACM/tgZzuHL_mVg/s320/chelyabinsk.jpg" width="305" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;UPD. 1.&amp;nbsp;&lt;/b&gt;На прошлой неделе вернулся из Челябинска - там уже настоящая зима, еле улетел, аэропорт в ночь закрыли,&amp;nbsp;спасибо Аэрофлоту - не подвел, улетел рано утром без задержек! &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;25 ноября 2010 года,&lt;/b&gt; в&amp;nbsp;отеле &lt;b&gt;Holiday Inn &lt;/b&gt;по&amp;nbsp;адреу Университетская Набережная, 18. Состоится очередной Технологический день Oracle.&lt;br /&gt;&lt;br /&gt;Регистрация на мероприятие &lt;a href="http://www.oraclepro.ru/events/chelyabinsk2010"&gt;тут&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PS. Я там тоже буду :)))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-8764477633238410836?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/8764477633238410836/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=8764477633238410836&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8764477633238410836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8764477633238410836'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/10/oracle.html' title='Технологический день Oracle в Челябинске'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2u-2ZxvJAg8/TPM3TI3cHEI/AAAAAAAAACM/tgZzuHL_mVg/s72-c/chelyabinsk.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-4874462023349120224</id><published>2010-11-22T10:21:00.001+03:00</published><updated>2011-12-22T23:36:43.083+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>18 November - Oracle Developer Day in Moscow</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_2u-2ZxvJAg8/TOoMxwJhOMI/AAAAAAAAACI/VhIPTgG56Hw/s1600/IMG_1442.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_2u-2ZxvJAg8/TOoMxwJhOMI/AAAAAAAAACI/VhIPTgG56Hw/s320/IMG_1442.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;UPD 1. Мероприятие, по моему мнению, прошло успешно, заисключением небольшого перерыва, связанного с виртуальными машинами :)&lt;br /&gt;Материалы семинара можно скачать &lt;a href="http://dsvolk.blogspot.com/2010/11/developer-day-18112010.html"&gt;тут&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PS. На фото, Игорь Мельников торжественно открывает меропритие!&lt;br /&gt;&lt;br /&gt;18 ноября (четверг), в "КУЛЬТОВОМ" отеле Катерина, состоиться Oracle Developer Day!!!&lt;br /&gt;&lt;br /&gt;На данном семинаре будут раскрыты вопросы, связаннае с новыми возможностями Oracle Database 11g, Apex, ADF, TimesTen и др.&lt;br /&gt;&lt;br /&gt;Аудитория семинара: разработчики, продвинутые DBA. &lt;br /&gt;&lt;br /&gt;Отмечу, что подготовкой семинара занимается Игорь Мельников, поэтому будет только технический контент!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-4874462023349120224?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/4874462023349120224/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=4874462023349120224&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4874462023349120224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4874462023349120224'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/11/18-november-oracle-developer-day-in.html' title='18 November - Oracle Developer Day in Moscow'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2u-2ZxvJAg8/TOoMxwJhOMI/AAAAAAAAACI/VhIPTgG56Hw/s72-c/IMG_1442.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-5873051739612062671</id><published>2010-11-21T17:17:00.001+03:00</published><updated>2011-12-22T23:37:03.773+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Oracle Day for TATNEFT</title><content type='html'>Недавно был в Альметьевске, на семинаре для компании ТАТНЕФТЬ.&lt;br /&gt;&lt;br /&gt;Материалы семинара можно скачать по &lt;a href="http://oraclegis.com/temp/tat/"&gt;ссылке.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Спасибо большое &lt;a href="http://www.oraclegis.com/blog/"&gt;Александру Рындину&lt;/a&gt;&amp;nbsp; за размещение файлов.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-5873051739612062671?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/5873051739612062671/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=5873051739612062671&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/5873051739612062671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/5873051739612062671'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/11/oracle-day-for-tatneft.html' title='Oracle Day for TATNEFT'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-966699019581855347</id><published>2010-11-17T15:45:00.002+03:00</published><updated>2011-12-22T23:33:49.689+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Replication'/><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>Active - Standby pair "feature"</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_2u-2ZxvJAg8/TOPOAqDW41I/AAAAAAAAAB8/22b0GQFFw1Y/s1600/IMG_0044.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/_2u-2ZxvJAg8/TOPOAqDW41I/AAAAAAAAAB8/22b0GQFFw1Y/s320/IMG_0044.JPG" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;When i was preparing to &lt;a href="http://ggsig.blogspot.com/2010/11/18-november-oracle-developer-day-in.html"&gt;Developer Day&lt;/a&gt; i found some Active-Standby pair feature :).&lt;br /&gt;&lt;br /&gt;I &lt;a href="http://ggsig.blogspot.com/2010/07/tech-oracle-clusterware-and-oracle.html"&gt;wrote&lt;/a&gt; about using and creating Active - Standby pair replication for ensuring high avalbility.&lt;br /&gt;&lt;br /&gt;But, in this time, i will try to execute some DDL.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;For example, i have a configuration: &lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@rac1 bin]# &lt;b&gt;./ttCWAdmin -status&lt;/b&gt;TimesTen Cluster status report as of Mon Nov  1 19:58:49 2010&lt;br /&gt;&lt;br /&gt;====================================================================&lt;br /&gt;TimesTen daemon monitors:&lt;br /&gt;Host:RAC1 Status: online&lt;br /&gt;Host:RAC2 Status: online&lt;br /&gt;&lt;br /&gt;====================================================================&lt;br /&gt;====================================================================&lt;br /&gt;TimesTen Cluster agents&lt;br /&gt;Host:RAC1 Status: online&lt;br /&gt;Host:RAC2 Status: online&lt;br /&gt;&lt;br /&gt;====================================================================&lt;br /&gt;&lt;br /&gt;Status of Cluster related to DSN HA_DS:&lt;br /&gt;====================================================================&lt;br /&gt;1. Status of Cluster monitoring components:&lt;br /&gt;Monitor Process for Master Datastore 1 on Host rac1: RUNNING&lt;br /&gt;Monitor Process for Master Datastore 2 on Host rac2: RUNNING&lt;br /&gt;Monitor Process for Active datastore:RUNNING on Host rac1&lt;br /&gt;Monitor Process for Standby datastore:RUNNING on Host rac2&lt;br /&gt;&lt;br /&gt;2.Status of  Datastores comprising the cluster&lt;br /&gt;Master Datastore 1:&lt;br /&gt;Host:rac1&lt;br /&gt;Status:AVAILABLE&lt;br /&gt;State:ACTIVE&lt;br /&gt;Master Datastore 2:&lt;br /&gt;Host:rac2&lt;br /&gt;Status:AVAILABLE&lt;br /&gt;State:STANDBY&lt;br /&gt;====================================================================&lt;br /&gt;The cluster containing the replicated DSN is online&lt;/pre&gt;&lt;br /&gt;I use Active host and connect to &lt;i&gt;ha_ds&lt;/i&gt; DSN and create table &lt;i&gt;test&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac1 ~]$ &lt;b&gt;ttisql "DSN=ha_ds;UID=app;PWD=app"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2009, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;connect "DSN=ha_ds;UID=app;PWD=app";&lt;br /&gt;Connection successful: DSN=ha_ds;UID=app;DataStore=/u01/app/oracle/datastore/ha_ds;DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=40;TempSize=32;TypeMode=0;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; &lt;b&gt;tables;&lt;/b&gt;&lt;br /&gt;  APP.PLANS&lt;br /&gt;1 table found.&lt;br /&gt;Command&amp;gt; &lt;b&gt;create table test (id number);&lt;/b&gt;&lt;br /&gt;Command&amp;gt; &lt;b&gt;tables;&lt;/b&gt;&lt;br /&gt;  APP.PLANS&lt;br /&gt;  APP.TEST&lt;br /&gt;2 tables found.&lt;br /&gt;Command&amp;gt;&lt;/pre&gt;&lt;br /&gt;What do i see on standby host?&lt;br /&gt;&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac2 info]$ &lt;b&gt;ttisql "DSN=ha_ds;UID=app;PWD=app"&lt;/b&gt;&lt;br /&gt;Copyright (c) 1996-2009, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;connect "DSN=ha_ds;UID=app;PWD=app";&lt;br /&gt;Connection successful: DSN=ha_ds;UID=app;DataStore=/u01/app/oracle/datastore/ha_ds;DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=40;TempSize=32;TypeMode=0;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; &lt;b&gt;tables;&lt;/b&gt;&lt;br /&gt;  APP.PLANS&lt;br /&gt;1 table found.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Very strange, don't you? I expected transferring changes from Active to Standby host.&lt;br /&gt;Beside that, you can create objects on Standby host!&lt;br /&gt;&lt;br /&gt;Explanation - Active - standby pair replication can replicate only DML. The support DDL replication is planing in a future.&lt;br /&gt;&lt;br /&gt;PS. Foto - "Spatrak" - champion :)))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-966699019581855347?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/966699019581855347/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=966699019581855347&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/966699019581855347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/966699019581855347'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/11/active-standby-pair-feature.html' title='Active - Standby pair &quot;feature&quot;'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2u-2ZxvJAg8/TOPOAqDW41I/AAAAAAAAAB8/22b0GQFFw1Y/s72-c/IMG_0044.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-5688441714223253133</id><published>2010-11-13T14:10:00.001+03:00</published><updated>2011-08-29T18:51:54.183+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>Oracle TimesTen 11.2.1.7.0</title><content type='html'>The new Oracle TimesTen version (11.2.1.7.0) is now available on&amp;nbsp; &lt;a href="http://www.oracle.com/technetwork/database/timesten/downloads/index.html"&gt;OTN&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The main new features are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;TimesTen is supported for SUSE 11 on Linux x86-64.&lt;/li&gt;&lt;li&gt;Oracle Data Provider for .NET 11.1.0.7.110 is available for Oracle TimesTen In-Memory Database.&lt;/li&gt;&lt;/ul&gt;About other new features you can read &lt;a href="http://download.oracle.com/docs/cd/E13085_01/doc/timesten.1121/e13080/toc.htm"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-5688441714223253133?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/5688441714223253133/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=5688441714223253133&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/5688441714223253133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/5688441714223253133'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/11/oracle-timesten-112170.html' title='Oracle TimesTen 11.2.1.7.0'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-4002911372530940504</id><published>2010-11-02T15:45:00.005+03:00</published><updated>2010-11-02T15:47:53.949+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><category scheme='http://www.blogger.com/atom/ns#' term='TAF'/><title type='text'>TAF и Oracle TimesTen</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_2u-2ZxvJAg8/TNAHZJC8N3I/AAAAAAAAAB4/StmKezEVlPs/s1600/IMG_0331_JPG.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_2u-2ZxvJAg8/TNAHZJC8N3I/AAAAAAAAAB4/StmKezEVlPs/s320/IMG_0331_JPG.JPG" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;Продолжаем тему высокой доступности. Для обеспечения высокой доступности в Oracle TimesTen&lt;br /&gt;есть возможность создания Active - Standby pair репликации, которая обеспечивает быстрое переключение standby узла в состояние active ( &lt;a href="http://ggsig.blogspot.com/2010/07/tech-oracle-clusterware-and-oracle.html"&gt;Здесь&lt;/a&gt; я писал о том, как настроить Active - Standby pair репликацию и Oracle Clusterware).&lt;br /&gt;&lt;br /&gt;Но, что же будет происходить с приложением в момент сбоя и как данную ситуацию обработать?&lt;br /&gt;&lt;br /&gt;В Oracle Database (RAC), есть технологии TAF (Transparent Application Failover) и FAN (Fast Application Notification) с помощью которых можно обработать ситуацию падения узла на уровне приложения.&lt;br /&gt;&lt;br /&gt;Есть ли в TimesTen что то похожее?&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Ответ - Есть!&lt;br /&gt;&lt;br /&gt;В версии 11G появилась возможность "Automatic client failover" - это возможность автоматического преключения на резервный узел.&lt;br /&gt;&lt;br /&gt;В клиентском DSN появились новые атрибуты:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Failover Server Name or Network Address&lt;/b&gt; - ip адрес или имя хоста, на котором будет находиться standby. Не забудьте про порт серверного процесса - если порт не по умолчанию, то нужно прописать TCP_Port&lt;/li&gt;&lt;li&gt;&lt;b&gt;Failover Server DSN &lt;/b&gt;- база данных&lt;b&gt; &lt;/b&gt;(data store)&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Failover Port Range&lt;/b&gt; - порт для failover notifications (опционально)&lt;/li&gt;&lt;/ul&gt;Соотвественно, для включения Automatic client failover необходимо прописать данные атрибуты для соединения. Вот собственно и все - TAF включен!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Сделаю несколько замечаний. Технология TAF есть в Oracle TimesTen и она похожа на TAF в Oracle RAC, но ТОЛЬКО похожа (это не одно и тоже)! Поэтому рассмотрим работу TAF в TimesTen.&lt;br /&gt;&lt;br /&gt;Предположим, что у вас есть следующий код (есть statement и result set):&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;statement = connection.createStatement();&lt;br /&gt;resultSet = statement.executeQuery("select 1 from dual");&lt;br /&gt;&lt;/pre&gt;В случае сбоя узла, получаем следующую ошибку:&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;java.sql.SQLException: [TimesTen][TimesTen 11.2.1.4.0 CLIENT]&lt;b&gt;Statement handle invalid due to client failover&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;При чем, это происходит в любом случае (даже если транзакция не открывалась и выполнялись только запросы), т.е. ничего подобного TAF TYPE SELECT в TimesTen нет.&lt;br /&gt;Кроме этого, во время failover-а инвалидируется statement, поэтому нужно не забыть создать его еще раз в обработчике исключения. Еще один нюанс - если сбой произошел когда приложение начало транзакцию, TimesTen &lt;b&gt;неявно&lt;/b&gt; ее откатывает, т.е. приложение никогда не узнает о том, нужно ли ему откатывать транзакцию или нет, оно узнает только о факте failover-а.&lt;br /&gt;&lt;br /&gt;Все эти нюансы нужно учитывать!&lt;br /&gt;&lt;br /&gt;Теперь вернемся к вопросу обработки исключения "Statement handle invalid due to client failover".&lt;br /&gt;Согласно документации Oracle® TimesTen In-Memory Database Java Developer's Guide Release 11.2.1, TimesTen JDBC поддерживает два механизма для обнаружения failover:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Синхронное обнаружение (Synchronous detection)&lt;/li&gt;&lt;li&gt;Асинхронное обнаружение (Asynchronous detection)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Синхронное однаружение осуществляется путем перехвата исключения "Statement handle invalid due to client failover".&lt;br /&gt;Например:&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;try {&lt;br /&gt;  // ...&lt;br /&gt;  // Execute a query on a previously prepared statement.&lt;br /&gt;  ResultSet theResultSet = theStatement.executeQuery("select * from dual");&lt;br /&gt;  // ...&lt;br /&gt;} catch (SQLException sqlex) {&lt;br /&gt;  sqlex.printStackTrace();&lt;br /&gt;  if (sqlex.getErrorCode() == TimesTenVendorCode.TT_ERR_FAILOVERINVALIDATION) {&lt;br /&gt;    // Automatic client failover has taken place; discontinue use of this object.&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Асинхронное обнаружение failover-а основано на использовании callback функции (client failover event listener) и регистрации ее в соединении. Все аналогично callback функциям в Oracle RAC, разные только интерфейсы (com.timesten.jdbc.ClientFailoverEventListener вместо oracle.jdbc.OracleOCIFailover) и методы.&lt;br /&gt;&lt;br /&gt;Пример (callback функция): &lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;private class MyCFListener implements ClientFailoverEventListener {&lt;br /&gt;    &lt;br /&gt;    public void notify(ClientFailoverEvent event) {&lt;br /&gt;&lt;br /&gt;        // Process connection failover type&lt;br /&gt;        switch(event.getTheFailoverType()) {&lt;br /&gt;            case TT_FO_CONNECTION:               &lt;br /&gt;               System.out.println("This should be a connection failover type " + event.getTheFailoverType());&lt;br /&gt;               break;&lt;br /&gt;            default:&lt;br /&gt;               break;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // Process connection failover events&lt;br /&gt;        switch(event.getTheFailoverEvent()) {&lt;br /&gt;            case BEGIN:&lt;br /&gt;                System.out.println("This should be a BEGIN event " + event.getTheFailoverEvent());&lt;br /&gt;                    /* Applications cannot use Statement, PreparedStatement, ResultSet,&lt;br /&gt;                       etc. created on the failed Connection any longer.&lt;br /&gt;                    */&lt;br /&gt;                break;&lt;br /&gt;            case END:&lt;br /&gt;                System.out.println("This should be an END event " + event.getTheFailoverEvent());&lt;br /&gt;                    /* Applications may want to re-create Statement and PreparedStatement                       &lt;br /&gt;                       objects at this point as needed.&lt;br /&gt;                    */&lt;br /&gt;                break;&lt;br /&gt;            case ABORT:&lt;br /&gt;                System.out.println("This should be an ABORT event " + event.getTheFailoverEvent());&lt;br /&gt;                break;&lt;br /&gt;            case ERROR:&lt;br /&gt;                System.out.println("This should be an ERROR event " + event.getTheFailoverEvent());&lt;br /&gt;                break;&lt;br /&gt;            default:&lt;br /&gt;                break;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Как видно из примера, вызов event.getTheFailoverType() возвращает тип failover-а. В настоящее время поддерживается только один тип - это connection failover (TT_FO_CONNECTION). Вызов event.getTheFailoverEvent() возвращяет событие.&lt;br /&gt;Существует 4 события:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;BEGIN - если начался client failover&lt;/li&gt;&lt;li&gt;END - если client failover удачно завершился&lt;/li&gt;&lt;li&gt;ERROR - если client failover завершился неудачно, но будет перезапущен&lt;/li&gt;&lt;li&gt;ABORT - если client failover был аварийно прекращен&lt;/li&gt;&lt;/ul&gt;Пример (регистрация callback функции):&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;...&lt;br /&gt;TimesTenConnection conn = null;            &lt;br /&gt;MyCFListener m = new MyCFListener();        &lt;br /&gt;DriverManager.registerDriver(new com.timesten.jdbc.TimesTenClientDriver());                &lt;br /&gt;conn = (TimesTenConnection)DriverManager.getConnection("jdbc:timesten:client:cl_ha","app","app");        &lt;br /&gt;conn.addConnectionEventListener(m);                        &lt;br /&gt;Statement stmt = conn.createStatement();&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ИТОГ&lt;br /&gt;&lt;br /&gt;В Oracle TimesTen существуют инструменты для построения систем высокой доступности - как на стороне сервера (Active - Standby pair репликация + Clusterware), так и на стороне приложения - технологии TAF и FAN (к теме FAN я еще думаю вернусь) для обработки ситуаций сбоя узла.&lt;br /&gt;Только нужно понимать, что технологии в TimesTen имеют ряд "нюансов" и не полностью повторяют данные технологии в Oracle RAC. &lt;br /&gt;&lt;br /&gt;PS. На фото Париж (лето или осень 2010 - не помню :)))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-4002911372530940504?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/4002911372530940504/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=4002911372530940504&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4002911372530940504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4002911372530940504'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/11/taf-oracle-timesten.html' title='TAF и Oracle TimesTen'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_2u-2ZxvJAg8/TNAHZJC8N3I/AAAAAAAAAB4/StmKezEVlPs/s72-c/IMG_0331_JPG.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-7305152313627933335</id><published>2010-10-29T22:22:00.001+04:00</published><updated>2010-11-01T15:38:20.907+03:00</updated><title type='text'>OFF: Обучение в Голландии</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_2u-2ZxvJAg8/TMsQolLbsaI/AAAAAAAAAB0/itK_IfXdsY8/s1600/IMG_0711.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://4.bp.blogspot.com/_2u-2ZxvJAg8/TMsQolLbsaI/AAAAAAAAAB0/itK_IfXdsY8/s320/IMG_0711.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Недавно я решил поучиться новым возможностям Oracle RAC 11gR2 и поехал в королевство Нидерланды.&lt;br /&gt;&lt;br /&gt;Приехав в Oracle University в славном городе Utrecht, я быстренько нашел свой класс.&amp;nbsp;Тренером&amp;nbsp;был - Harald &lt;span class="conn-name"&gt;van Breederode, OCM 10g, 11g(&lt;a href="http://www.oracle.com/technology/ocm/hvanbreederode.html"&gt;http://www.oracle.com/technology/ocm/hvanbreederode.html&lt;/a&gt;) &lt;/span&gt;&lt;span class="conn-name"&gt;и на три дня погрузился в RAC 11GR2.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="conn-name"&gt;Сам треннинг очень понравился, особенно про ASSM, Cache Fusion, recovery.&lt;/span&gt;&lt;br /&gt;&lt;span class="conn-name"&gt;Большое спасибо&amp;nbsp;Harald!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="conn-name"&gt;PS. Отмечу, что Harald ничего не видит, но это совсем ему не мешает ОТЛИЧНО преподавать и показывать демонстрации.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PPS. На фото я и Harald.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-7305152313627933335?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/7305152313627933335/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=7305152313627933335&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7305152313627933335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/7305152313627933335'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/10/off.html' title='OFF: Обучение в Голландии'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_2u-2ZxvJAg8/TMsQolLbsaI/AAAAAAAAAB0/itK_IfXdsY8/s72-c/IMG_0711.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-8189584937862417923</id><published>2010-08-31T22:21:00.001+04:00</published><updated>2011-09-01T10:20:39.526+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Clusterware'/><title type='text'>Впечатления от Grid Infrastructure 11GR2</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2u-2ZxvJAg8/TH1HKQypPEI/AAAAAAAAABo/9dj_FGqNmrA/s1600/IMG_8565.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_2u-2ZxvJAg8/TH1HKQypPEI/AAAAAAAAABo/9dj_FGqNmrA/s320/IMG_8565.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Идея поставить Oracle Grid Infrastructure пришла ко мне достаточно давно и вот вооружившись документацией и статьей &lt;a href="http://www.oracle.com/technetwork/articles/hunter-rac11gr2-iscsi-088677.html"&gt;Jeffrey Hunter-а&lt;/a&gt; я приступил к инсталяции.&lt;br /&gt;Я создавал 4-х узловой кластер при помощи OVM, ОС гостевых машин - OEL. Диски - Openfiler.&lt;br /&gt;Первоначально, я поставил данное программное обеспечения не конфигурируя DNS и DHCP сервера, а ip адрес для SCAN просто записал в /etc/hosts на узлах. Но вот на этой неделе, я решил поставить Grid Infrastructure по нормальному, как говорит Игорь Мельников - как "настоящий пацан" :).&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;И вот я опять начал установку. Задача, собственно была такая же - создать 4-х узловой кластер. Но, к первоначальной конфигурации кластера добавилась еще одна гостевая машина, на&amp;nbsp; которую я поставил необходимые пакеты (bind и dhcp) для DNS и DHCP. После этого, начался процесс конфигурирования DHCP. Я честно говоря, это делал в первый раз и поэтому не знал как это делать, благо есть help и google. В документации написано, что DHCP сервер может выдавать адреса в двух различных подсетях ( в public сети - для vip-ов и в private - для interconnect-а). На виртуальной машине я сделал два сетевых интерфейса, но, т.к. я использовал обычный десктоп с одним физическим сетевым интерфейсом, чтобы разделить трафик, пришлось создавать vlan-ы. После этого, я начал настраивать DNS. Отмечу только, что информацию по настройке DNS, человеку, который не занимается настройкой сетей, найти достаточно не просто, благо нашел книгу Ron Aitchison "Pro DNS and BIND", которая очень мне помогла.&lt;br /&gt;&lt;br /&gt;Далее все по документации. Есть ряд моментов (например &lt;span style="font-size: small;"&gt;Bug 8716130: DB11R2E7: KFOD OP=GROUPS FAILS IF /DEV/RANDOM IN DISCOVERY SET), но в общем, особых проблем нет.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;И вот наконец я увидел долгожданные строки:&lt;br /&gt;&lt;br /&gt;&lt;pre class="python" name="code"&gt;[grid@rac1 ~]$ &lt;b&gt;crs_stat -t&lt;/b&gt;&lt;br /&gt;Name           Type           Target    State     Host        &lt;br /&gt;------------------------------------------------------------&lt;br /&gt;ora.CRS.dg     ora....up.type ONLINE    ONLINE    rac1        &lt;br /&gt;ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1        &lt;br /&gt;ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac2        &lt;br /&gt;ora....N2.lsnr ora....er.type ONLINE    ONLINE    rac3        &lt;br /&gt;ora....N3.lsnr ora....er.type ONLINE    ONLINE    rac1        &lt;br /&gt;ora.asm        ora.asm.type   ONLINE    ONLINE    rac1        &lt;br /&gt;ora.eons       ora.eons.type  ONLINE    ONLINE    rac1        &lt;br /&gt;ora.gns        ora.gns.type   ONLINE    ONLINE    rac2        &lt;br /&gt;ora.gns.vip    ora....ip.type ONLINE    ONLINE    rac2        &lt;br /&gt;ora.gsd        ora.gsd.type   OFFLINE   OFFLINE               &lt;br /&gt;ora....network ora....rk.type ONLINE    ONLINE    rac1        &lt;br /&gt;ora.oc4j       ora.oc4j.type  OFFLINE   OFFLINE               &lt;br /&gt;ora.ons        ora.ons.type   ONLINE    ONLINE    rac1        &lt;br /&gt;ora....SM1.asm application    ONLINE    ONLINE    rac1        &lt;br /&gt;ora....C1.lsnr application    ONLINE    ONLINE    rac1        &lt;br /&gt;ora.rac1.gsd   application    OFFLINE   OFFLINE               &lt;br /&gt;ora.rac1.ons   application    ONLINE    ONLINE    rac1        &lt;br /&gt;ora.rac1.vip   ora....t1.type ONLINE    ONLINE    rac1        &lt;br /&gt;ora....SM2.asm application    ONLINE    ONLINE    rac2        &lt;br /&gt;ora....C2.lsnr application    ONLINE    ONLINE    rac2        &lt;br /&gt;ora.rac2.gsd   application    OFFLINE   OFFLINE               &lt;br /&gt;ora.rac2.ons   application    ONLINE    ONLINE    rac2        &lt;br /&gt;ora.rac2.vip   ora....t1.type ONLINE    ONLINE    rac2        &lt;br /&gt;ora....SM3.asm application    ONLINE    ONLINE    rac3        &lt;br /&gt;ora....C3.lsnr application    ONLINE    ONLINE    rac3        &lt;br /&gt;ora.rac3.gsd   application    OFFLINE   OFFLINE               &lt;br /&gt;ora.rac3.ons   application    ONLINE    ONLINE    rac3        &lt;br /&gt;ora.rac3.vip   ora....t1.type ONLINE    ONLINE    rac3        &lt;br /&gt;ora....SM4.asm application    ONLINE    ONLINE    rac4        &lt;br /&gt;ora....C4.lsnr application    ONLINE    ONLINE    rac4        &lt;br /&gt;ora.rac4.gsd   application    OFFLINE   OFFLINE               &lt;br /&gt;ora.rac4.ons   application    ONLINE    ONLINE    rac4        &lt;br /&gt;ora.rac4.vip   ora....t1.type ONLINE    ONLINE    rac4        &lt;br /&gt;ora....ry.acfs ora....fs.type ONLINE    ONLINE    rac1        &lt;br /&gt;ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac2        &lt;br /&gt;ora.scan2.vip  ora....ip.type ONLINE    ONLINE    rac3        &lt;br /&gt;ora.scan3.vip  ora....ip.type ONLINE    ONLINE    rac1        &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Далее, опять же по совету Игоря Мельникова, я поставил PSU 11.2.0.1.2 и последний OPatch.&lt;br /&gt;Перед этим, советую почитать README и ноту 1082394.1 Там можно обнаружить один момент - команду &lt;b&gt;opatch auto &amp;lt;GI_PSU_11.2.0.1.2&amp;gt; -oh &amp;lt;GRID_HOME&amp;gt;&lt;/b&gt; нужно выполнить на КАЖДОМ узле кластера, что собственно не очень удобно :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Итог: В общем, инсталяция стала немного полегче, появилась мозможность изменения параметров ядра в installer-е например, НО, появились сложности с настройкой DHCP и DNS, т.е. скоро, наверно, администратор СУБД Oracle Database должен будет знать ВСЕ технологии, чтобы установить и поддерживать данные продукты :)))&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;PS. Но фото, один из красивейших островов мира - остров Санторини, Греция.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-8189584937862417923?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/8189584937862417923/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=8189584937862417923&amp;isPopup=true' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8189584937862417923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8189584937862417923'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/08/grid-infrastructure-11gr2.html' title='Впечатления от Grid Infrastructure 11GR2'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2u-2ZxvJAg8/TH1HKQypPEI/AAAAAAAAABo/9dj_FGqNmrA/s72-c/IMG_8565.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-8340395626588793087</id><published>2010-07-20T16:04:00.001+04:00</published><updated>2011-08-29T18:52:20.674+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>НОВАЯ ЦЕНА НА ORACLE TIMESTEN!!!!! УРА!!!</title><content type='html'>Как вам известно, Oracle TimesTen или In-Memory Database Cache имел очень большую стомость - 41 500$ на CPU, и именно цена в основном удерживала наших любимых заказчиков и партнеров от использования данного продукта.&lt;br /&gt;&lt;br /&gt;Но, если сейчас открыть &lt;a href="http://www.oracle.com/corporate/pricing/technology-price-list.pdf"&gt;oracle technology price list&lt;/a&gt; то можно заметить, что цена на Oracle TimesTen и In-Memory Database Cache снизилась до &lt;b&gt;23 000$&lt;/b&gt; на CPU. Кроме того, появилась возможность лицензироваться по пользователям (&lt;b&gt;460$&lt;/b&gt; за NUP), чего в прошлом варианте лицензирования продукта не было.&lt;br /&gt;&lt;br /&gt;Теперь Oracle TimesTen имеет достаточно привлекательную цену, и теперь наши заказчики и партнеры могут более широко использовать данный продукт.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-8340395626588793087?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/8340395626588793087/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=8340395626588793087&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8340395626588793087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8340395626588793087'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/07/oracle-timesten.html' title='НОВАЯ ЦЕНА НА ORACLE TIMESTEN!!!!! УРА!!!'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-4832597020787239350</id><published>2010-07-14T19:41:00.002+04:00</published><updated>2011-08-29T18:53:43.812+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><category scheme='http://www.blogger.com/atom/ns#' term='Golden Gate'/><title type='text'>Oracle TimesTen и Golden Gate</title><content type='html'>Всем известно, что Oracle TimesTen может быть использован, как быстрый кэш для Oracle Database. Причем кэш может быть 'read only' или изменяемый. В первом случае, все изменения, сделанные в Oracle DB передаються в Oracle TimesTen. Во втором случае, наоборот, изменения, сделанные в TimesTen передаются в DB.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Так вот, при использовании TimesTen как 'read only', есть один нюанс. Процесс сбора изменений, сделанных в Oracle Database, построен с использованием триггеров. Следовательно результат - если БД высоко нагружена (тысячи транзакций в секунду), то использование триггеров существенно загрузит Oracle Database, но и если в TT указан маленький интервал AUTOREFRESH-а, может возникнуть ситуация, что запрос по системным таблицам TT в Oracle DB не успеет отработать, а уже поступит новый запрос, тем самым можно получить ряд "неприятностей".&lt;br /&gt;&lt;br /&gt;Как же решить данную задачу?&lt;br /&gt;&lt;br /&gt;Решение пришло с покупкой Oracle Corporation компании Golden Gate. Именно программное обеспечение данной компании для быстрой репликации данных способно очень легко решить данную задачу. Если очень грубо, Golden Gate читает логи (именно логи или архивные журналы) реплицируемой системы (в нашем случае это Oracle DB), затем, передает изменения в подписчик (в нашем случае Oracle TimesTen). Подробнее про Golden Gate можно почитать в блоге &lt;a href="http://oraclegis.com/blog/"&gt;Александра Рындина&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Следовательно, при использовании данного подхода имеем ряд преимуществ:&lt;br /&gt;1 - триггеры не используются, следовательно нагрузка на базу падает.&lt;br /&gt;2 - возможно репликация в схему звездочка, что при использовании стандартного механизма возможно.&lt;br /&gt;3 - удобный визуальный контроль процесса репликации.&lt;br /&gt;&lt;br /&gt;Процесс, настройки репликации Oracle DB и Oracle TT подробно описан в документе (Doc ID 1099523.1 TimesTen Replication Using GoldenGate: Sample Configuration) на &lt;a href="http://support.oracle.com/"&gt;support.oracle.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-4832597020787239350?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/4832597020787239350/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=4832597020787239350&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4832597020787239350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4832597020787239350'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/07/oracle-timesten-golden-gate.html' title='Oracle TimesTen и Golden Gate'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-8244131360691411944</id><published>2010-07-05T13:57:00.010+04:00</published><updated>2011-08-29T18:54:15.028+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Clusterware'/><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>Tech: Oracle Clusterware and Oracle TimesTen</title><content type='html'>Как я писал ранее, в версии 11.2.1 Oracle TimesTen приобрел несколько новых возможностей, одной из которых является возможность управления конфигурацией высокой надежности (active-standby pair репликацией) с помощью Oracle Clusterware.&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Вот именно о данной возможности и пойдет речь далее. &lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Для рассмотрения данной возможности я использовал две виртуальные машины на базе Oracle VM-сервера 2.2.0 (x86 64 bit). В качестве гостевой операционной системы использовался Oracle Enterprise Linux 5.3 (x86). В качестве разделяемой системы хранения использовался Openfiler.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;b&gt;Установка Oracle Clusterware&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Вначале установим Oracle Clusterware. На момент написания статьи, интеграция Oracle TimesTen и Oracle Clusterware возможна только на платформах Linux x86 и Linux x86-64, и только с версией Oracle Clusterware 11.1.0.7., поэтому после установки 11.1.0.6. необходимо поставить патчсет 11.1.0.7.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Процессу установки Oracle Clusterware посвящено достаточно много статей и поэтому я не буду детально описывать процесс установки. Только отмечу, что все машины должны использовать Network Time Protocol (NTP) или похожую систему для устранения расхождения во времени между машинами на интервал не больше чем 250 миллисекунд. Данное ограничение связано с функционированием active-standby pair репликации в Oracle TimesTen. &lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;В данном примере я создал 2-ух узловой кластер со следующими настройками:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;OS username / password:&lt;br /&gt;• root/oracle&lt;br /&gt;• oracle/oracle&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Hostname raс1 &lt;br /&gt;• public IP 192.168.2.131 &lt;br /&gt;• virtual IP 192.168.2.31&lt;br /&gt;• private IP 10.10.10.131&lt;br /&gt;• IP for openfiler 172.16.2.131&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Hostname rac2 &lt;br /&gt;• public IP 192.168.2.132 &lt;br /&gt;• virtual IP 192.168.2.32&lt;br /&gt;• private IP 10.10.10.132&lt;br /&gt;• IP for openfiler 172.16.2.132&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Openfiler&lt;br /&gt;• Public IP 172.16.2.1&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Oracle Clusterware&lt;br /&gt;• CRS_HOME=/u01/app/oracle/product/11.1.0/crs&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Убедимся, что программное обеспечение Oracle Clusterware установлено и нормально функционирует.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac1 ~]$ &lt;b&gt;crs_stat -t&lt;/b&gt;&lt;br /&gt;Name           Type           Target    State     Host&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;ora.rac1.gsd   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac1.ons   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac1.vip   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac2.gsd   application    ONLINE    ONLINE    rac2&lt;br /&gt;ora.rac2.ons   application    ONLINE    ONLINE    rac2&lt;br /&gt;ora.rac2.vip   application    ONLINE    ONLINE    rac2&lt;br /&gt;[oracle@rac1 ~]$&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Также, убедимся что версия Oracle Clusterware соответствующая (11.1.0.7).&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac1 ~]$ &lt;b&gt;crsctl query crs activeversion&lt;/b&gt;&lt;br /&gt;Oracle Clusterware active version on the cluster is [11.1.0.7.0]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;b&gt;Установка Oracle TimesTen 11g&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;После установки Oracle Clusterware устанавливаем Oracle TimesTen 11.2. Установить необходимо на те же машины, на которых функционирует Oracle Clusterware.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Процесс установки Oracle TimesTen 11.2 детально описан здесь (http://ggsig.blogspot.com/2010/05/oracle-timesten_01.html), за одним исключением (пункт взаимодействия с Oracle Clusterware). На данном этапе установки, необходимо прописать директорию хоума CRS-а, после чего инсталлятор должен показать доступные узлы для конфигурации active-standby pair репликации. После чего&amp;nbsp;можно определить узлы на которых будет работать репликация.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;Would you like to use TimesTen Replication with Oracle Clusterware? [ no ]&lt;b&gt;yes&lt;/b&gt;&lt;br /&gt;Please provide the path to the Oracle Clusterware installation on this machine (s=skip)? [  ] &lt;b&gt;/u01/app/oracle/product/11.1.0/crs&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;NOTE: The TimesTen Clusterware agent port must be the same on all nodes&lt;br /&gt;      of the cluster. Please refer to the TimesTen documentation for&lt;br /&gt;      additional information.&lt;br /&gt;&lt;br /&gt;Please enter a port number for the TimesTen Clusterware agent? [ 53386 ]&lt;br /&gt;&lt;br /&gt;Executing '/u01/app/oracle/product/11.1.0/crs/bin/crsctl check cluster' ...&lt;br /&gt;Oracle Clusterware is currently configured on the following nodes :&lt;br /&gt;&lt;br /&gt;1. rac1&lt;br /&gt;2. rac2&lt;br /&gt;&lt;br /&gt;NOTE: By default, all of the nodes listed above will be added to the TimesTen&lt;br /&gt;      Replication with Oracle Clusterware configuration. You can also&lt;br /&gt;      specify your own list of nodes based on the list above.&lt;br /&gt;&lt;br /&gt;Would you like to specify a node list for TimesTen Replication with Oracle Clusterware? [ no ]&lt;br /&gt;&lt;/pre&gt;После установки, проверим работу основного демона Oracle TimesTen&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac1 ~]$ &lt;b&gt;ttstatus&lt;/b&gt;&lt;br /&gt;TimesTen status report as of Fri Feb 19 08:54:30 2010&lt;br /&gt;&lt;br /&gt;Daemon pid 12978 port 53384 instance tt1&lt;br /&gt;TimesTen server pid 13016 started on port 53385&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;Accessible by group oinstall&lt;br /&gt;End of report&lt;/pre&gt;Далее необходимо повторить процедуру установки на втором узле. Для более легкого управления рекомендуется устанавливать программное обеспечение под одним пользователем и в те же директории.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Если вы вначале установили Oracle TimesTen и после этого установили Oracle Clusterware, то для активации возможности интеграции данных продуктов вам необходимо воспользоваться утилитой &lt;i&gt;ttmodinstall&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;b&gt;Создание базы данных&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Создадим на обоих узлах следующие директории: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;/u01/app/datastore - для хранения всех баз данных Oracle TimesTen &lt;/li&gt;&lt;li&gt;/u01/app/datastore/ha_ds – для базы данных «ha_ds», которую будем реплицировать.&lt;/li&gt;&lt;/ul&gt;&lt;pre class="c-sharp" name="code"&gt;[root@rac1 ~]$ &lt;b&gt;mkdir /u01/app/datastore&lt;/b&gt;[root@rac1 ~]$ &lt;b&gt;chown oracle:oinstall /u01/app/datastore&lt;/b&gt;&lt;br /&gt;[root@rac1 ~]$ &lt;b&gt;mkdir /u01/app/datastore/ha_ds&lt;/b&gt;&lt;br /&gt;[root@rac1 ~]$ &lt;b&gt;chown oracle:oinstall /u01/app/datastore/ha_ds&lt;/b&gt;&lt;/pre&gt;&lt;div class="c-sharp" name="code"&gt;Далее выбираем один из узлов кластера для создания базы данных. В данном случае - это узел rac1. Cоздадим сущность в файле sys.odbc.ini.&lt;/div&gt;&lt;pre class="c-sharp" name="code"&gt;…&lt;br /&gt;[ha_ds]&lt;br /&gt;Driver=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so&lt;br /&gt;DataStore=/u01/app/datastore/ha_ds&lt;br /&gt;PermSize=40&lt;br /&gt;TempSize=32&lt;br /&gt;PLSQL=1&lt;br /&gt;DatabaseCharacterSet=AL32UTF8&lt;br /&gt;…&lt;br /&gt;&lt;/pre&gt;Далее соединяемся с базой данных «ha_ds» под администратором экземпляра Oracle TimesTen (пользователь, который устанавливал экземпляр Oracle TimesTen, в данном примере – это пользователь oracle) и создадим в ней необходимых пользователей:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;adm – администратор базы данных и репликации (для этого данному пользователю необходима привилегия ADMIN). &lt;/li&gt;&lt;li&gt;app – пользователь имеющий минимальный набор привилегий, хозяин объектов. &lt;/li&gt;&lt;/ul&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac1 ~]$ &lt;b&gt;ttisql ha_ds&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2009, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;&lt;br /&gt;connect "DSN=ha_ds";&lt;br /&gt;Connection successful: DSN=ha_ds;UID=oracle;DataStore=/u01/app/datastore/ha_ds;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;PermSize=40;TempSize=32;TypeMode=0;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; &lt;b&gt;create user adm identified by adm;&lt;/b&gt;&lt;br /&gt;User created.&lt;br /&gt;Command&amp;gt; &lt;b&gt;grant ADMIN to adm;&lt;/b&gt;&lt;br /&gt;Command&amp;gt; &lt;b&gt;create user app identified by app;&lt;/b&gt;&lt;br /&gt;User created.&lt;br /&gt;Command&amp;gt; &lt;b&gt;grant create session, create table to app;&lt;/b&gt;&lt;br /&gt;Command&amp;gt; exit;&lt;br /&gt;Disconnecting...&lt;br /&gt;Done.&lt;br /&gt;[oracle@rac1 ~]$&lt;/pre&gt;&lt;div class="c-sharp" name="code"&gt;После этого соединяемся с базой данных под пользователем app и создаем таблицу plans.&lt;/div&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac1 ~]$ &lt;b&gt;ttisql "DSN=ha_ds;UID=app;PWD=app"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Copyright (c) 1996-2009, Oracle.  All rights reserved.&lt;br /&gt;Type ? or "help" for help, type "exit" to quit ttIsql.&lt;br /&gt;connect "DSN=ha_ds;UID=app;PWD=app";&lt;br /&gt;Connection successful: DSN=ha_ds;UID=app;DataStore=/u01/app/datastore/ha_ds;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;PermSize=40;TempSize=32;TypeMode=0;&lt;br /&gt;(Default setting AutoCommit=1)&lt;br /&gt;Command&amp;gt; &lt;b&gt;create table plans ( Id  number(12),&lt;/b&gt;&lt;br /&gt;       &amp;gt;                      &lt;b&gt;Name        varchar(32 char),&lt;/b&gt;&lt;br /&gt;       &amp;gt;                      &lt;b&gt;PricePerMin binary_double,&lt;/b&gt;&lt;br /&gt;       &amp;gt;                      &lt;b&gt;Status      char(3 char),&lt;/b&gt;&lt;br /&gt;       &amp;gt;                      &lt;b&gt;primary key (Id) );&lt;/b&gt;&lt;br /&gt;Command&amp;gt; exit;&lt;br /&gt;Disconnecting...&lt;br /&gt;Done.&lt;br /&gt;[oracle@rac1 ~]$&lt;/pre&gt;&lt;div class="c-sharp" name="code"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="c-sharp" name="code"&gt;&lt;b&gt;Конфигурирование Active-Standby pair репликации и Oracle Clusterware&lt;/b&gt;&lt;/div&gt;&lt;div class="c-sharp" name="code"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="c-sharp" name="code"&gt;После того, как установка Oracle Clusterware и Oracle TimesTen завершена, база данных в Oracle TimesTen создана, можно приступать к конфигурации Active-Standby pair репликации.&lt;/div&gt;&lt;div class="c-sharp" name="code"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="c-sharp" name="code"&gt;В данном примере описывается создание простой конфигурации (basic level of availability). &lt;/div&gt;&lt;div class="c-sharp" name="code"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="c-sharp" name="code"&gt;Вначале добавим сущность в cluster.oracle.ini в котором пропишем узлы на которых будет запущена репликация и директория для скриптов (check, start, stop для определенной репликации) для CRS-са.&lt;/div&gt;&lt;pre class="c-sharp" name="code"&gt;…&lt;br /&gt;[ha_ds]&lt;br /&gt;MasterHosts=rac1,rac2&lt;br /&gt;ScriptInstallDir=/u01/app/oracle/product/11.2.1/TimesTen/tt1/info/crs_scripts&lt;br /&gt;…&amp;nbsp;&lt;/pre&gt;Теперь нужно повторить настройки cluster.oracle.ini и sys.odbc.ini на втором узле.&amp;nbsp; &lt;br /&gt;Далее регистрируем TimesTen кластер в OCR.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@rac1 ~]$ &lt;b&gt;cd /u01/app/oracle/product/11.2.1/TimesTen/tt1/bin/&lt;/b&gt;&lt;br /&gt;[root@rac1 bin]$ &lt;b&gt;./ttCWAdmin -ocrconfig&lt;/b&gt;&lt;br /&gt;Oracle Clusterware home = /u01/app/oracle/product/11.1.0/crs&lt;br /&gt;&lt;/pre&gt;Запускаем агенты кластера TimesTen на обоих узлах.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@rac1 bin]$ &lt;b&gt;./ttCWAdmin -init&lt;/b&gt;&lt;br /&gt;Oracle Clusterware home = /u01/app/oracle/product/11.2.1/crs, hosts = rac1,rac2&lt;br /&gt;===============================================================&lt;br /&gt;Registering agent resources:... Registration complete.&lt;br /&gt;===============================================================&lt;br /&gt;===============================================================&lt;br /&gt;Registering daemon resources:... Registration complete.&lt;br /&gt;===============================================================&lt;br /&gt;[root@rac1 bin]$&lt;/pre&gt;После этого в CRS должны появиться четыре новых сервиса&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac1 ~]$ &lt;b&gt;crs_stat -t&lt;/b&gt;&lt;br /&gt;Name           Type           Target    State     Host&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;&lt;b&gt;TT_A...le_RAC1 application    ONLINE    ONLINE    rac1&lt;br /&gt;TT_A...le_RAC2 application    ONLINE    ONLINE    rac2&lt;br /&gt;TT_D...le_RAC1 application    ONLINE    ONLINE    rac1&lt;br /&gt;TT_D...le_RAC2 application    ONLINE    ONLINE    rac2&lt;/b&gt;&lt;br /&gt;ora.rac1.gsd   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac1.ons   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac1.vip   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac2.gsd   application    ONLINE    ONLINE    rac2&lt;br /&gt;ora.rac2.ons   application    ONLINE    ONLINE    rac2&lt;br /&gt;ora.rac2.vip   application    ONLINE    ONLINE    rac2&lt;br /&gt;[oracle@rac1 ~]$&lt;br /&gt;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac2 ~]$ &lt;b&gt;crs_stat&lt;/b&gt;&lt;br /&gt;…&lt;br /&gt;NAME=&lt;b&gt;TT_Agent_tt1_oracle_RAC1&lt;/b&gt;&lt;br /&gt;TYPE=application&lt;br /&gt;TARGET=ONLINE&lt;br /&gt;STATE=ONLINE on rac1&lt;br /&gt;&lt;br /&gt;NAME=&lt;b&gt;TT_Agent_tt1_oracle_RAC2&lt;/b&gt;&lt;br /&gt;TYPE=application&lt;br /&gt;TARGET=ONLINE&lt;br /&gt;STATE=ONLINE on rac2&lt;br /&gt;&lt;br /&gt;NAME=&lt;b&gt;TT_Daemon_tt1_oracle_RAC1&lt;/b&gt;&lt;br /&gt;TYPE=application&lt;br /&gt;TARGET=ONLINE&lt;br /&gt;STATE=ONLINE on rac1&lt;br /&gt;&lt;br /&gt;NAME=&lt;b&gt;TT_Daemon_tt1_oracle_RAC2&lt;/b&gt;&lt;br /&gt;TYPE=application&lt;br /&gt;TARGET=ONLINE&lt;br /&gt;STATE=ONLINE on rac2&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;Также видим новые процессы на обоих узлах.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac2 ~]$ &lt;b&gt;ps -ef | grep ttCRS&lt;/b&gt;&lt;br /&gt;oracle    5007     1  0 13:18 ?        00:00:00 /u01/app/oracle/product/11.2.1/TimesTen/tt1/bin/ttCRSdaemonCmd start&lt;br /&gt;oracle    5008     1  0 13:18 ?        00:00:00 /u01/app/oracle/product/11.2.1/TimesTen/tt1/bin/ttCRSAgentCmd start&lt;br /&gt;&lt;/pre&gt;Теперь создаем Active-Standby pair репликацию. Данную репликацию можно создать двумя способами: используя команду create active standby pair replication или с помощью ttCWAdmin, но не обоями сразу!!! В данном случае создавать и управлять репликацией будем с помощью ttCWAdmin. При вводе имени пользователя с привелегией ADMIN вводим имя пользователя adm (создан на этапе создания базы данных и объектов).&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@rac1 bin]$ &lt;b&gt;./ttCWAdmin -create -dsn ha_ds&lt;/b&gt;&lt;br /&gt;Successful connection with Oracle clusterware stack&lt;br /&gt;replication DDL = create active standby pair "HA_DS" on "rac1","HA_DS" on "rac2"&lt;br /&gt;&lt;br /&gt;Enter internal UID with ADMIN privileges: &lt;b&gt;adm&lt;/b&gt;&lt;br /&gt;Enter password for the same UID:&lt;br /&gt;Enter any phrase for password encryption:&lt;br /&gt;Uid/Pwd verified on host rac1&lt;br /&gt;Create active standby pair scheme on this host? (Y/N)&lt;b&gt;Y&lt;/b&gt;&lt;br /&gt;Waiting for confirmation from hosts...&lt;br /&gt;Active Standby pair created on host rac1&lt;br /&gt;==================================================================&lt;br /&gt;Warning!! Data store on host(s) rac2 may be destroyed in order to be duplicated from active after the roll out.&lt;br /&gt;Please back up this data store manually if necessary, before executing&lt;br /&gt;ttCWAdmin -start Command&lt;br /&gt;==================================================================&lt;br /&gt;Registering TimesTen Cluster with Oracle Clusterware&lt;br /&gt;==================================================================&lt;br /&gt;Number of unregistered dsn resources = 2&lt;br /&gt;Registering dsn resources:... Registration complete.&lt;br /&gt;==================================================================&lt;br /&gt;==================================================================&lt;br /&gt;Number of unregistered service resources = 2&lt;br /&gt;Registering service resources:... Registration complete.&lt;br /&gt;==================================================================&lt;br /&gt;[root@rac1 bin]$&lt;br /&gt;&lt;/pre&gt;После этого в CRS появятся еще четыре сервиса, связанные непосредственно с репликацией HA_DS. Также можно увидеть что два из них не запущены - имеют статусы OFFLINE.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac1 info]$ &lt;b&gt;crs_stat -t&lt;/b&gt;&lt;br /&gt;Name           Type           Target    State     Host&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;&lt;b&gt;TT_A...e_HA_DS application    ONLINE    ONLINE    rac1&lt;/b&gt;&lt;br /&gt;TT_A...le_RAC1 application    ONLINE    ONLINE    rac1&lt;br /&gt;TT_A...le_RAC2 application    ONLINE    ONLINE    rac2&lt;br /&gt;TT_D...le_RAC1 application    ONLINE    ONLINE    rac1&lt;br /&gt;TT_D...le_RAC2 application    ONLINE    ONLINE    rac2&lt;br /&gt;&lt;b&gt;TT_M...HA_DS_0 application    OFFLINE   OFFLINE&lt;br /&gt;TT_M...HA_DS_1 application    OFFLINE   OFFLINE&lt;br /&gt;TT_S...e_HA_DS application    ONLINE    ONLINE    rac1&lt;/b&gt;&lt;br /&gt;ora.rac1.gsd   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac1.ons   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac1.vip   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac2.gsd   application    ONLINE    ONLINE    rac2&lt;br /&gt;ora.rac2.ons   application    ONLINE    ONLINE    rac2&lt;br /&gt;ora.rac2.vip   application    ONLINE    ONLINE    rac2&lt;br /&gt;[oracle@rac1 info]$&lt;br /&gt;&lt;/pre&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac2 ~]$ &lt;b&gt;crs_stat&lt;/b&gt;&lt;br /&gt;...&lt;br /&gt;NAME=TT_Activeservice_tt1_oracle_HA_DS&lt;br /&gt;TYPE=application&lt;br /&gt;TARGET=ONLINE&lt;br /&gt;STATE=ONLINE on rac1&lt;br /&gt;&lt;br /&gt;NAME=TT_Master_tt1_oracle_HA_DS_0&lt;br /&gt;TYPE=application&lt;br /&gt;TARGET=OFFLINE&lt;br /&gt;STATE=OFFLINE&lt;br /&gt;&lt;br /&gt;NAME=TT_Master_tt1_oracle_HA_DS_1&lt;br /&gt;TYPE=application&lt;br /&gt;TARGET=OFFLINE&lt;br /&gt;STATE=OFFLINE&lt;br /&gt;&lt;br /&gt;NAME=TT_Subservice_tt1_oracle_HA_DS&lt;br /&gt;TYPE=application&lt;br /&gt;TARGET=ONLINE&lt;br /&gt;STATE=ONLINE on rac1&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;Также, после этого в директории, прописанной в файле конфигурации репликации (cluster.oracle.ini) появяться ряд файлов для CRS(start, stop, check) для определенной репликации.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac2 crs_scripts]$ &lt;b&gt;ls&lt;/b&gt;&lt;br /&gt;...&lt;br /&gt;ora_tt_tt1_HA_DS_master_1.sh&lt;br /&gt;ora_tt_tt1_HA_DS_master_0.sh&lt;br /&gt;ora_tt_tt1_HA_DS_activeservice.sh  &lt;br /&gt;ora_tt_tt1_HA_DS_subservice.sh&lt;br /&gt;&lt;/pre&gt;Теперь посмотрим состояние нашей репликации.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@rac1 bin]# &lt;b&gt;./ttCWAdmin -status&lt;/b&gt;&lt;br /&gt;TimesTen Cluster status report as of Wed Apr 14 17:00:19 2010&lt;br /&gt;&lt;br /&gt;====================================================================&lt;br /&gt;TimesTen daemon monitors:&lt;br /&gt;Host:RAC1 Status: online&lt;br /&gt;Host:RAC2 Status: online&lt;br /&gt;&lt;br /&gt;====================================================================&lt;br /&gt;====================================================================&lt;br /&gt;TimesTen Cluster agents&lt;br /&gt;Host:RAC1 Status: online&lt;br /&gt;Host:RAC2 Status: online&lt;br /&gt;&lt;br /&gt;====================================================================&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Status of Cluster related to DSN HA_DS:&lt;br /&gt;====================================================================&lt;br /&gt;1. Status of Cluster monitoring components:&lt;br /&gt;Monitor Process for Master Datastore 1 on Host RAC1: NOT RUNNING&lt;br /&gt;Monitor Process for Master Datastore 2 on Host RAC2: NOT RUNNING&lt;br /&gt;Monitor Process for Active datastore:RUNNING on Host rac1&lt;br /&gt;Monitor Process for Standby datastore:RUNNING on Host rac1&lt;br /&gt;&lt;br /&gt;2.Status of  Datastores comprising the cluster&lt;br /&gt;Master Datastore 1:&lt;br /&gt;Host:RAC1&lt;br /&gt;Status:AVAILABLE&lt;br /&gt;State:ACTIVE&lt;br /&gt;Master Datastore 2:&lt;br /&gt;Host:RAC2&lt;br /&gt;Status:UNAVAILABLE&lt;br /&gt;State:UNKNOWN&lt;br /&gt;====================================================================&lt;br /&gt;The cluster containing the replicated DSN is offline&lt;/pre&gt;Видим также, что агенты кластера Oracle TimesTen запущены, репликация существует, но она не запущена.&lt;br /&gt;Ну и теперь запустим нашу реприкацию.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@rac1 bin]$ &lt;b&gt;./ttCWAdmin -start -dsn ha_ds&lt;/b&gt;&lt;br /&gt;Successful connection with Oracle clusterware stack&lt;br /&gt;Starting Cluster resources with Oracle clusterware&lt;br /&gt;TimesTen Cluster is starting&lt;br /&gt;[root@rac1 bin]$&lt;br /&gt;&lt;/pre&gt;Проверим статусы репликации.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[root@rac1 bin]$ &lt;b&gt;./ttCWAdmin –status&lt;/b&gt;&lt;br /&gt;TimesTen Cluster status report as of Sat Feb 27 14:49:00 2010&lt;br /&gt;==================================================================&lt;br /&gt;TimesTen daemon monitors:&lt;br /&gt;Host:RAC1 Status: online&lt;br /&gt;Host:RAC2 Status: online&lt;br /&gt;&lt;br /&gt;==================================================================&lt;br /&gt;==================================================================&lt;br /&gt;TimesTen Cluster agents&lt;br /&gt;Host:RAC1 Status: online&lt;br /&gt;Host:RAC2 Status: online&lt;br /&gt;&lt;br /&gt;==================================================================&lt;br /&gt;Status of Cluster related to DSN HA_DS:&lt;br /&gt;==================================================================&lt;br /&gt;1. Status of Cluster monitoring components:&lt;br /&gt;Monitor Process for Master Datastore 1 on Host rac1: RUNNING&lt;br /&gt;Monitor Process for Master Datastore 2 on Host rac2: RUNNING&lt;br /&gt;Monitor Process for Active datastore:RUNNING on Host rac1&lt;br /&gt;Monitor Process for Standby datastore:RUNNING on Host rac2&lt;br /&gt;&lt;br /&gt;2.Status of  Datastores comprising the cluster&lt;br /&gt;Master Datastore 1:&lt;br /&gt;Host:rac1&lt;br /&gt;Status:AVAILABLE&lt;br /&gt;State:ACTIVE&lt;br /&gt;Master Datastore 2:&lt;br /&gt;Host:rac2&lt;br /&gt;Status:AVAILABLE&lt;br /&gt;State:STANDBY&lt;br /&gt;==================================================================&lt;br /&gt;The cluster containing the replicated DSN is online&lt;/pre&gt;Как видно реплицируемая база данных находиться в состоянии online. Состояние узлов в состояниях Active и Standby. Проверим CRS.&lt;br /&gt;&lt;pre class="c-sharp" name="code"&gt;[oracle@rac2 info]# &lt;b&gt;crs_stat -t&lt;/b&gt;&lt;br /&gt;Name           Type           Target    State     Host&lt;br /&gt;------------------------------------------------------------&lt;br /&gt;TT_A...e_HA_DS application    ONLINE    ONLINE    rac1&lt;br /&gt;TT_A...le_RAC1 application    ONLINE    ONLINE    rac1&lt;br /&gt;TT_A...le_RAC2 application    ONLINE    ONLINE    rac2&lt;br /&gt;TT_D...le_RAC1 application    ONLINE    ONLINE    rac1&lt;br /&gt;TT_D...le_RAC2 application    ONLINE    ONLINE    rac2&lt;br /&gt;TT_M...HA_DS_0 application    ONLINE    ONLINE    rac1&lt;br /&gt;TT_M...HA_DS_1 application    ONLINE    ONLINE    rac2&lt;br /&gt;TT_S...e_HA_DS application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac1.gsd   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac1.ons   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac1.vip   application    ONLINE    ONLINE    rac1&lt;br /&gt;ora.rac2.gsd   application    ONLINE    ONLINE    rac2&lt;br /&gt;ora.rac2.ons   application    ONLINE    ONLINE    rac2&lt;br /&gt;ora.rac2.vip   application    ONLINE    ONLINE    rac2&lt;br /&gt;[oracle@rac1 info]#&lt;br /&gt;&lt;/pre&gt;Как видно, все сервисы находяться в рабочем состоянии.&lt;br /&gt;На этом конфигурация Active-Standby pair репликации завершено. &lt;br /&gt;Теперь если мы будем вносить изменения на Активном узле, все эти изменения будут передаваться на standby, причем standby открыт на чтение.&lt;br /&gt;При возникновении сбоя на основном узле, CRS достаточно быстро (одной командой) переведет standby в состояние active, после чего пользователи смогут продолжить работу. Рассмотрение возможности client failover будут рассмотрены в следующих статьях.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-8244131360691411944?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/8244131360691411944/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=8244131360691411944&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8244131360691411944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/8244131360691411944'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/07/tech-oracle-clusterware-and-oracle.html' title='Tech: Oracle Clusterware and Oracle TimesTen'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-3533033016891811692</id><published>2010-06-28T06:53:00.001+04:00</published><updated>2011-12-22T23:34:25.640+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>DB-BEER Party 24 июня 2010г.</title><content type='html'>Update 1. Вот и состоялась очередная "&lt;b&gt;DB-BEER Party&lt;/b&gt;". На мой взгляд мероприятие прошло достаточно успешно - можно было увидеть старых коллег и спокойно пообщаться на профессиональные темы (и не только на профессиональные :) ).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_2u-2ZxvJAg8/TChSSl4ZJrI/AAAAAAAAABQ/zmctpAFUzlA/s1600/IMG_8266.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_2u-2ZxvJAg8/TChSSl4ZJrI/AAAAAAAAABQ/zmctpAFUzlA/s320/IMG_8266.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_2u-2ZxvJAg8/TChUE9OQEXI/AAAAAAAAABY/WajI3whSTwM/s1600/IMG_8273.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_2u-2ZxvJAg8/TChUE9OQEXI/AAAAAAAAABY/WajI3whSTwM/s320/IMG_8273.jpg" /&gt;&lt;/a&gt;На фото (слева) Марк Ривкин торжественно открывает данное мероприятие. На фото (справа), Андрей Пивоваров обсуждает насущные проблемы с Александром Рындиным. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;24 июня состоится "&lt;b&gt;DB-BEER Party&lt;/b&gt;". На данном мероприятии можно душевно, за кружечкой пива, обсудить особенности работы продуктов семейства Oracle DB :)))&lt;br /&gt;&lt;br /&gt;Планируемые 15-Ти минутные доклады:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Новые и малоизвестные DB продукты&lt;/li&gt;&lt;li&gt;Основные проблемы миграции на 11g&lt;/li&gt;&lt;li&gt;Использование мобильных терминалов в решениях Oracle&lt;/li&gt;&lt;li&gt;Exadata&lt;/li&gt;&lt;li&gt;Новости о судьбе ПО SUN&lt;/li&gt;&lt;li&gt;ROUG и конференция&amp;nbsp; EMEA Harmony&lt;/li&gt;&lt;li&gt;Обзор последней компьютерной литературы&lt;/li&gt;&lt;li&gt;Golden gate&lt;/li&gt;&lt;li&gt;Демо TimesTen&lt;/li&gt;&lt;li&gt;Опыт использования RAT&lt;/li&gt;&lt;li&gt;Опыт использования опций БД в проектах &lt;/li&gt;&lt;li&gt;И другие доклады.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;Если вы можете рассказать о чем-то интересном – напишите&amp;nbsp; на&amp;nbsp; почтовый &lt;br /&gt;адрес: Mark.Rivkin@oracle.com. Мы хотим, чтобы как можно меньше рассказывал &lt;br /&gt;Oracle и как можно больше рассказывали люди, использующие продукты Oracle каждый день. &lt;br /&gt;Тема может быть любая, но желательно, чтобы она лежала в области продуктов семейства Oracle Database.&lt;br /&gt;&lt;br /&gt;На это мероприятие обязательна регистрация, поэтому необходимо отправить Елене Гудовой (Elena.Gudova@oracle.com) заполненную регистрационную форму:&lt;br /&gt;&lt;br /&gt;ФИО……...............................................……………………………………………………..&lt;br /&gt;E-mail.………………………………………………………………………………………..&lt;br /&gt;Отрасль……………………………….………………………..……………………………&lt;br /&gt;Компания…………………………………………………………………………………….&lt;br /&gt;Должность……………………………………………………………………………………&lt;br /&gt;Адрес…………………………………………………………………………………………&lt;br /&gt;Город…………………………………………………………………………&lt;br /&gt;Телефон……………………………………………………………….&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Событие состоиться в ресторане «Кому охота», по адресу: Спиридоньевский переулок, &lt;br /&gt;д. 12/9 (вход с Б.Козихиского переулка). Начало регистрации в 15:30.&lt;br /&gt;&lt;br /&gt;PS. Про аналогичное мероприятие "BI-пиво" можно прочитать на блоге &lt;a href="http://www.oraclebi.ru/2010/06/09/ohota/"&gt;Андрея Пивоварова&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-3533033016891811692?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/3533033016891811692/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=3533033016891811692&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3533033016891811692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/3533033016891811692'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/06/db-beer-party-24-2010.html' title='DB-BEER Party 24 июня 2010г.'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_2u-2ZxvJAg8/TChSSl4ZJrI/AAAAAAAAABQ/zmctpAFUzlA/s72-c/IMG_8266.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-2714540508912926947</id><published>2010-06-23T14:37:00.002+04:00</published><updated>2011-12-22T23:34:53.094+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Oracle Database 11g Migration tour - Moscow 22d June</title><content type='html'>22 июня, в день начала великой отечественной войны, в отеле "Катерина", состоится мероприятие, посвященное миграции баз данных.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=114254&amp;amp;src=7021966&amp;amp;src=7021966&amp;amp;Act=18"&gt;Программа и регистрация&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Я там тоже буду :)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_2u-2ZxvJAg8/TCH9TgDv8FI/AAAAAAAAABI/DCFoW5Pf-qo/s1600/IMG_8260.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_2u-2ZxvJAg8/TCH9TgDv8FI/AAAAAAAAABI/DCFoW5Pf-qo/s320/IMG_8260.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Update 1.&lt;br /&gt;Мероприятие прошло достаточно успешно, было много вопросов, особенно про способы миграции с очень маленьким временем простоя.&lt;br /&gt;&lt;br /&gt;На фото Сергей Иванович Томин в своей неповторимой манере рассказывает про "подводные камни", с которыми вы можете столкнуться при миграции на 10g и 11g.&lt;br /&gt;&lt;a href="http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=114254&amp;amp;src=7021966&amp;amp;src=7021966&amp;amp;Act=18"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-2714540508912926947?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/2714540508912926947/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=2714540508912926947&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/2714540508912926947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/2714540508912926947'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/06/oracle-database-11g-migration-tour.html' title='Oracle Database 11g Migration tour - Moscow 22d June'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_2u-2ZxvJAg8/TCH9TgDv8FI/AAAAAAAAABI/DCFoW5Pf-qo/s72-c/IMG_8260.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-6422262902019110028</id><published>2010-05-06T13:10:00.000+04:00</published><updated>2010-05-06T13:10:14.206+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TimesTen'/><title type='text'>Oracle TimesTen 11.2.1.6</title><content type='html'>На &lt;a href="http://www.oracle.com/technology/software/products/timesten/index.html"&gt;otn.oracle.com&lt;/a&gt; появилась новая версия Oracle TimesTen 11.2.1.&lt;b&gt;6&lt;/b&gt; под Linux x86 (32 и 64 bit) и под Solaris Sparc (32 и 64 bit).&lt;br /&gt;&lt;br /&gt;Новые возможности в &lt;a href="http://download.oracle.com/docs/cd/E13085_01/doc/timesten.1121/e13080/toc.htm"&gt;документации&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-6422262902019110028?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/6422262902019110028/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=6422262902019110028&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/6422262902019110028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/6422262902019110028'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/05/oracle-timesten-11216.html' title='Oracle TimesTen 11.2.1.6'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-5376740669722086344</id><published>2010-05-02T01:06:00.016+04:00</published><updated>2010-05-04T22:12:40.473+04:00</updated><title type='text'>Установка Oracle TimesTen</title><content type='html'>Перед тем как рассматривать возможности Oracle TimesTen, необходимо его установить. Этим и займемся :)&lt;br /&gt;&lt;br /&gt;В данном посте я буду устанавливать Oracle TimesTen 11.2.1.4 на OEL 5.4 x86 (дистрибутив можно скачать с &lt;a href="http://www.oracle.com/technology/software/products/timesten/index.html"&gt;otn.oracle.com&lt;/a&gt;)&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;ВАЖНО: Перед установкой я настоятельно рекомендую ознакомиться с документацией (Oracle® TimesTen In-Memory Database Installation Guide)&lt;br /&gt;&lt;br /&gt;Перед установкой нужно выпонить шаги описанные в разделе "Installation prerequisites" для Linux (сконфигурировать &lt;i&gt;huge pages, shared memory&lt;/i&gt; и др.)&lt;br /&gt;&lt;br /&gt;Установка будет происходить под пользователем &lt;b&gt;oracle&lt;/b&gt; (данный пользователь будет администратором экземпляра).&lt;br /&gt;&lt;br /&gt;Перед началом установки Oracle TimesTen, создадим необходимые директории:&lt;br /&gt;- Директория &lt;b&gt;&lt;i&gt;/etc/TimesTen&lt;/i&gt;&lt;/b&gt; необходима для процесса установки.&lt;br /&gt;- В директорию &lt;b&gt;&lt;i&gt;/u01/app/oracle/product/11.2.1&lt;/i&gt;&lt;/b&gt; будет установлен экземпляр Oracle TimesTen.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[root@tt1 ~]# &lt;b&gt;mkdir /etc/TimesTen&lt;/b&gt;&lt;br /&gt;[root@tt1 ~]# &lt;b&gt;chown oracle:oinstall /etc/TimesTen&lt;/b&gt;&lt;br /&gt;[root@tt1 ~]# &lt;b&gt;mkdir /u01/app/oracle/product/11.2.1&lt;/b&gt;&lt;br /&gt;[root@tt1 ~]# &lt;b&gt;chown oracle:oinstall /u01/app/oracle/product/11.2.1&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее разархивируем дистрибутив.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[oracle@tt1 ~]$&lt;b&gt; pwd&lt;/b&gt;&lt;br /&gt;/home/oracle&lt;br /&gt;[oracle@tt1 ~]$ &lt;b&gt;ls&lt;/b&gt;&lt;br /&gt;timesten112140.linux86.tar.gz&lt;br /&gt;[oracle@tt1 ~]$ &lt;b&gt;gunzip timesten112140.linux86.tar.gz&lt;/b&gt;&lt;br /&gt;[oracle@tt1 ~]$ &lt;b&gt;tar -xf timesten112140.linux86.tar&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее переходим в директорию&lt;i&gt; linux86&lt;/i&gt; и запускаем установку.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[oracle@tt1 ~]$ &lt;b&gt;cd linux86&lt;/b&gt;&lt;br /&gt;[oracle@tt1 linux86]$ &lt;b&gt;./setup.sh&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;NOTE: Each TimesTen installation is identified by a unique instance name.&lt;br /&gt;The instance name must be a non-null alphanumeric string, not longer&lt;br /&gt;than 255 characters.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Вначале, предлагается ввести имя экземпляра Oracle TimesTen (или согласиться с именем по умолчанию). В данном примере имя экземпляра &lt;b&gt;tt1&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Please choose an instance name for this installation? [ tt1121 ]&lt;b&gt; tt1&lt;/b&gt;&lt;br /&gt;Instance name will be 'tt1'.&lt;br /&gt;Is this correct? [ yes ]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее, предлагается выбрать компоненты для установки. В данном примере я устанавливаю все компоненты ("Client/Server and Data Manager").&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Of the three components:&lt;br /&gt;&lt;br /&gt;[1] Client/Server and Data Manager&lt;br /&gt;[2] Data Manager Only&lt;br /&gt;[3] Client Only&lt;br /&gt;&lt;br /&gt;Which would you like to install? [ 1 ]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее необходимо выбрать директорию для установки экземпляра. В данном случае я воспользовался директорией, которую создал в самом начале.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Of the following options :&lt;br /&gt;&lt;br /&gt;[1] /home/oracle&lt;br /&gt;[2] /u01/distr/linux86&lt;br /&gt;[3] Specify a location&lt;br /&gt;[q] Quit the installation&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Where would you like to install the tt1 instance of TimesTen? [ 1 ] &lt;b&gt;3&lt;/b&gt;&lt;br /&gt;Please specify a directory to install TimesTen? [ /home/oracle ]&lt;b&gt; /u01/app/oracle/product/11.2.1 &lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее предлагается ввести директорию "основного демона", самого главного процесса экземпляра Oracle TimesTen, в которой будут размещаться файлы для работы с базами данных, и др. Также предлагается установить директорию для размещения логов работы основного демона. В данном примере я использую значения по умолчанию.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Where would you like to create the daemon home directory? [/u01/app/oracle/product/11.2.1/TimesTen/tt1/info]&lt;br /&gt;&lt;br /&gt;The daemon logs will be located in /u01/app/oracle/product/11.2.1/TimesTen/tt1/info&lt;br /&gt;Would you like to specify a different location for the daemon logs? [ no ]&lt;br /&gt;Installing into /u01/app/oracle/product/11.2.1/TimesTen/tt1 ...&lt;br /&gt;Uncompressing ...&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее, необходимо определить порт для основного демона. Я использую значения по умолчанию. Затем я ограничиваю доступ к установке Oracle TimesTen всем пользователям кроме пользователей, входящих в группу oinstall. Опять использую значения по умолчанию.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;NOTE: If you are configuring TimesTen for use with Oracle Clusterware, the&lt;br /&gt;daemon port number must be the same across all TimesTen installations&lt;br /&gt;managed within the same Oracle Clusterware cluster.&lt;br /&gt;NOTE: All installations that replicate to each other must use the same daemon&lt;br /&gt;port number that is set at installation time. The daemon port number can&lt;br /&gt;be verified by running 'ttVersion'.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The default port number is 53384.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Do you want to use the default port number for the TimesTen daemon? [ yes ]&lt;br /&gt;The daemon will run on the default port number (53384).&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;NOTE: For security, we recommend that you restrict access to the&lt;br /&gt;TimesTen installation to members of a single OS group. Only members of&lt;br /&gt;that OS group will be allowed to perform direct mode connections to&lt;br /&gt;TimesTen, and only members of that OS group will be allowed to perform&lt;br /&gt;operations that access TimesTen data stores, TimesTen files and shared&lt;br /&gt;memory. The OS group defaults to the primary group of the instance&lt;br /&gt;administrator. You can default to this group, choose another OS group&lt;br /&gt;or you can make this instance world-accessible. If you choose to make&lt;br /&gt;this instance world-accessible, all database files and shared memory&lt;br /&gt;are readable and writable by all users.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Restrict access to the the TimesTen installation to the group 'oinstall'? [ yes ]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее, предлагается активировать возможность поддержки PL/SQL. Опять соглашаемся (по умолчанию).&lt;br /&gt;&lt;br /&gt;&lt;i&gt;NOTE: Enabling PL/SQL will increase the size of some TimesTen libraries.&lt;br /&gt;&lt;br /&gt;Would you like to enable PL/SQL for this instance? [ yes ]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее, если вы хотите использовать Oracle TimesTen для кэширования данных из Oracle Database, вы должны установить на машине Oracle Client, и после этого установить значение ORACLE_HOME для переменной TNS_ADMIN (см. ниже). В данном примере я не буду активировать данную возможность (ввожу s=skip).&lt;br /&gt;&lt;br /&gt;&lt;i&gt;In order to use the 'In-Memory Database Cache' feature in any databases&lt;br /&gt;created within this installation, you must set a value for the TNS_ADMIN&lt;br /&gt;environment variable. It can be left blank, and a value can be supplied later&lt;br /&gt;using /bin/ttModInstall.&lt;br /&gt;&lt;br /&gt;Please enter a value for TNS_ADMIN (s=skip)? [ ] s&lt;br /&gt;&lt;br /&gt;NOTE: It appears that you are running version 4.1 of the g++&lt;br /&gt;compiler. TimesTen ships with multiple sets of client libraries and server&lt;br /&gt;binaries : one built for compatibility with g++ 3.4.6 and one with&lt;br /&gt;g++ 4.1.0. The installer has created links to the 4.1.0 library in the&lt;br /&gt;/lib directory and to the 4.1.0 server binary in the&lt;br /&gt;/bin directory. If you want to use a different compiler,&lt;br /&gt;please modify the links to point to the desired library and server binary.&lt;br /&gt;&lt;br /&gt;Installing server components ..&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Далее необходимо определить порт для серверного процесса Oracle TimesTen - данный процесс необходим для осуществления клиент-серверного соединения с Oracle TimesTen. В данном примере использую значение по умолчанию.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;What is the TCP/IP port number that you want the TimesTen Server to listen on? [ 53385 ]&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее, предлагается установить документацию. Опять используем значения по умолчанию.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Do you want to install QuickStart and the TimesTen Documentation? [ no ]&lt;br /&gt;Would you like to install the documentation (without QuickStart)? [ yes ]&lt;br /&gt;Where would you like to create the doc directory (s=skip)?&lt;br /&gt;[ /u01/app/oracle/product/11.2.1/TimesTen/tt1/doc ]&lt;br /&gt;The TimesTen documentation has been installed in /u01/app/oracle/product/11.2.1/TimesTen/tt1/doc.&lt;br /&gt;Installing client components ...&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Далее, если вы планируете использовать репликацию Oracle TimesTen, то для управления active-standby pair репликацией можно использовать Oracle Clusterware. Совместное использование Oracle Clusterware и Oracle TimesTen будет рассмотрено в ближайшем будущем :) В данном примере я не использую данную возможность.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Would you like to use TimesTen Replication with Oracle Clusterware? [ no ]&lt;br /&gt;&lt;br /&gt;NOTE: The TimesTen daemon startup/shutdown scripts have not been installed.&lt;br /&gt;&lt;br /&gt;Run the 'setuproot' script :&lt;br /&gt;cd /u01/app/oracle/product/11.2.1/TimesTen/tt1/bin&lt;br /&gt;./setuproot -install&lt;br /&gt;This will move the TimesTen startup script into its appropriate location.&lt;br /&gt;&lt;br /&gt;The startup script is currently located here :&lt;br /&gt;'/u01/app/oracle/product/11.2.1/TimesTen/tt1/startup/tt_tt1'.&lt;br /&gt;&lt;br /&gt;The 11.2.1.4 Release Notes are located here :&lt;br /&gt;'/u01/app/oracle/product/11.2.1/TimesTen/tt1/README.html'&lt;br /&gt;&lt;br /&gt;Starting the daemon ...&lt;br /&gt;TimesTen Daemon startup OK.&lt;br /&gt;End of TimesTen installation.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;На данном этапе установка экземпляра Oracle TimesTen завершена, но, возможно, вам понадобится автоматический запуск экземпляра Oracle TimesTen после перезапуска системы. Для этого выполним скрипты, которые нам предложил установщик.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;[root@tt1 ~]# &lt;b&gt;cd /u01/app/oracle/product/11.2.1/TimesTen/tt1/bin&lt;/b&gt;&lt;br /&gt;[root@tt1 bin]#&lt;b&gt; ./setuproot -install&lt;/b&gt;&lt;br /&gt;Would you like to install the TimesTen daemon startup scripts into /etc/init.d? [ yes ]&lt;br /&gt;Copying /u01/app/oracle/product/11.2.1/TimesTen/tt1/startup/tt_tt1 to /etc/init.d&lt;br /&gt;&lt;br /&gt;Successfully installed the following scripts :&lt;br /&gt;/etc/init.d/tt_tt1&lt;br /&gt;/etc/rc.d/rc0.d/K45tt_tt1&lt;br /&gt;/etc/rc.d/rc1.d/K45tt_tt1&lt;br /&gt;/etc/rc.d/rc2.d/S90tt_tt1&lt;br /&gt;/etc/rc.d/rc3.d/S90tt_tt1&lt;br /&gt;/etc/rc.d/rc5.d/S90tt_tt1&lt;br /&gt;/etc/rc.d/rc6.d/K45tt_tt1&lt;br /&gt;[root@tt1 ~]#&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Проверим работу основного демона. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;[oracle@tt1 ~]$ &lt;b&gt;ttstatus&lt;/b&gt;&lt;br /&gt;TimesTen status report as of Fri Feb 19 08:54:30 2010&lt;br /&gt;&lt;br /&gt;Daemon pid 12978 port 53384 instance tt1&lt;br /&gt;TimesTen server pid 13016 started on port 53385&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;Accessible by group oinstall&lt;br /&gt;End of report&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;На данном этапе установка полностью завершена. Теперь можно создавать базы данных и с ними работать. Если в дальнейшем понадобиться изменить какие-нибудь параметры инсталляции Oracle TimesTen (например - активировать интеграцию с Oracle Clusterware), то это можно сделать с помощью утилиты &lt;b&gt;&lt;i&gt;TT_HOME/bin/ttModInstall&lt;/i&gt;&lt;/b&gt;.Также &lt;a href="http://www.oracle.com/technology/products/timesten/index.html"&gt;здесь&lt;/a&gt; можно посмотреть различные ролики по установке Oracle TimesTen на различные платформы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-5376740669722086344?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/5376740669722086344/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=5376740669722086344&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/5376740669722086344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/5376740669722086344'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/05/oracle-timesten_01.html' title='Установка Oracle TimesTen'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-4753788245721759598</id><published>2010-05-02T00:40:00.001+04:00</published><updated>2010-05-04T19:23:21.089+04:00</updated><title type='text'>Введение в Oracle TimesTen</title><content type='html'>Свое описание начну с одного, очень интересного на мой взгляд, продукта под названием Oracle TimesTen. Что же это за продукт?&lt;br /&gt;&lt;br /&gt;Если сказать в нескольких словах, то Oracle TimesTen - это очень быстрая СУБД, которая размещается в оперативной памяти. Используя оптимизированные структуры для работы именно в оперативной памяти (например Ttree и Hash индексы и др.) Oracle TimesTen позволяет получить очень маленькое время отклика (микросекунды) и высокую пропускную прособность.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;TimesTen наиболее часто находит применение в следующих областях:&lt;br /&gt;&lt;br /&gt;* Биржевая торговля&lt;br /&gt;* Биллинг, сети и телекоммуникации&lt;br /&gt;* Резервирование билетов (авиа, жд и др.)&lt;br /&gt;* Порталы самообслуживания&lt;br /&gt;* Центры поддержки клиентов&lt;br /&gt;&lt;br /&gt;Кроме того, Oracle TimesTen имеет достаточно много возможностей:&lt;br /&gt;&lt;br /&gt;1. Поддержка SQL&lt;br /&gt;&lt;br /&gt;2. Поддержка PL/SQL&lt;br /&gt;&lt;br /&gt;3. Создание XLA приложений&lt;br /&gt;&lt;br /&gt;4. Репликация&lt;br /&gt;&lt;br /&gt;5. Интеграция с Oracle Clusterware&lt;br /&gt;&lt;br /&gt;6. In-Memory Database Grid&lt;br /&gt;&lt;br /&gt;И многое другое.&lt;br /&gt;&lt;br /&gt;Далее в следующих постах я постораюсь раскрыть более детально каждую из этих возможностей.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-4753788245721759598?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/4753788245721759598/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=4753788245721759598&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4753788245721759598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4753788245721759598'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/05/oracle-timesten.html' title='Введение в Oracle TimesTen'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1711149732348302804.post-4539371586659909317</id><published>2010-05-02T00:20:00.000+04:00</published><updated>2010-05-02T01:02:02.610+04:00</updated><title type='text'>О блоге</title><content type='html'>Вернувшись из очередной командировки я по примеру своих коллег (Дмитрия Волкова, Андрея Пивоварова, Александра Рындина) решил создать свой блог. &lt;br /&gt;В данном блоге, я буду размещать информацию о различных технологических продуктах корпорации Oracle&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1711149732348302804-4539371586659909317?l=ggsig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ggsig.blogspot.com/feeds/4539371586659909317/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1711149732348302804&amp;postID=4539371586659909317&amp;isPopup=true' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4539371586659909317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1711149732348302804/posts/default/4539371586659909317'/><link rel='alternate' type='text/html' href='http://ggsig.blogspot.com/2010/05/blog-post.html' title='О блоге'/><author><name>GGS</name><uri>http://www.blogger.com/profile/03689805544301131051</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
