<?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-8317714484970442516</id><updated>2011-11-28T05:23:24.758+05:30</updated><category term='Oracle DBA'/><category term='Oracle 10G New Features'/><category term='Oracle Magazine'/><title type='text'>TechSudo</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://techsudo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://techsudo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sudo</name><uri>http://www.blogger.com/profile/06589867146383914387</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>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8317714484970442516.post-3555849342198798284</id><published>2009-01-01T11:45:00.003+05:30</published><updated>2009-01-01T11:58:48.033+05:30</updated><title type='text'>Query the Oracle Alert Log using SQL commands</title><content type='html'>&lt;h3 class="storytitle" id="post-23"&gt;&lt;a href="http://www.singlequery.com/2007/02/read-the-alert-log-with-sql/" rel="bookmark"&gt;Read the alert log with SQL&lt;/a&gt;&lt;/h3&gt;  &lt;div class="meta"&gt;Published in &lt;a href="http://www.singlequery.com/category/database-tips/" title="View all posts in Database Tips" rel="category tag"&gt;Database Tips&lt;/a&gt; by cdawes Tuesday February 27, 2007  &lt;/div&gt;    &lt;div class="storycontent"&gt;   &lt;p&gt; There are often times when you want to know what has been recorded in the database’s alert log, but may not want to or be able to log into the database server and view the file. An SQL interface to the alert log can offer several advantages – you don’t need an account on the database server and you can read the alert log from SQL and PLSQL programs (which can be incorporated into other programs). This posting will show you how to create a usable SQL interface to the alert log. Then using this interface you can write simple SQL to show the alert log entries for the past hour or all the alert log entries that resulted from errors so far this month.&lt;/p&gt; &lt;p&gt;External tables, introduced in database release 9.0 give us the ability to access the alert log using SQL. The IGNORE NULLS option to the LAST analytic function, introduced in database release 10g, allows us to really make use of the dates we find in the alert log.&lt;/p&gt; &lt;p&gt;In this example, we'll create all the schema objects in the SYSTEM schema and run the commands as user SYS (we can’t grant ourselves privileges, so we can’t run all of the statements as SYSTEM)&lt;/p&gt; &lt;p&gt;The first block of code below does three things, first is to create a directory for the bdump_dest – the directory location of the alert log. We call it appropriately BDumpDir. Next, we need to grant the read privilege to SYSTEM, so this directory can be used for the external table. Finally, we create the external table on the file alert_sid.log:&lt;/p&gt; &lt;pre&gt;&lt;br /&gt;&lt;br /&gt;DECLARE&lt;br /&gt;&lt;br /&gt; BDumpDir  VARCHAR2(200);&lt;br /&gt;&lt;br /&gt; SID       VARCHAR2(16);&lt;br /&gt;&lt;br /&gt; ObjectExists EXCEPTION;&lt;br /&gt;&lt;br /&gt; PRAGMA EXCEPTION_INIT(ObjectExists,-955);&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt; -- get the bdump dir&lt;br /&gt;&lt;br /&gt; SELECT value&lt;br /&gt;&lt;br /&gt; INTO BDumpDir&lt;br /&gt;&lt;br /&gt; FROM v$parameter&lt;br /&gt;&lt;br /&gt; WHERE name='background_dump_dest';&lt;br /&gt;&lt;br /&gt; -- create the directory for the bdump dir&lt;br /&gt;&lt;br /&gt; EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY bdump_dir AS '''||&lt;br /&gt;&lt;br /&gt;   BDumpDir||'''';&lt;br /&gt;&lt;br /&gt; -- grant the necessary privileges&lt;br /&gt;&lt;br /&gt; EXECUTE IMMEDIATE 'GRANT READ ON DIRECTORY bdump_dir TO system';&lt;br /&gt;&lt;br /&gt; -- get the SID&lt;br /&gt;&lt;br /&gt; SELECT instance_name INTO SID FROM v$instance;&lt;br /&gt;&lt;br /&gt; -- create the external table&lt;br /&gt;&lt;br /&gt; EXECUTE IMMEDIATE 'CREATE TABLE system.ALERT_LOG_EXTERNAL&lt;br /&gt;&lt;br /&gt;   (TEXT VARCHAR2(255)&lt;br /&gt;&lt;br /&gt;   ) ORGANIZATION EXTERNAL&lt;br /&gt;&lt;br /&gt;   (TYPE ORACLE_LOADER&lt;br /&gt;&lt;br /&gt;    DEFAULT DIRECTORY BDUMP_DIR&lt;br /&gt;&lt;br /&gt;    ACCESS PARAMETERS&lt;br /&gt;&lt;br /&gt;    (records delimited by newline&lt;br /&gt;&lt;br /&gt;     nobadfile&lt;br /&gt;&lt;br /&gt;     nologfile&lt;br /&gt;&lt;br /&gt;    )&lt;br /&gt;&lt;br /&gt;    LOCATION (''alert_'||SID||'.log'')&lt;br /&gt;&lt;br /&gt;   )&lt;br /&gt;&lt;br /&gt;   REJECT LIMIT UNLIMITED'&lt;br /&gt;&lt;br /&gt; ;&lt;br /&gt;&lt;br /&gt;-- ignore ORA-955 errors (object already exists)&lt;br /&gt;&lt;br /&gt;EXCEPTION WHEN ObjectExists THEN NULL;&lt;br /&gt;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now we can query the external table to read the alert log.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;SELECT * FROM system.alert_log_external&lt;br /&gt;&lt;br /&gt;WHERE ROWNUM &lt; 20;&lt;br /&gt;&lt;p&gt;TEXT&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Thu Jan 25 14:58:36 2007&lt;br /&gt;&lt;br /&gt;Thread 1 advanced to log sequence 227&lt;br /&gt;&lt;br /&gt; Current log# 1 seq# 227 mem# 0: C:\INFO\ORACLE\ORADATA\ORA102\REDO01.LOG&lt;br /&gt;&lt;br /&gt;Dump file c:\info\oracle\product\10.2.0\admin\ora102\bdump\alert_ora102.log&lt;br /&gt;&lt;br /&gt;Fri Jan 26 09:18:36 2007&lt;br /&gt;&lt;br /&gt;ORACLE V10.2.0.1.0 - Production vsnsta=0&lt;br /&gt;&lt;br /&gt;vsnsql=14 vsnxtr=3&lt;br /&gt;&lt;br /&gt;Windows XP Version V5.1 Service Pack 2&lt;br /&gt;&lt;br /&gt;CPU                 : 2 - type 586&lt;br /&gt;&lt;br /&gt;Process Affinity    : 0×00000000&lt;br /&gt;&lt;br /&gt;Memory (Avail/Total): Ph:671M/2046M&lt;br /&gt;&lt;br /&gt;Fri Jan 26 09:18:36 2007&lt;br /&gt;&lt;br /&gt;Starting ORACLE instance (normal)&lt;br /&gt;&lt;br /&gt;LICENSE_MAX_SESSION = 0&lt;br /&gt;&lt;br /&gt;LICENSE_SESSIONS_WARNING = 0&lt;br /&gt;&lt;br /&gt;Picked latch-free SCN scheme 2&lt;br /&gt;&lt;br /&gt;Using LOG_ARCHIVE_DEST_10 parameter default value as USE_DB_RECOVERY_FILE_DEST&lt;br /&gt;&lt;br /&gt;Autotune of undo retention is turned on.&lt;br /&gt;&lt;br /&gt;IMODE=BR&lt;/p&gt;&lt;br /&gt;&lt;p&gt;19 rows selected.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt; &lt;p&gt;This is a first step, but the log file isn’t really very usable - the entries are all timestamped, but the timestamp appears inline with the entries. We need to associate the timestamp with each line in the file, so we can query the alert log based on timestamp. We know the timestamp appears in a consistent format, so we can look for these timestamps and convert them to a date datatype. We create a function to do this for us, so we can trap and ignore any errors related to invalid dates. The alert_log_date function looks for strings in the expected timestamp format and converts them to a date. If the line in the alert log does not appear in a timestamp format (ORA-1846 is raised), we ignore it.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE FUNCTION system.alert_log_date( text IN VARCHAR2 )&lt;br /&gt;&lt;br /&gt; RETURN DATE&lt;br /&gt;&lt;br /&gt;IS&lt;br /&gt;&lt;br /&gt; InvalidDate  EXCEPTION;&lt;br /&gt;&lt;br /&gt; PRAGMA EXCEPTION_INIT(InvalidDate, -1846);&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt; RETURN TO_DATE(text,'Dy Mon DD HH24:MI:SS YYYY'&lt;br /&gt;&lt;br /&gt;   ,'NLS_DATE_LANGUAGE=AMERICAN');&lt;br /&gt;&lt;br /&gt;EXCEPTION&lt;br /&gt;&lt;br /&gt; WHEN InvalidDate THEN RETURN NULL;&lt;br /&gt;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So now, we can get the alert log entry and the timestamp, if present:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;SELECT ROWNUM row_num ,system.alert_log_date(text) alert_date, text&lt;br /&gt;&lt;br /&gt;FROM system.alert_log_external&lt;br /&gt;&lt;br /&gt;WHERE ROWNUM &lt; 20&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&lt;img id="image30" alt="Error Log Query, Image 1" src="http://www.singlequery.com/wp-content/uploads/2007/02/image_01.jpg" width="550" /&gt;&lt;/p&gt; &lt;p&gt;This is progress, but we really want that datestamp carried down so each line of text is marked with the datestamp. This is where the IGNORE NULLS option to the LAST function comes into play. We use our working query, but then wrap another query around it.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;SELECT row_num&lt;br /&gt;&lt;br /&gt;     ,LAST_VALUE(alert_date IGNORE NULLS) OVER(ORDER BY row_num&lt;br /&gt;&lt;br /&gt;          ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) alert_date&lt;br /&gt;&lt;br /&gt;     ,alert_text&lt;br /&gt;&lt;br /&gt;FROM (SELECT ROWNUM row_num&lt;br /&gt;&lt;br /&gt;           ,system.alert_log_date(text) alert_date&lt;br /&gt;&lt;br /&gt;           ,text alert_text&lt;br /&gt;&lt;br /&gt;     FROM system.alert_log_external&lt;br /&gt;&lt;br /&gt;    )&lt;br /&gt;&lt;br /&gt;WHERE ROWNUM &lt; 20&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&lt;img id="image31" alt="Alert Log, Image 2" src="http://www.singlequery.com/wp-content/uploads/2007/02/image_02.jpg" width="550" /&gt;&lt;/p&gt; &lt;p&gt;So, now we get the line number, date stamp and text for each alert log entry. Hm.. It’s starting to look more like a good old table. Let’s add the starting line number for each alert log entry, so we can extract these entries easier. Again, we’ll build on the query we have by wrapping it with another. We get the starting line number based on the presence of a timestamp in the base table.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;SELECT row_num&lt;br /&gt;&lt;br /&gt;     ,LAST_VALUE(low_row_num IGNORE NULLS)&lt;br /&gt;&lt;br /&gt;        OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING&lt;br /&gt;&lt;br /&gt;        AND CURRENT ROW) start_row&lt;br /&gt;&lt;br /&gt;     ,LAST_VALUE(alert_date  IGNORE NULLS)&lt;br /&gt;&lt;br /&gt;        OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING&lt;br /&gt;&lt;br /&gt;        AND CURRENT ROW) alert_date&lt;br /&gt;&lt;br /&gt;     ,alert_text&lt;br /&gt;&lt;br /&gt;FROM (SELECT ROWNUM row_num&lt;br /&gt;&lt;br /&gt;           ,NVL2(system.alert_log_date(text),ROWNUM,NULL) low_row_num&lt;br /&gt;&lt;br /&gt;           ,system.alert_log_date(text) alert_date&lt;br /&gt;&lt;br /&gt;           ,text alert_text&lt;br /&gt;&lt;br /&gt;     FROM system.alert_log_external&lt;br /&gt;&lt;br /&gt;    )&lt;br /&gt;&lt;br /&gt;WHERE ROWNUM &lt; 20&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&lt;img id="image32" alt="image_03.jpg" src="http://www.singlequery.com/wp-content/uploads/2007/02/image_03.jpg" width="550" /&gt;&lt;/p&gt; &lt;p&gt;Finally, we put this nested query into a view to hide its complexity and create a public synonym on it. You can decide who you allow to read the alert log by granting them SELECT on the alert_log view.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;CREATE OR REPLACE FORCE VIEW system.alert_log as&lt;br /&gt;&lt;br /&gt;SELECT row_num&lt;br /&gt;&lt;br /&gt;     ,LAST_VALUE(low_row_num IGNORE NULLS)&lt;br /&gt;&lt;br /&gt;        OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING&lt;br /&gt;&lt;br /&gt;        AND CURRENT ROW) start_row&lt;br /&gt;&lt;br /&gt;     ,LAST_VALUE(alert_date  IGNORE NULLS)&lt;br /&gt;&lt;br /&gt;        OVER(ORDER BY row_num ROWS BETWEEN UNBOUNDED PRECEDING&lt;br /&gt;&lt;br /&gt;        AND CURRENT ROW) alert_date&lt;br /&gt;&lt;br /&gt;     ,alert_text&lt;br /&gt;&lt;br /&gt;FROM (SELECT ROWNUM row_num&lt;br /&gt;&lt;br /&gt;           ,NVL2(system.alert_log_date(text),ROWNUM,NULL) low_row_num&lt;br /&gt;&lt;br /&gt;           ,system.alert_log_date(text) alert_date&lt;br /&gt;&lt;br /&gt;           ,text alert_text&lt;br /&gt;&lt;br /&gt;     FROM system.alert_log_external&lt;br /&gt;&lt;br /&gt;    )&lt;br /&gt;&lt;br /&gt;;&lt;br /&gt;&lt;p&gt;DECLARE&lt;br /&gt;&lt;br /&gt; ObjectExists EXCEPTION;&lt;br /&gt;&lt;br /&gt; PRAGMA EXCEPTION_INIT(ObjectExists,-955);&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt; EXECUTE IMMEDIATE 'CREATE PUBLIC SYNONYM alert_log FOR system.alert_log';&lt;br /&gt;&lt;br /&gt;-- If the synonym exists, drop and recreate it&lt;br /&gt;&lt;br /&gt;EXCEPTION WHEN ObjectExists THEN&lt;br /&gt;&lt;br /&gt; EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM alert_log';&lt;br /&gt;&lt;br /&gt; EXECUTE IMMEDIATE 'CREATE PUBLIC SYNONYM alert_log FOR system.alert_log';&lt;br /&gt;&lt;br /&gt;END;&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;Now with our usable view built, we can look for alert log entries with SQL. For example; let’s see the alert log entries for the past hour:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;SELECT row_num, alert_text&lt;br /&gt;&lt;br /&gt;FROM alert_log&lt;br /&gt;&lt;br /&gt;WHERE alert_date &gt; SYSDATE - 1/24&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&lt;img id="image33" alt="image_04.jpg" src="http://www.singlequery.com/wp-content/uploads/2007/02/image_04.jpg" width="550" /&gt;&lt;/p&gt; &lt;p&gt;Let’s see all the alert log entries for the past month that resulted from errors (contain the text ORA-).&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;SELECT row_num, alert_text&lt;br /&gt;&lt;br /&gt;FROM alert_log&lt;br /&gt;&lt;br /&gt;WHERE start_row IN (SELECT start_row&lt;br /&gt;&lt;br /&gt;                   FROM alert_log&lt;br /&gt;&lt;br /&gt;                   WHERE REGEXP_LIKE(alert_text,'ORA-')&lt;br /&gt;&lt;br /&gt;                  )&lt;br /&gt;&lt;br /&gt;AND alert_date &gt; TRUNC(SYSDATE,'MON')&lt;br /&gt;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;&lt;img id="image34" alt="image_05.jpg" src="http://www.singlequery.com/wp-content/uploads/2007/02/image_05.jpg" width="550" /&gt;&lt;/p&gt; &lt;p&gt;The next step, that I’ll leave to you, is to write the SQL interface to read these trace files…&lt;br /&gt;Happy coding!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;  &lt;/div&gt;Curtsey - &lt;a href="http://www.dbspecialists.com/"&gt;Database Specialist Vol.9 No.12 - Script of the Month - Article by Chip Dawes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8317714484970442516-3555849342198798284?l=techsudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techsudo.blogspot.com/feeds/3555849342198798284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techsudo.blogspot.com/2009/01/query-oracle-alert-log-using-sql.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/3555849342198798284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/3555849342198798284'/><link rel='alternate' type='text/html' href='http://techsudo.blogspot.com/2009/01/query-oracle-alert-log-using-sql.html' title='Query the Oracle Alert Log using SQL commands'/><author><name>Sudo</name><uri>http://www.blogger.com/profile/06589867146383914387</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8317714484970442516.post-8050465251558681611</id><published>2008-12-13T20:13:00.004+05:30</published><updated>2008-12-13T22:42:13.472+05:30</updated><title type='text'>Renaming and Relocating Datafiles for a Single Tablespace</title><content type='html'>&lt;p class="BP"&gt;The post offers some procedures for renaming and relocating datafiles in a single tablespace. You must have the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;ALTER TABLESPACE&lt;/span&gt;&lt;/code&gt; system privilege to rename datafiles of a single tablespace.&lt;/p&gt;&lt;h4 style="color: rgb(0, 0, 153);" class="H3"&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif;"&gt;Renaming Datafiles in a Single Tablespace&lt;/span&gt;&lt;/h4&gt;&lt;p class="BP"&gt;To rename datafiles from a single tablespace, complete the following steps:&lt;/p&gt;&lt;ol class="LN1" type="1"&gt;&lt;li value="1" class="LN1" type="1"&gt;Take the non-&lt;code&gt;&lt;span style="font-family:新宋体;"&gt;SYSTEM&lt;/span&gt;&lt;/code&gt; tablespace that contains the datafiles offline. &lt;p class="BP1"&gt;For example:&lt;/p&gt;&lt;pre class="CE1"&gt;ALTER TABLESPACE users OFFLINE NORMAL;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class="LN1" value="2" type="1"&gt;Rename the datafiles using the operating system. &lt;/li&gt;&lt;li class="LN1" value="3" type="1"&gt;Use the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;ALTER TABLESPACE&lt;/span&gt;&lt;/code&gt; statement with the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;RENAME DATAFILE&lt;/span&gt;&lt;/code&gt; clause to change the filenames within the database. &lt;p class="BP1"&gt;For example, the following statement renames the datafiles /u02/oracle/rbdb1/user1.dbf and /u02/oracle/rbdb1/user2.dbf to/u02/oracle/rbdb1/users01.dbf and /u02/oracle/rbdb1/users02.dbf, respectively:&lt;/p&gt;&lt;pre class="CE1"&gt;ALTER TABLESPACE users&lt;br /&gt;RENAME DATAFILE '/u02/oracle/rbdb1/user1.dbf',&lt;br /&gt;          '/u02/oracle/rbdb1/user2.dbf'&lt;br /&gt;       TO '/u02/oracle/rbdb1/users01.dbf',&lt;br /&gt;          '/u02/oracle/rbdb1/users02.dbf';&lt;br /&gt;&lt;/pre&gt;&lt;p class="BP1"&gt;The new files must already exist; this statement does not create the files. Also, always provide complete filenames (including their paths) to properly identify the old and new datafiles. In particular, specify the old datafile name exactly as it appears in the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;DBA_DATA_FILES&lt;/span&gt;&lt;/code&gt; view of the data dictionary.&lt;/p&gt;&lt;/li&gt;&lt;li class="LN1" value="4" type="1"&gt;Back up the database. After making any structural changes to a database, always perform an immediate and complete backup. &lt;/li&gt;&lt;/ol&gt;&lt;h4 style="color: rgb(0, 0, 153);" class="H3"&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif;"&gt;Relocating and Renaming Datafiles in a Single Tablespace&lt;/span&gt;&lt;/h4&gt;&lt;p class="BP"&gt;Here is an example that illustrates the steps involved for relocating a datafile.&lt;/p&gt;&lt;p class="BP"&gt;Assume the following conditions:&lt;/p&gt;&lt;ul class="LB1"&gt;&lt;li class="LB1" type="disc"&gt;An open database has a tablespace named &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;users&lt;/span&gt;&lt;/code&gt; that is made up of datafiles all located on the same disk. &lt;/li&gt;&lt;li class="LB1" type="disc"&gt;The datafiles of the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;users&lt;/span&gt;&lt;/code&gt; tablespace are to be relocated to different and separate disk drives. &lt;/li&gt;&lt;li class="LB1" type="disc"&gt;You are currently connected with administrator privileges to the open database. &lt;/li&gt;&lt;li class="LB1" type="disc"&gt;You have a current backup of the database. &lt;/li&gt;&lt;/ul&gt;&lt;p class="BP"&gt;Complete the following steps:&lt;/p&gt;&lt;ol class="LN1" type="1"&gt;&lt;li value="1" class="LN1" type="1"&gt;Identify the datafile names of interest. &lt;p class="BP1"&gt;The following query of the data dictionary view &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;DBA_DATA_FILES&lt;/span&gt;&lt;/code&gt; lists the datafile names and respective sizes (in bytes) of the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;users&lt;/span&gt;&lt;/code&gt; tablespace:&lt;/p&gt;&lt;pre class="CE1"&gt;SELECT FILE_NAME, BYTES FROM DBA_DATA_FILES&lt;br /&gt;WHERE TABLESPACE_NAME = 'USERS';&lt;br /&gt;&lt;br /&gt;FILE_NAME                                  BYTES&lt;br /&gt;------------------------------------------ ----------------&lt;br /&gt;/U02/ORACLE/RBDB1/USERS01.DBF              102400000&lt;br /&gt;/U02/ORACLE/RBDB1/USERS02.DBF              102400000&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class="LN1" value="2" type="1"&gt;Take the tablespace containing the datafiles offline, or shut down the database and restart and mount it, leaving it closed. Either option closes the datafiles of the tablespace. &lt;/li&gt;&lt;li class="LN1" value="3" type="1"&gt;Copy the datafiles to their new locations and rename them using the operating system. &lt;div align="center"&gt;&lt;table class="Note" dir="ltr" title="This is a layout table to format a note" summary="This is a layout table to format a note" border="0" cellpadding="0" cellspacing="0" width="80%"&gt;&lt;tbody&gt;&lt;tr class="Note"&gt;&lt;td class="Note"&gt;&lt;hr /&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif;"&gt;&lt;strong class="NH"&gt;Note:&lt;/strong&gt;&lt;/span&gt; &lt;p class="NB"&gt;You can execute an operating system command to copy a file by using the SQL*Plus &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;HOST&lt;/span&gt;&lt;/code&gt; command.&lt;/p&gt;&lt;hr /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="LN1" value="4" type="1"&gt;Rename the datafiles within Oracle. &lt;p class="BP1"&gt;The datafile pointers for the files that make up the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;users&lt;/span&gt;&lt;/code&gt; tablespace, recorded in the control file of the associated database, must now be changed from the old names to the new names.&lt;/p&gt;&lt;p class="BP1"&gt;If the tablespace is offline but the database is open, use the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;ALTER TABLESPACE ... RENAME DATAFILE&lt;/span&gt;&lt;/code&gt; statement. If the database is mounted but closed, use the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;ALTER DATABASE ... RENAME FILE&lt;/span&gt;&lt;/code&gt; statement.&lt;/p&gt;&lt;pre class="CE1"&gt;ALTER TABLESPACE users&lt;br /&gt;RENAME DATAFILE '/u02/oracle/rbdb1/users01.dbf',&lt;br /&gt;          '/u02/oracle/rbdb1/users02.dbf'&lt;br /&gt;       TO '/u03/oracle/rbdb1/users01.dbf',&lt;br /&gt;          '/u04/oracle/rbdb1/users02.dbf';&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class="LN1" value="5" type="1"&gt;Bring the tablespace online, or open the database.&lt;br /&gt;&lt;p class="BP1"&gt;If the &lt;code&gt;&lt;span style="font-family:新宋体;"&gt;users&lt;/span&gt;&lt;/code&gt; tablespace is offline and the database is open, bring the tablespace back online. If the database is mounted but closed, open the database.&lt;/p&gt;&lt;/li&gt;&lt;li class="LN1" value="6" type="1"&gt;Back up the database. After making any structural changes to a database, always perform an immediate and complete backup. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style="color: rgb(0, 0, 153);" class="H3"&gt;&lt;span&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif;"&gt;Copying a File on a Local File System&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p class="BP"&gt;This section includes an example that uses the COPY_FILE procedure in the DBMS_FILE_TRANSFER package to copy a file on a local file system. The following example copies a binary file named db1.dat from the /usr/admin/source directory to the /usr/admin/destination directory as db1_copy.dat on a local file system:&lt;br /&gt;&lt;/p&gt;&lt;ol class="LN1" type="1"&gt;&lt;li value="1" class="LN1" type="1"&gt;In SQL*Plus, connect as an administrative user who can grant privileges and create directory objects using SQL.&lt;/li&gt;&lt;br /&gt;&lt;li value="2" class="LN1" type="1"&gt;Use the SQL command CREATE DIRECTORY to create a directory object for the directory from which you want to copy the file. A directory object is similar to an alias for the directory. For example, to create a directory object called SOURCE_DIR for the /usr/admin/source directory on your computer system, execute the following statement:&lt;/li&gt;&lt;pre class="CE1"&gt;CREATE DIRECTORY SOURCE_DIR AS '/usr/admin/source';&lt;br /&gt;&lt;/pre&gt;&lt;li value="3" class="LN1" type="1"&gt;Use the SQL command CREATE DIRECTORY to create a directory object for the directory into which you want to copy the binary file. For example, to create a directory object called DEST_DIR for the /usr/admin/destination directory on your computer system, execute the following statement:&lt;br /&gt;&lt;/li&gt;&lt;pre class="CE1"&gt;CREATE DIRECTORY DEST_DIR AS '/usr/admin/destination';&lt;br /&gt;&lt;/pre&gt;&lt;li value="4" class="LN1" type="1"&gt;Grant the required privileges to the user who will run the COPY_FILE procedure. In this example, the strmadmin user runs the procedure.&lt;/li&gt;&lt;pre class="CE1"&gt;GRANT EXECUTE ON DBMS_FILE_TRANSFER TO strmadmin;&lt;br /&gt;&lt;br /&gt;GRANT READ ON DIRECTORY source_dir TO strmadmin;&lt;br /&gt;&lt;br /&gt;GRANT WRITE ON DIRECTORY dest_dir TO strmadmin;&lt;br /&gt;&lt;/pre&gt;&lt;li value="5" class="LN1" type="1"&gt;Connect as strmadmin user:&lt;br /&gt;&lt;/li&gt;&lt;pre class="CE1"&gt;CONNECT strmadmin/strmadminpw&lt;br /&gt;&lt;/pre&gt;&lt;li value="6" class="LN1" type="1"&gt;Run the COPY_FILE procedure to copy the file:&lt;/li&gt;&lt;/ol&gt;&lt;pre class="CE1"&gt;     BEGIN&lt;br /&gt;      DBMS_FILE_TRANSFER.COPY_FILE(&lt;br /&gt;            source_directory_object       =&gt;  'SOURCE_DIR',&lt;br /&gt;            source_file_name              =&gt;  'db1.dat',&lt;br /&gt;            destination_directory_object  =&gt;  'DEST_DIR',&lt;br /&gt;            destination_file_name         =&gt;  'db1_copy.dat');&lt;br /&gt;   END;&lt;br /&gt;   /&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8317714484970442516-8050465251558681611?l=techsudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techsudo.blogspot.com/feeds/8050465251558681611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techsudo.blogspot.com/2008/12/renaming-and-relocating-datafiles-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/8050465251558681611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/8050465251558681611'/><link rel='alternate' type='text/html' href='http://techsudo.blogspot.com/2008/12/renaming-and-relocating-datafiles-for.html' title='Renaming and Relocating Datafiles for a Single Tablespace'/><author><name>Sudo</name><uri>http://www.blogger.com/profile/06589867146383914387</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-8317714484970442516.post-2961206813777436748</id><published>2008-12-13T20:08:00.002+05:30</published><updated>2008-12-13T20:10:37.704+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle 10G New Features'/><title type='text'>Oracle 10g New Feature</title><content type='html'>&lt;a href="http://www.scribd.com/doc/4155380/Oracle-10g-New-Feature"&gt;&lt;/a&gt;&lt;a title="View Oracle 10g New Feature document on Scribd" href="http://www.scribd.com/doc/4155380/Oracle-10g-New-Feature" style="margin: 12px auto 6px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;"&gt;Oracle 10g New Feature&lt;/a&gt; &lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_576789326587133" name="doc_576789326587133" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" width="450" height="500"&gt;        &lt;param name="movie" value="http://documents.scribd.com/ScribdViewer.swf?document_id=4155380&amp;amp;access_key=key-1o44jb7fux9ric06mp9t&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode="&gt;         &lt;param name="quality" value="high"&gt;         &lt;param name="play" value="true"&gt;        &lt;param name="loop" value="true"&gt;         &lt;param name="scale" value="showall"&gt;        &lt;param name="wmode" value="opaque"&gt;         &lt;param name="devicefont" value="false"&gt;        &lt;param name="bgcolor" value="#ffffff"&gt;         &lt;param name="menu" value="true"&gt;        &lt;param name="allowFullScreen" value="true"&gt;         &lt;param name="allowScriptAccess" value="always"&gt;         &lt;param name="salign" value=""&gt;                    &lt;embed src="http://documents.scribd.com/ScribdViewer.swf?document_id=4155380&amp;amp;access_key=key-1o44jb7fux9ric06mp9t&amp;amp;page=1&amp;amp;version=1&amp;amp;viewMode=" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_576789326587133_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" width="450" height="500"&gt;&lt;/embed&gt;    &lt;/object&gt;    &lt;div style="margin: 6px auto 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 12px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block;"&gt;    &lt;a href="http://www.scribd.com/upload" style="text-decoration: underline;"&gt;Publish at Scribd&lt;/a&gt; or &lt;a href="http://www.scribd.com/browse" style="text-decoration: underline;"&gt;explore&lt;/a&gt; others:            &lt;a href="http://www.scribd.com/browse?c=122-computer-science" style="text-decoration: underline;"&gt;Computer Science&lt;/a&gt;                  &lt;a href="http://www.scribd.com/tag/language" style="text-decoration: underline;"&gt;language&lt;/a&gt;              &lt;a href="http://www.scribd.com/tag/data" style="text-decoration: underline;"&gt;data&lt;/a&gt;          &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8317714484970442516-2961206813777436748?l=techsudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.scribd.com/doc/4155380/Oracle-10g-New-Feature' title='Oracle 10g New Feature'/><link rel='replies' type='application/atom+xml' href='http://techsudo.blogspot.com/feeds/2961206813777436748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techsudo.blogspot.com/2008/12/oracle-10g-new-feature.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/2961206813777436748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/2961206813777436748'/><link rel='alternate' type='text/html' href='http://techsudo.blogspot.com/2008/12/oracle-10g-new-feature.html' title='Oracle 10g New Feature'/><author><name>Sudo</name><uri>http://www.blogger.com/profile/06589867146383914387</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-8317714484970442516.post-1123270567500320074</id><published>2008-11-04T22:43:00.002+05:30</published><updated>2008-11-04T22:48:23.655+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Magazine'/><title type='text'>Digital Version of Oracle Magezine</title><content type='html'>&lt;a href="http://www.oraclemagazine-digital.com/oraclemagazine/20081112/?sub_id=mVJxnFfXZ9jf"&gt;Oracle Magazine for Nov-Dec 2008&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8317714484970442516-1123270567500320074?l=techsudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oraclemagazine-digital.com/oraclemagazine/20081112/templates/send_to_friend?pg=2&amp;pm=2&amp;u1=texterity' title='Digital Version of Oracle Magezine'/><link rel='replies' type='application/atom+xml' href='http://techsudo.blogspot.com/feeds/1123270567500320074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techsudo.blogspot.com/2008/11/digital-version-of-oracle-magezine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/1123270567500320074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/1123270567500320074'/><link rel='alternate' type='text/html' href='http://techsudo.blogspot.com/2008/11/digital-version-of-oracle-magezine.html' title='Digital Version of Oracle Magezine'/><author><name>Sudo</name><uri>http://www.blogger.com/profile/06589867146383914387</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-8317714484970442516.post-4058296787119390021</id><published>2008-09-18T19:32:00.000+05:30</published><updated>2008-10-23T11:40:05.356+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle DBA'/><title type='text'>Find a Lot of Real Oracle DBAs Stuff</title><content type='html'>Recently I found this one. Its a good blog giving lots of really useful tips to a DBA. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://frits.homelinux.com/wordpress/?cat=4"&gt;Frits Hoogland Weblog » Oracle EE&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8317714484970442516-4058296787119390021?l=techsudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://techsudo.blogspot.com/feeds/4058296787119390021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techsudo.blogspot.com/2008/09/frits-hoogland-weblog-oracle-ee.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/4058296787119390021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/4058296787119390021'/><link rel='alternate' type='text/html' href='http://techsudo.blogspot.com/2008/09/frits-hoogland-weblog-oracle-ee.html' title='Find a Lot of Real Oracle DBAs Stuff'/><author><name>Sudo</name><uri>http://www.blogger.com/profile/06589867146383914387</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-8317714484970442516.post-8313490740222508668</id><published>2008-09-18T19:03:00.000+05:30</published><updated>2008-09-18T19:03:15.749+05:30</updated><title type='text'>Installing Oracle 10g2 64bit on CentOS 4.3 x86_64 (AMD) | Eric's Agile Answers</title><content type='html'>&lt;a href="http://www.jroller.com/agileanswers/entry/installing_oracle_10g2_64bit_on"&gt;Installing Oracle 10g2 64bit on CentOS 4.3 x86_64 (AMD) | Eric&amp;#39;s Agile Answers&lt;/a&gt;: "Installing Oracle 10g2 64bit on CentOS 4.3 x86_64 (AMD)&lt;br /&gt;&lt;br /&gt;I suffered through quite a bit of trial and error during this installation because most of the posts on the issues encountered by those who blazed this trail before me failed to specify exactly which platform and versions they were tackling.&lt;br /&gt;&lt;br /&gt;So, let me be clear. I started with the following:&lt;br /&gt;&lt;br /&gt;    * Oracle Database 10g Release 2 (10.2.0.1.0) for Linux x86-64&lt;br /&gt;    * CentOS 4.3 x86_64 (up2date sans kernel packages as of time of this post)&lt;br /&gt;    * jdk-1_5_0_07-linux-i586.rpm&lt;br /&gt;&lt;br /&gt;An out of the box install on the platform above using these instructions from Oracle will fail during the linking stage of installation.&lt;br /&gt;Here is the list of dependencies that got me over the hump:&lt;br /&gt;&lt;br /&gt;compat-db-4.1.25.9 i386&lt;br /&gt;compat-db-4.1.25.9 x86_64&lt;br /&gt;compat-gcc-32-3.2.3.47.3 x86_64&lt;br /&gt;compat-gcc-32-c++-3.2.3.47.3 x86_64&lt;br /&gt;glibc-devel-2.3.4.2.19 i386&lt;br /&gt;glibc-devel-2.3.4.2.19 x86_64&lt;br /&gt;libaio-0.3.105.2 i386&lt;br /&gt;libaio-0.3.105.2 x86_64&lt;br /&gt;libaio-devel-0.3.105.2 x86_64&lt;br /&gt;sysstat-5.0.5.7.rhel4 x86_64&lt;br /&gt;xorg-x11-deprecated-libs-6.8.2.1.EL.13.25.1 i386&lt;br /&gt;xorg-x11-deprecated-libs-6.8.2.1.EL.13.25.1 x86_64&lt;br /&gt;&lt;br /&gt;(Note: Some of these are already installed on CentOS 4.3 but I wanted to show the x86_64 beside the i386 to drive home the point that you need both)&lt;br /&gt;I installed all of the above using"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8317714484970442516-8313490740222508668?l=techsudo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.jroller.com/agileanswers/entry/installing_oracle_10g2_64bit_on' title='Installing Oracle 10g2 64bit on CentOS 4.3 x86_64 (AMD) | Eric&apos;s Agile Answers'/><link rel='replies' type='application/atom+xml' href='http://techsudo.blogspot.com/feeds/8313490740222508668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://techsudo.blogspot.com/2008/09/installing-oracle-10g2-64bit-on-centos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/8313490740222508668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8317714484970442516/posts/default/8313490740222508668'/><link rel='alternate' type='text/html' href='http://techsudo.blogspot.com/2008/09/installing-oracle-10g2-64bit-on-centos.html' title='Installing Oracle 10g2 64bit on CentOS 4.3 x86_64 (AMD) | Eric&apos;s Agile Answers'/><author><name>Sudo</name><uri>http://www.blogger.com/profile/06589867146383914387</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>
