<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oraklet</title>
	<atom:link href="http://www.oraklet.no/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.oraklet.no</link>
	<description>Systemutvikling, drift, opplæring og rådgivning innen Oracle, Linux og Unix</description>
	<lastBuildDate>Fri, 30 Sep 2011 08:43:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Recovery Manager tips</title>
		<link>http://www.oraklet.no/2010/03/recovery-manager-tips/</link>
		<comments>http://www.oraklet.no/2010/03/recovery-manager-tips/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 07:22:57 +0000</pubDate>
		<dc:creator>Ingemar Jansson Haverstad</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.oraklet.no/?p=92</guid>
		<description><![CDATA[De fleste benytter Recovery Manager (rman) til å ta sikkerhetskopi av datafiler. Men rman kan også brukes til å flytte datafiler. Fordelen med det er at du har et godt sikkerhetsnett som beskytter deg og omgivelsen mot de store feilene. &#8230; <a href="http://www.oraklet.no/2010/03/recovery-manager-tips/">Les videre <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>De fleste benytter <em>Recovery Manager</em> (rman) til å ta sikkerhetskopi av datafiler. Men <em>rman</em> kan også brukes til å flytte datafiler. Fordelen med det er at du har et godt sikkerhetsnett som beskytter deg og omgivelsen mot de store feilene.</p>
<p>Å flytte en datafile fra A til B er ikke noe problem, men hva hvis filnavnet inneholder ny linje eller noen andre sære tegn som kom dit av mistak?<br />
<span id="more-92"></span></p>
<p>Her vises et eksempel med en datafil i tablespace <em>USERS</em> som må flyttes fra <b>/u04</b> til <b>/u05</b>.</p>
<p>Begynn med å sjekke hvilket filnummer tablespacen har og ta den offline.</p>
<pre> <code>
z00u074:DR1R&gt; <strong>sqlplus / as sysdba</strong>

SQL*Plus: Release 11.1.0.7.0 - Production on Ti Mar 16 07:59:16 2010

Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production

11g SYS@DR1R SQL&gt; <strong>SELECT file_id, file_name
                  FROM dba_data_files
                  WHERE tablespace_name = 'USERS';</strong>

   FILE_ID FILE_NAME
---------- ------------------------------------------------------------
         8 /u04/oradata/DR1R/DR1R_users_01.dbf

11g SYS@DR1R SQL&gt; <strong>ALTER TABLESPACE users OFFLINE;</strong>
Tablespace altered.
</code></pre>
<p><code> </code></p>
<p><code> </code></p>
<p>Datafil 8 skal flyttes, det gjør vi i <em>rman</em>.</p>
<pre> <code>
z00u074:DR1R&gt; <strong>rman target /</strong>

Recovery Manager: Release 11.1.0.7.0 - Production on Ti Mar 16 07:41:25 2010

connected to target database: DR1R (DBID=1942219211)

RMAN&gt; <strong>COPY DATAFILE 8 to '/u05/oradata/DR1R/DR1R_users_01.dbf';</strong>

Starting backup at 16/03/2010 07:55:29

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile copy

input datafile file number=00008 name=/u04/oradata/DR1R/DR1R_users_01.dbf

output file name=/u05/oradata/DR1R/DR1R_users_01.dbf tag=TAG20100316T075530 RECID=1 STAMP=713778931

channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01

Finished backup at 16/03/2010 07:55:31

RMAN&gt; <strong>LIST COPY LIKE '%users%';</strong>

List of Datafile Copies

=======================
Key     File S Completion Time     Ckp SCN    Ckp Time
------- ---- - ------------------- ---------- -------------------
1       8    A 16/03/2010 07:55:31 72709346997 16/03/2010 07:42:09

        Name: /u05/oradata/DR1R/DR1R_users_01.dbf

        Tag: TAG20100316T075530

RMAN&gt; <strong>SWITCH DATAFILE 8 TO COPY;</strong>

datafile 8 switched to datafile copy "/u05/oradata/DR1R/DR1R_users_01.dbf"

RMAN&gt; <strong>LIST COPY LIKE '%users%';</strong>

List of Datafile Copies

=======================

Key     File S Completion Time     Ckp SCN    Ckp Time
------- ---- - ------------------- ---------- -------------------
2       8    A 16/03/2010 07:56:01 72709346997 16/03/2010 07:42:09

        Name: /u04/oradata/DR1R/DR1R_users_01.dbf

        Tag: TAG20091126T103852
</code></pre>
<p><code> </code></p>
<p><code> </code></p>
<p>Dermed er datafilen flyttet på en trygg og hurtig måte! Da gjenstår det å rydde opp, sjekk først at filen er på riktig sted i <em>SQL*PLus</em>.</p>
<pre> <code>
11g SYS@DR1R SQL&gt; <strong>SELECT file_id, file_name
                  FROM dba_data_files
                  WHERE tablespace_name = 'USERS';</strong>

   FILE_ID FILE_NAME
---------- ------------------------------------------------------------
         8 /u05/oradata/DR1R/DR1R_users_01.dbf

11g SYS@DR1R SQL&gt; <strong>ALTER TABLESPACE users ONLINE;</strong>
Tablespace altered.
</code></pre>
<p><code> </code></p>
<p><code> </code></p>
<p>Fjern filen fra disken ved hjelp av <em>rman</em>.</p>
<pre> <code>
RMAN&gt; <strong>DELETE COPY LIKE '%users%';</strong>

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=513 device type=DISK

specification does not match any archived log in the recovery catalog

List of Datafile Copies

=======================

Key     File S Completion Time     Ckp SCN    Ckp Time
------- ---- - ------------------- ---------- -------------------
2       8    A 16/03/2010 07:56:01 72709346997 16/03/2010 07:42:09

        Name: /u04/oradata/DR1R/DR1R_users_01.dbf

        Tag: TAG20091126T103852

Do you really want to delete the above objects (enter YES or NO)? <strong>YES</strong>

deleted datafile copy
datafile copy file name=/u04/oradata/DR1R/DR1R_users_01.dbf RECID=2 STAMP=713778961
Deleted 1 object
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.oraklet.no/2010/03/recovery-manager-tips/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>When is the correct time to upgrade Oracle?</title>
		<link>http://www.oraklet.no/2010/03/when-is-the-correct-time-to-upgrade-oracle/</link>
		<comments>http://www.oraklet.no/2010/03/when-is-the-correct-time-to-upgrade-oracle/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 22:01:43 +0000</pubDate>
		<dc:creator>Ingemar Jansson Haverstad</dc:creator>
				<category><![CDATA[Uncategorized @en]]></category>

		<guid isPermaLink="false">http://www.oraklet.no/?p=194</guid>
		<description><![CDATA[I get the question from my customers every now and then if they do need to upgrade all their databases to the latest and greatest release. You have three options here: Upgrade as seldom as possible, upgrade as soon as &#8230; <a href="http://www.oraklet.no/2010/03/when-is-the-correct-time-to-upgrade-oracle/">Les videre <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I get the question from my customers every now and then if they do need to upgrade all their databases to the latest and greatest release. You have three options here: Upgrade as seldom as possible, upgrade as soon as the possibilty is there, and finally, do nothing! <span id="more-194"></span></p>
<p>You as a customer may be happy with the way the database is working today &#8211; If it works, don&#8217;t touch, it is a saying out there. I usually start with asking which version of Oracle they do have, and how many different versions they have altogether. I may as well ask what their security policies are and if they care for getting appropriate support. The answer is often that they have a mixture of <em>Oracle9i</em>, <em>Oracle10g R1</em> and perhaps also some <em>Oracle10g R2</em> databases. <em>Oracle9i</em> hasn&#8217;t been supported by Oracle for a while and <em>Oracle10g</em> will soon loose its ordinary support status. Security is as always very good because they have invested in a firewall and DMZ and all that stuff, I&#8217;m told.</p>
<p>It is always interesting to see what literature they have in their book shelves. Sometimes I find Good Old  <em>Oracle7</em> or <em>Oracle8i</em> manuals. By the way, may favourite URL for Oracle documentation is <a href="http://tahiti.oracle.com">http://tahiti.oracle.com</a>. It has almost everything I&#8217;m looking for.</p>
<h3>Now is the right time!</h3>
<p>I could of course told you that you should upgrade because you will get access to all these nice and cute little features waiting for you, but the truth is that most customers doesn&#8217;t care!<br />
Most applications are only using a few of the possibilities available in newer releases, that&#8217;s why they kept the old documentation. However, I have plenty of reasons why you should upgrade.</p>
<h3>Support</h3>
<p>First of all, you get much better support when you are on track with the releases. You are the King!</p>
<h3><em>Oracle9i</em>, <em>Oracle10g R1</em>, <em>Oracle10g R2</em> and now <em>Oracle11g R1 and R2</em></h3>
<p>There are, for the moment two releases you should consider upgrading to: <em>Oracle11g R1</em> version 10.1.0.7 or <em>Oracle11g R2</em> version 11.2.0.1. That is, version 1 or 2 of <em>Oracle11g</em>. Looking back in time at the earlier releases of Oracle. <em>Oracle8</em> version 0 (8.0.6) was only used by a handful customers in Norway, they waited until version 1 came along, named <em>Oracle8i</em>, The <em>i</em> indicated that it was a database for the <strong>Internet</strong>. Same story with <em>Oracle9i</em> version 0 (9.0.1), most customers waited for <em>Oracle9i</em> version 2. Exactly the same happened with <em>Oracle10g</em> where only a few customers went production with version 1 (version naming started with 1 not 0, for a change). <em>g</em> in the name, was that for <strong>Grid</strong> or <strong>GB</strong>! Now most customers are at <em>Oracle10g</em> version 2  as it has been out there for some time. Not many customers are running <em>Oracle11g</em> R1, they are instead going for R2.</p>
<h3>Known errors</h3>
<p>It could be of interest to see how many documented errors there is in a release. Let&#8217;s take a look at <em>Oracle10g</em> R2:</p>
<table style="text-align: left;" border="0">
<tbody>
<tr>
<th><em>Oracle10g Server</em></th>
<th> 10.2.0.1</th>
<th> 10.2.0.2</th>
<th> 10.2.0.3</th>
<th> 10.2.0.4</th>
</tr>
<tr>
<td>Overall documented errors</td>
<td></td>
<td style="text-align: right;">346</td>
<td style="text-align: right;">793</td>
<td style="text-align: right;">1974</td>
</tr>
<tr>
<td>Overall not documented errors in the Oracle Server</td>
<td></td>
<td style="text-align: right;">420</td>
<td style="text-align: right;">387</td>
<td style="text-align: right;">664</td>
</tr>
<tr>
<td>Overall not documented errors in Oracle OLAP</td>
<td></td>
<td style="text-align: right;">100</td>
<td style="text-align: right;">92</td>
<td style="text-align: right;">1</td>
</tr>
</tbody>
</table>
<p>The table should be read like this: if you upgrade from version 10.2.0.3 to 10.2.0.4, there are 1974 documented errors which has been corrected in the Oracle server-code. Upgrading from version 10.2.0.1 to 10.2.0.4 shows that 3113 documented errors has been corrected. You will also notice that the rate which the errors has been corrected is accelerating in  10.2.0.4 compared to earlier releases. The reason for that is that the more customers using the product, the more errors get corrected.</p>
<p>Looking at the numbers for undocumented errors shows the same trend, highest number for the last version of <em>Oracle 10g</em> R2. It is also interesting to observe that the number of undocumented errors in the OLAP-module (Online Analytical Processing) went down from 100 to 1! This means that if you are using OLAP, go for 10.2.0.4 or higher.</p>
<p>So, if you haven&#8217;t upgraded to <em>Oracle11g</em> yet, now is the time.</p>
<h3>How to upgrade?</h3>
<p>Ii is possible in <em>Oracle10g</em> R2 and above to clone the Oracle software. That is, you can copy your software from one directory to another. That means that you can keep the old version and upgrade a copy of it. You can upgrade parts of your installation. Start with the listener process in SQL*Net, continue with ASM (if you are using ASM), upgrade a test database, then the least important production database. Each database one by one. This method is even more useful on Windows where you may have to reboot the system if upgrading the original software.</p>
<p>Cloning of the Oracle software is described here. This example is for Linux and Unix. Substitute &#8230;/10.2.0/db_1 with &#8230;/10.2.0.<strong>4</strong>/db. I prefer <strong>db</strong> instead of <strong>db_1</strong> as it doesn&#8217;t really tell what the <strong>1</strong> is for, <strong>10.2.0.4</strong> indicates which minor release is in use also.</p>
<pre><code>oracle@ferrari:~ <strong>$echo $ORACLE_HOME</strong>
/oracle/product/10.2.0/db_1
oracle@ferrari:~ <strong>mkdir /oracle/product/10.2.0.4/db</strong>
oracle@ferrari:~ <strong>cp -rp $ORACLE_HOME /oracle/product/10.2.0.4/db</strong>
oracle@ferrari:~ <strong>cd /oracle/product/10.2.0.4/db/clone/bin</strong>
oracle@ferrari:bin <strong>perl ./clone.pl ORACLE_HOME='/oracle/product/10.2.0.4/db' ORACLE_HOME_NAME='Oracle_10204'    </strong>
...
oracle@ferrari:bin <strong>sudo /oracle/product/10.2.0.4/db/root.sh</strong>
...
</code></pre>
<p><code> </code><br />
When you have cloned Oracle to a new directory, upgrade that one, not the original one. Start with a test or reference environment, zip it or create a tar-file, copy it over to your development and finally to your production environment.<br />
This way, you 100% sure all environments are the same, and you save time. All these, without having started the  <em>Oracle Universal Installer</em> &#8211; OUI, more than once. Move password file and server parameter file (spfile) to your newly created <strong>ORACLE_HOME</strong> before you upgrade the database. Isn&#8217;t it easy?</p>
<p>But, before you start, make sure you have read all relevant <em>README</em> documents, of course. I would highly recommend <strong>11g Upgrade Companion</strong> in Metalink note <strong>466181.1</strong>. This is mandatory reading planning to upgrade an Oracle database.</p>
<p>Anyway, a few surprises on your way may happen while upgrading. For instance, the <strong>CONNECT</strong> role has only <strong>CREATE SESSION</strong> privilege in <em>Oracle10g</em> R2. But that&#8217;s taken care of while testing.</p>
<p>Please do note that there is at least one important thing in <em>Oracle11g</em>. You have the option of separating lower case from upper case in passwords. This is a good feature but may be overlooked in different places such as database links. Suppose you write the SQL like this:</p>
<pre> <code>...IDENTIFIED BY password...;</code></pre>
<p>Should have been:</p>
<pre> <code>...IDENTIFIED BY <strong>'</strong>password<strong>'</strong>...;</code></pre>
<p>That way, the link will still work in <em>Oracle11g</em>. You noticed the difference? Single quote around the password.</p>
<h3><em>Oracle11g </em>R1 or <em>Oracle11g </em>R2</h3>
<p>The question is: should I upgrade to R1 og R2? Well, for Windows, you still have to wait for R2. Unix and Linux shops can choose and decide what is most appropriate for them.</p>
<p>Good luck with the upgrade and remember to double check your backup before you start&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oraklet.no/2010/03/when-is-the-correct-time-to-upgrade-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash recovery area and ORA-19804</title>
		<link>http://www.oraklet.no/2010/03/flash-recovery-area-and-ora-19804/</link>
		<comments>http://www.oraklet.no/2010/03/flash-recovery-area-and-ora-19804/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 20:26:25 +0000</pubDate>
		<dc:creator>Ingemar Jansson Haverstad</dc:creator>
				<category><![CDATA[Uncategorized @en]]></category>

		<guid isPermaLink="false">http://www.oraklet.no/?p=177</guid>
		<description><![CDATA[Have you seen the Oracle error messages ORA-19804, ORA-19809 or ORA-19815 a lot of times? Then you are not alone, welcome! The reason for this message is that your database have reached the logical, or in worst case physical limit &#8230; <a href="http://www.oraklet.no/2010/03/flash-recovery-area-and-ora-19804/">Les videre <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Have you seen the Oracle error messages <strong>ORA-19804</strong>, <strong>ORA-19809</strong> or <strong>ORA-19815</strong> a lot of times? Then you are not alone, welcome!</p>
<p>The reason for this message is that your database have reached the logical, or in worst case physical limit of &laquo;flash_recovery_area&raquo; in the Oracle-lingo. This is a side effect from the configuration assistant creating the database <em>dbca</em>, this is because you may have followed the instructions for a DEFAULT installation, which sets the database parameter <strong>DB_RECOVERY_FILE_DEST_SIZE</strong> to 2 GB.<span id="more-177"></span></p>
<h3>What is the correct size for the <em>Flash Recovery Area</em>?</h3>
<p>Most database administrators allocate a huge area for archive files and backup of the database. The configuration assistant should indicate the consequences having a too small <em>Flash Recovery Area</em>. You may end up with a hanging database, hanging until you either clean up some  disk space or change this parameter to something more realistic. For instance, 90% of the space you have set aside for backup.<br />
Things get more complicated if you have more databases using the same <em>Flash Recovery Area</em>, because they will compete for the same space&#8230;</p>
<h3>First of all, check the alert-log.</h3>
<p>The Alert log is usually a good starting point while in trouble. The message you should look for is easy to recognize:</p>
<pre><code>
ORA-19815: WARNING: db_recovery_file_dest_size of 53687091200 bytes is 100.00% used, and has 0 remaining bytes available.
************************************************************************
You have following choices to free up space from flash recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
   then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
   BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
   reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
   system command was used to delete files, then use RMAN CROSSCHECK and
   DELETE EXPIRED commands.
************************************************************************
Creating archive destination file : /oradata/flash_recovery_area/PROD/archivelog/2008_09_26/o1_mf_1_10164_0_.arc (189364 blocks)
Fri Sep 26 18:06:36 2008
Errors in file /oracle/admin/PROD/udump/prod_rfs_17303.trc:
ORA-00270: error creating archive log /oradata/flash_recovery_area/PROD/archivelog/2008_09_26/o1_mf_1_10164_%u_.arc
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 96954368 bytes disk space from 53687091200 limit
</code></pre>
<p><code>You may also use a Oracle command <em>oerr</em> to check out what the error is all about.  <em>oerr</em> is only available on the Linux and Unix platforms.</p>
<pre><code>
oracle@xps:~$ <strong>oerr ora 19809</strong>
19809, 00000, "limit exceeded for recovery files"
//*Cause: The limit for recovery files specified by the
//        DB_RECOVERY_FILE_DEST_SIZE was exceeded.
//*Action:The error is accompanied by 19804. See message 19804 for further
//        details.

oracle@xps:~$ <strong>oerr ora 19804</strong>
19804, 00000, "cannot reclaim %s bytes disk space from %s limit"
// *Cause: Oracle cannot reclaim disk space of specified bytes from the
//         DB_RECOVERY_FILE_DEST_SIZE limit.
// *Action: There are five possible solutions:
//          1) Take frequent backup of recovery area using RMAN.
//          2) Consider changing RMAN retention policy.
//          3) Consider changing RMAN archivelog deletion policy.
//          4) Add disk space and increase DB_RECOVERY_FILE_DEST_SIZE.
//          5) Delete files from recovery area using RMAN.
</code></pre>
<p>&nbsp;</p>
<h3>How much space is left?</h3>
<p>Use following SQL in order to check how much space  is left:</p>
<pre><code>
SYS@PROD SQL&gt; <strong>SELECT (100 - sum(percent_space_used))
                              + sum(percent_space_reclaimable)
                              "Percent free space"
                              FROM v$flash_recovery_area_usage;</strong>

Percent free space
------------------------------
    	             84,09
</code></pre>
<p>The solution is quite obvious in the alert-log. The easiest way of correcting this problem is to adjust the logical limit by changing the parameter <em>DB_RECOVERY_FILE_DEST_SIZE</em> in such way that it reflects how much space you are supposed to use for the recovery area. Here is an example of an SQL you may use as database administrator to change the value to 100 GB:</p>
<pre><code>
SYS@PROD SQL&gt; <strong>ALTER SYSTEM SET
                              db_recovery_file_dest_size = 100G;</strong>
</code></pre>
<p>You may set up <em>Oracle Enterprise Manager</em> to indicate that there is a problem or use the monitoring tool <a class="aligncenter" title="dbWatch Software" href="http://www.dbwatchsoftware.com/index.php?lang=en" target="_blank"><em>dbWatch</em></a>. Just in case you appreciate to get an indication somewhat before the database hangs.</p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oraklet.no/2010/03/flash-recovery-area-and-ora-19804/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make life easier with rlwrap</title>
		<link>http://www.oraklet.no/2010/03/make-life-easier-with-rlwrap/</link>
		<comments>http://www.oraklet.no/2010/03/make-life-easier-with-rlwrap/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 19:28:47 +0000</pubDate>
		<dc:creator>Ingemar Jansson Haverstad</dc:creator>
				<category><![CDATA[Uncategorized @en]]></category>

		<guid isPermaLink="false">http://www.oraklet.no/?p=171</guid>
		<description><![CDATA[One of my favourite program is rlwrap. This program could be used as a &#171;wrapper&#187; for other programs where I wish to use the arrows keys for easy editing of text in the same way you may have seen while &#8230; <a href="http://www.oraklet.no/2010/03/make-life-easier-with-rlwrap/">Les videre <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One of my favourite program is <em>rlwrap</em>. This program could be used as a &laquo;wrapper&raquo; for other programs where I  wish to use the arrows keys for easy editing of text in the same way you may have seen while using the command window in windows (cmd).</p>
<p>The program has already been compiled if working with <em>Ubuntu Linux</em>, all you need is to download the program from the net:</p>
<pre> <code>
oracle@ubuntu: ~ $ <strong>sudo apt-get install rlwrap</strong>
...
</code></pre>
<p><span id="more-171"></span><br />
Some other Linux or Unix dialects do have a similar approach. However, you may have to compile the program yourself.<br />
Use your favourite search engine to locate an appropriate site where you can download the source code for  <em>rlwrap</em>. Go ahead and compile the code:</p>
<pre> <code>
[oracle@linux tmp]$ <strong>tar xvzf rlwrap-0.30.tar.gz</strong>
rlwrap-0.30/
rlwrap-0.30/completions/
rlwrap-0.30/completions/ftp
...

[oracle@linux tmp]$ <strong>cd rlwrap-0.30</strong>
/tmp/rlwrap-0.30

[oracle@linux rlwrap-0.30]$ <strong>./configure</strong>
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk

...

config.status: creating distribution/rlwrap.spec
config.status: creating config.h
config.status: executing depfiles commands

Now do:
make (or gmake)  to build rlwrap
make check       for instructions how to test it
make install     to install it

[oracle@linux rlwrap-0.30]$ <strong>make</strong>
make  all-recursive
make[1]: Entering directory `/tmp/rlwrap-0.30'
Making all in doc
/tmp/rlwrap-0.30/doc
make[2]: Entering directory `/tmp/rlwrap-0.30/doc'
sed -e 's#@DATADIR@#/usr/local/share#'  rlwrap.man &gt; rlwrap.1
make[2]: Leaving directory `/tmp/rlwrap-0.30/doc'
Making all in src

[oracle@linux rlwrap-0.30]$ <strong>sudo make install</strong>
Password: <strong>######</strong>
Making install in doc
/tmp/rlwrap-0.30/doc
make[1]: Entering directory `/tmp/rlwrap-0.30/doc'
make[2]: Entering directory `/tmp/rlwrap-0.30/doc'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/share/man/man1" || /bin/mkdir -p "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 './rlwrap.1' '/usr/local/share/man/man1/rlwrap.1'
make[2]: Leaving directory `/tmp/rlwrap-0.30/doc'
make[1]: Leaving directory `/tmp/rlwrap-0.30/doc'
Making install in src
/tmp/rlwrap-0.30/src
make[1]: Entering directory `/tmp/rlwrap-0.30/src'
make[2]: Entering directory `/tmp/rlwrap-0.30/src'
test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
/usr/bin/install -c 'rlwrap' '/usr/local/bin/rlwrap'
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/tmp/rlwrap-0.30/src'
make[1]: Leaving directory `/tmp/rlwrap-0.30/src'
make[1]: Entering directory `/tmp/rlwrap-0.30'
make[2]: Entering directory `/tmp/rlwrap-0.30'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/share/rlwrap" || /bin/mkdir -p "/usr/local/share/rlwrap"
/usr/bin/install -c -m 644 'completions/ftp' '/usr/local/share/rlwrap/ftp'
/usr/bin/install -c -m 644 'completions/testclient' '/usr/local/share/rlwrap/testclient'
/usr/bin/install -c -m 644 'completions/coqtop' '/usr/local/share/rlwrap/coqtop'
make[2]: Leaving directory `/tmp/rlwrap-0.30'
make[1]: Leaving directory `/tmp/rlwrap-0.30'

[oracle@linux rlwrap-0.30]$ <strong>which rlwrap</strong>
/usr/local/bin/rlwrap
</code></pre>
<p>You may have to download a few more libraries if that is not done already for your system in order to get <em>rlwrap</em> to compile.</p>
<pre> <code>
[oracle@linux tmp]$ <strong>tar xvzf readline-5.2.tar.gz</strong>
readline-5.2/
readline-5.2/doc/
readline-5.2/doc/Makefile.in

...

[oracle@linux readline-5.2]$ <strong>cd readline-5.2</strong>
/tmp/readline-5.2

[oracle@linux readline-5.2]$  <strong>./configure</strong>
[oracle@linux readline-5.2]$ <strong>make</strong>
[oracle@linux readline-5.2]$ <strong>sudo make install</strong>
[oracle@linux readline-5.2]$ <strong>sudo ldconfig</strong>
</code></pre>
<p>Having compiled and installed <em>rlwrap</em> leads us to the next step. Add some aliases to for instance <strong>.bashrc</strong> is handy. Use <em>rlwrap</em> in all programs where it is relevant. Here are a few examples:</p>
<pre> <code>
ingemar@linux: ~ $ <strong>cd</strong>

ingemar@linux: ~ $ <strong>vi .bashrc</strong>

alias sql='sqlplus "/ as sysdba"'
<strong>alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias dgmgrl='rlwrap dgmgrl'
</strong>
alias boston='. ~/.boston'
alias chicago='. ~/.chicago'
alias emrep='. ~/.emrep'

alias test10g='. ~/.test10g'
alias test11g='. ~/.test11g'

alias ll='ls -ltr'
</code></pre>
<p>Finally, test the aliases and see how it works.<br />
Good Luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oraklet.no/2010/03/make-life-easier-with-rlwrap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prompt in SQL*Plus</title>
		<link>http://www.oraklet.no/2010/03/152/</link>
		<comments>http://www.oraklet.no/2010/03/152/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 21:50:04 +0000</pubDate>
		<dc:creator>Ingemar Jansson Haverstad</dc:creator>
				<category><![CDATA[Uncategorized @en]]></category>

		<guid isPermaLink="false">http://www.oraklet.no/?p=152</guid>
		<description><![CDATA[Are you also using SQL*Plus when you work with Oracle? Well, I may have good news for you! The first thing I change when working in a new database environment is, of course, the SQL-prompt. The prompt could for instance &#8230; <a href="http://www.oraklet.no/2010/03/152/">Les videre <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Are you also using <em>SQL*Plus</em> when you work with Oracle? Well, I may have good news for you!</p>
<p>The first thing I change when working in a new database environment is, of course, the SQL-prompt. The prompt could for instance show you which user you are logged in as and which instance in the prompt itself.<span id="more-152"></span></p>
<p>The variable <strong>sqlprompt</strong> could be defined either in the file <em>glogin</em> in the directory <em>$ORACLE_HOME/sqlplus/admin</em> or in local file <em>login.sql</em>. You could also change the same files on the client you are working from.</p>
<h3>SQL-prompt in <em>Oracle10g</em> and <em>Oracle11g</em></h3>
<pre> <code>SET sqlprompt “_USER’@'_CONNECT_IDENTIFIER SQL&gt; “</code></pre>
<p>And the result is:</p>
<pre> <code>SYS@DW SQL&gt; </code></pre>
<p>You may read more about this in the Oracle documentation,  <a title="sqlprompt i 10g" href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch12040.htm#SQPUG108" target="_blank"><em>Oracle10g</em></a> and <a title="sqlprompt i 11g" href="http://download.oracle.com/docs/cd/B28359_01/server.111/b31189/ch12040.htm#SQPUG108" target="_blank"><em>Oracle11g</em></a>.</p>
<h3>SQL-prompt in <em>Oracle9i</em></h3>
<p>This method is not working for <em>Oracle9i</em>, it is a bit more complicated. One solution may look like this:</p>
<pre><code>-- Defined by Ingemar J. Haverstad
SET TERMOUT OFF

DEFINE gname=idle

COLUMN global_name new_value gname

SELECT LOWER(user) || '@' ||
  SUBSTR(global_name, 1,
                decode(dot, 0, LENGTH(global_name), dot-1)) global_name
  FROM (SELECT global_name, INSTR(global_name, '.') dot
FROM global_name);

SET sqlprompt '&amp;gname SQL&gt; '

SET TERMOUT ON
</code></pre>
<h3>SQL-prompt in <em>Data Guard</em></h3>
<p>This leads us to a variation I&#8217;m often using with <em>Data Guard</em>. The challenge in this case is to know if you are working in the primary or standby  database. Following lines makes it easier:</p>
<pre> <code>-- Defined by Ingemar J. Haverstad
SET TERMOUT OFF

DEFINE g_name=idle

COLUMN global_name new_value g_name

SELECT '[' || database_role || '] ' ||
  LOWER(user) || '@' ||
  db_unique_name global_name
FROM v$database;

SET sqlprompt '&amp;g_name SQL&gt; '

SET TERMOUT ON
</code></pre>
<p>The result will look like this while connected to the primary database:</p>
<pre> <code>[PRIMARY] sys@CHICAGO SQL&gt;
</code></pre>
<p>And, in the standby database:</p>
<pre> <code>[PHYSICAL STANDBY] sys@BOSTON SQL&gt;
</code></pre>
<p>Nice, isn&#8217;t it!</p>
<h3>SQL-prompt in a Real Application Cluster (RAC)</h3>
<p>Something similar could also be used in <em>Real Application Cluster</em> environments. It is obviously good to know which instance you are logged on to, at least as a database administrator. I will show this with an example:</p>
<pre> <code>-- Defined by Ingemar J. Haverstad
SET TERMOUT OFF

DEFINE g_name=idle

COLUMN global_name new_value g_name

SELECT
  LOWER(user) || '@' ||
  instance_name global_name
FROM v$instance;

SET sqlprompt '&amp;g_name SQL&gt; '

SET TERMOUT ON
</code></pre>
<p>The result should look like this when the system user is logged on to the first instance in the cluster:</p>
<pre> <code>system@PROD1 SQL&gt;
</code></pre>
<p>And, of course, like this on the second instance:</p>
<pre> <code>system@PROD2 SQL&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.oraklet.no/2010/03/152/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forenkle arbeidsdagen med rlwrap</title>
		<link>http://www.oraklet.no/2009/02/rlwrap/</link>
		<comments>http://www.oraklet.no/2009/02/rlwrap/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 19:53:29 +0000</pubDate>
		<dc:creator>Ingemar Jansson Haverstad</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.oraklet.no/?p=55</guid>
		<description><![CDATA[One of my favorite program is <em>rlwrap</em>. I usually wrap this program around all command based programs where I would like to use the arrows keys for easy editing. <a href="http://www.oraklet.no/2009/02/rlwrap/">Les videre <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Et av mine favorittprogram er <em>rlwrap</em>. Det programmet &laquo;pakker&raquo; jeg inn i andre programmer hvor jeg ønsker at pil-tastene skal anvendes for enkel redigering av teksten.</p>
<p>Hvis du arbeider på Ubuntu Linux finnes pakken ferdig kompilert, da er det bare å laste ned programmet:</p>
<pre> <code>
oracle@ubuntu: ~ $ <strong>sudo apt-get install rlwrap</strong>
...
</code></pre>
<p><span id="more-55"></span><br />
For de fleste andre Linux og Unix varianter må du først søke på Google etter <em>rlwrap</em> og laste ned kildekoden.</p>
<pre> <code>
[oracle@linux tmp]$ <strong>tar xvzf rlwrap-0.30.tar.gz</strong>
rlwrap-0.30/
rlwrap-0.30/completions/
rlwrap-0.30/completions/ftp
...

[oracle@linux tmp]$ <strong>cd rlwrap-0.30</strong>
/tmp/rlwrap-0.30

[oracle@linux rlwrap-0.30]$ <strong>./configure</strong>
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk

...

config.status: creating distribution/rlwrap.spec
config.status: creating config.h
config.status: executing depfiles commands

Now do:
make (or gmake)  to build rlwrap
make check       for instructions how to test it
make install     to install it

[oracle@linux rlwrap-0.30]$ <strong>make</strong>
make  all-recursive
make[1]: Entering directory `/tmp/rlwrap-0.30'
Making all in doc
/tmp/rlwrap-0.30/doc
make[2]: Entering directory `/tmp/rlwrap-0.30/doc'
sed -e 's#@DATADIR@#/usr/local/share#'  rlwrap.man &gt; rlwrap.1
make[2]: Leaving directory `/tmp/rlwrap-0.30/doc'
Making all in src

[oracle@linux rlwrap-0.30]$ <strong>sudo make install</strong>
Password: <strong>######</strong>
Making install in doc
/tmp/rlwrap-0.30/doc
make[1]: Entering directory `/tmp/rlwrap-0.30/doc'
make[2]: Entering directory `/tmp/rlwrap-0.30/doc'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/share/man/man1" || /bin/mkdir -p "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 './rlwrap.1' '/usr/local/share/man/man1/rlwrap.1'
make[2]: Leaving directory `/tmp/rlwrap-0.30/doc'
make[1]: Leaving directory `/tmp/rlwrap-0.30/doc'
Making install in src
/tmp/rlwrap-0.30/src
make[1]: Entering directory `/tmp/rlwrap-0.30/src'
make[2]: Entering directory `/tmp/rlwrap-0.30/src'
test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"
/usr/bin/install -c 'rlwrap' '/usr/local/bin/rlwrap'
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/tmp/rlwrap-0.30/src'
make[1]: Leaving directory `/tmp/rlwrap-0.30/src'
make[1]: Entering directory `/tmp/rlwrap-0.30'
make[2]: Entering directory `/tmp/rlwrap-0.30'
make[2]: Nothing to be done for `install-exec-am'.
test -z "/usr/local/share/rlwrap" || /bin/mkdir -p "/usr/local/share/rlwrap"
/usr/bin/install -c -m 644 'completions/ftp' '/usr/local/share/rlwrap/ftp'
/usr/bin/install -c -m 644 'completions/testclient' '/usr/local/share/rlwrap/testclient'
/usr/bin/install -c -m 644 'completions/coqtop' '/usr/local/share/rlwrap/coqtop'
make[2]: Leaving directory `/tmp/rlwrap-0.30'
make[1]: Leaving directory `/tmp/rlwrap-0.30'

[oracle@linux rlwrap-0.30]$ <strong>which rlwrap</strong>
/usr/local/bin/rlwrap
</code></pre>
<p>Muligens må du laste ned fler biblioteker for å få <em>rlwrap</em> til å kompilere.</p>
<pre> <code>
[oracle@linux tmp]$ <strong>tar xvzf readline-5.2.tar.gz</strong>
readline-5.2/
readline-5.2/doc/
readline-5.2/doc/Makefile.in

...

[oracle@linux readline-5.2]$ <strong>cd readline-5.2</strong>
/tmp/readline-5.2

[oracle@linux readline-5.2]$  <strong>./configure</strong>
[oracle@linux readline-5.2]$ <strong>make</strong>
[oracle@linux readline-5.2]$ <strong>sudo make install</strong>
[oracle@linux readline-5.2]$ <strong>sudo ldconfig</strong>
</code></pre>
<p>Legg inn noen alias i for eksempel <strong>.bashrc</strong> så er <em>rlwrap</em> inkludert i de programmene du bruker hver dag.</p>
<pre> <code>
ingemar@linux: ~ $ <strong>cd</strong>

ingemar@linux: ~ $ <strong>vi .bashrc</strong>

alias sql='sqlplus "/ as sysdba"'
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias dgmgrl='rlwrap dgmgrl'

alias boston='. ~/.boston'
alias chicago='. ~/.chicago'
alias emrep='. ~/.emrep'

alias test10g='. ~/.test10g'
alias test11g='. ~/.test11g'

alias ll='ls -ltr'
</code></pre>
<p>Da er det bare å teste hvordan dine program fungerer.</p>
<p>Lykke til!<em></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oraklet.no/2009/02/rlwrap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash recovery area og ORA-19809</title>
		<link>http://www.oraklet.no/2008/10/flash-recovery-area-og-ora-19809/</link>
		<comments>http://www.oraklet.no/2008/10/flash-recovery-area-og-ora-19809/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 19:17:33 +0000</pubDate>
		<dc:creator>Ingemar Jansson Haverstad</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.oraklet.no/?p=56</guid>
		<description><![CDATA[Har du støtt på Oracle feilmeldingen ORA-19804, ORA-19809 eller ORA-19815 mange ganger? Dette skyldes at du har nådd den logiske grensen på &#171;flash_recovery_area&#187; i Oracle-terminologien. Jeg mener dette er en feil i rutinen til programmet som oppretter databasen &#8211; database &#8230; <a href="http://www.oraklet.no/2008/10/flash-recovery-area-og-ora-19809/">Les videre <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Har du støtt på Oracle feilmeldingen <strong>ORA-19804</strong>, <strong>ORA-19809</strong> eller <strong>ORA-19815</strong> mange ganger?</p>
<p>Dette skyldes at du har nådd den logiske grensen på &laquo;flash_recovery_area&raquo; i Oracle-terminologien. Jeg mener dette er en feil i  rutinen til programmet som oppretter databasen &#8211; database konfigurasjons assistenten <em>dbca</em> og skyldes som regel at du har beholdt standard oppsettet på <strong>DB_RECOVERY_FILE_DEST_SIZE</strong> som er 2 GB.<span id="more-56"></span></p>
<h3>Hva er riktig størrelse?</h3>
<p>Som regel benytter man et stort område til å lagre arkivfiler og sikkerhetskopi av databasene. Og derfor burde database konfigurasjons assistenten vært mer nøyaktig om hvilke konsekvenser denne feilen får. Konsekvensen er at databasen stopper helt til du enten rydder plass eller endrer størrelsen til noe mer realistisk, for eksempel 90% av den plass du har avsatt for arkivering og sikkerhetskopier av databasen. Har du flere databaser på samme server konkurrerer de muligens også om den samme plassen.</p>
<h3>Begynn med å sjekke alert-loggen</h3>
<p>Alert loggen er et bra sted å søke i når denne logiske grense er nådd. Det kan da se slik ut:</p>
<pre><code>
ORA-19815: WARNING: db_recovery_file_dest_size of 53687091200 bytes is 100.00% used, and has 0 remaining bytes available.
************************************************************************
You have following choices to free up space from flash recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
   then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
   BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
   reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
   system command was used to delete files, then use RMAN CROSSCHECK and
   DELETE EXPIRED commands.
************************************************************************
Creating archive destination file : /oradata/flash_recovery_area/PROD/archivelog/2008_09_26/o1_mf_1_10164_0_.arc (189364 blocks)
Fri Sep 26 18:06:36 2008
Errors in file /oracle/admin/PROD/udump/prod_rfs_17303.trc:
ORA-00270: error creating archive log /oradata/flash_recovery_area/PROD/archivelog/2008_09_26/o1_mf_1_10164_%u_.arc
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 96954368 bytes disk space from 53687091200 limit
</code></pre>
<p><code>Du kan også bruke Oracle-kommandoen <em>oerr</em> for å få en forklaring til disse ORA- feilmeldingene. Denne kommandoen finnes kun på Linux og Unix plattformen.</p>
<pre><code>
oracle@xps:~$ <strong>oerr ora 19809</strong>
19809, 00000, "limit exceeded for recovery files"
//*Cause: The limit for recovery files specified by the
//        DB_RECOVERY_FILE_DEST_SIZE was exceeded.
//*Action:The error is accompanied by 19804. See message 19804 for further
//        details.

oracle@xps:~$ <strong>oerr ora 19804</strong>
19804, 00000, "cannot reclaim %s bytes disk space from %s limit"
// *Cause: Oracle cannot reclaim disk space of specified bytes from the
//         DB_RECOVERY_FILE_DEST_SIZE limit.
// *Action: There are five possible solutions:
//          1) Take frequent backup of recovery area using RMAN.
//          2) Consider changing RMAN retention policy.
//          3) Consider changing RMAN archivelog deletion policy.
//          4) Add disk space and increase DB_RECOVERY_FILE_DEST_SIZE.
//          5) Delete files from recovery area using RMAN.
</code></pre>
<p>&nbsp;</p>
<h3>Hvor mye ledig plass gjenstår?</h3>
<p>Ønsker du å sjekke hvor mye plass som er benyttet kan følgende SQL brukes:</p>
<pre><code>
SYS@PROD SQL&gt; <strong>SELECT (100 - sum(percent_space_used))
                              + sum(percent_space_reclaimable)
                              "Prosent ledig plass"
                              FROM v$flash_recovery_area_usage;</strong>

Prosent ledig plass
-------------------
	      84,09
</code></pre>
<p>Løsningen på problemet er indikert i såvel alert loggen som ORA-teksten og en enkel variant er å endre parameteren DB_RECOVERY_FILE_DEST_SIZE til å bedre indikere hvor stor plass som er avsatt til dette området. SQL-en ser da slik ut:</p>
<pre><code>
SYS@PROD SQL&gt; <strong>ALTER SYSTEM SET
                              db_recovery_file_dest_size = 100G;</strong>
</code></pre>
<p>Hvis du ønsker en tilbakemelding neste gang området er på vei å fylles opp kan du enten benytte deg av <em>Oracle Enterprise Manager</em> eller overvåkingsprogrammet <a class="aligncenter" title="dbWatch Software" href="http://www.dbwatchsoftware.com" target="_blank"><em>dbWatch</em></a>. <em>dbWatch</em> har etterhvert fått stor anerkjennelse og fikk en 5-stjerners vurdering i juli.</p>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oraklet.no/2008/10/flash-recovery-area-og-ora-19809/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bør du oppgradere Oracle, eller vente?</title>
		<link>http://www.oraklet.no/2008/10/b%c3%b8r-du-oppgradere-oracle-eller-vente/</link>
		<comments>http://www.oraklet.no/2008/10/b%c3%b8r-du-oppgradere-oracle-eller-vente/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 20:50:28 +0000</pubDate>
		<dc:creator>Ingemar Jansson Haverstad</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oppgradering Oracle10g Oracle11g]]></category>

		<guid isPermaLink="false">http://www.oraklet.no/?p=13</guid>
		<description><![CDATA[Ofte får jeg spørsmålet av mine kunder om de trenger å oppgradere Oracle databasene sine til den siste versjonen. Det man må vurdere er om det er lurt å vente med oppgraderingene for å ta et kjerring tak eller om &#8230; <a href="http://www.oraklet.no/2008/10/b%c3%b8r-du-oppgradere-oracle-eller-vente/">Les videre <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ofte får jeg spørsmålet av mine kunder om de trenger å oppgradere Oracle databasene sine til den siste versjonen. Det man må vurdere er om det er lurt å vente med oppgraderingene for å ta et kjerring tak eller om det lureste er å oppgradere jevnt og trutt.<span id="more-13"></span></p>
<p>Kunden sier ofte at alt fungerer og at de er fornøyde med tingenes tilstand. Jeg begynner da med å stille noen kontrollspørsmål som for eksempel hvilken versjon av Oracle de benytter, hvor mange forskjellige versjoner de har og kanskje jeg også spør litt om bedriftens sikkerhets policy. Svaret kan da bli at de har <em>Oracle8i</em>, <em>Oracle9i</em> og muligens også noen <em>Oracle10g</em> databaser. Litt forskjellige versjoner som oftest. Hører jeg at de bruker <em>Oracle8i</em> eller <em>Oracle9i</em> spør jeg litt forsiktig om de vet hvilke versjoner som er supportert av Oracle. Om sikkerheten får jeg høre at den er høy fordi de har investert i en brannmur og da er det ikke noe problem.</p>
<p>Litt moro er det også å se litt forsiktig i hyllene til kundene. Ser jeg at de samler på dokumentasjon fra <em>Oracle7</em> eller <em>Oracle8i</em> skjønner jeg at tiden har stått stille lenge (men det kan jeg ikke si).</p>
<h3>Mulighetene venter på deg</h3>
<p>Nå kunne jeg ha hevdet at du bør oppgradere fordi da får du adgang til alle de nye, deilige funksjonene som ligger der og venter på deg, men sannheten er at de fleste kundene nesten ikke bruker noe av dette. Mange av databasene bruker så få muligheter at de fint kunne kjørt på <em>Oracle7</em> (det er derfor de har beholdt dokumentasjonen&#8230;), men jeg har flere begrunnelser for hvorfor du bør oppgradere.</p>
<h3>Support</h3>
<p>For det første kan du regne med bedre oppfølgning fra Oracle support hvis du en dag trenger hjelp. Det er et ufravikelig faktum at de kundene som benytter de siste versjonene av Oracle stiller i en særklasse her. Men når det er sagt er Oracle support blitt flinkere til å bistå også når du trenger assistanse vedrørende en noe eldre versjon av databasen.</p>
<h3><em>Oracle8i</em>, <em>Oracle9i</em>, <em>Oracle10g</em> og nå <em>Oracle11g</em></h3>
<p>For øyeblikket finnes det to versjoner det er aktuelt å oppgradere til: <em>Oracle10g R2</em> versjon 10.2.0.4 og <em>Oracle11g R1</em> versjon 11.1.0.7.  Det vil si versjon 2 av <em>Oracle10g</em> og versjon 1 av <em>Oracle11g</em>. Som en liten parentes kan vi se et øyeblikk tilbake til tidligere versjoner av Oracle. <em>Oracle8</em> versjon 0 (8.0.6) var det ikke mange som benyttet, de ventet til versjon 1 som fikk navnet <em>Oracle8i</em> kom, i&#8217;en markerte at det vare en database for <strong>Internet</strong>. Det samme gjaldt <em>Oracle9i</em> versjon 0 (9.0.1), de fleste ventet til <em>Oracle9i</em> versjon 2 kom. Nå gjentar seg det med <em>Oracle10g</em> hvor det er få kunder som har installert versjon 1. Nå når <em>Oracle10g</em> versjon 2 har vært ute en tid kan vi forvente oss at kunder begynner å tenke på å oppgradere.</p>
<h3>Kjente feil</h3>
<p>Sjekker vi hvor mange kjente feil som finnes i de forskjellige versjonene av <em>Oracle10g</em> R2 kan følgende figur gi en oversikt:</p>
<table style="text-align: left;" border="0">
<tbody>
<tr>
<th><em>Oracle10g Server</em></th>
<th> 10.2.0.1</th>
<th> 10.2.0.2</th>
<th> 10.2.0.3</th>
<th> 10.2.0.4</th>
</tr>
<tr>
<td>Totalt dokumenterte feil</td>
<td></td>
<td style="text-align: right;">346</td>
<td style="text-align: right;">793</td>
<td style="text-align: right;">1974</td>
</tr>
<tr>
<td>Ikke dokumenterte feil i Oracle Server</td>
<td></td>
<td style="text-align: right;">420</td>
<td style="text-align: right;">387</td>
<td style="text-align: right;">664</td>
</tr>
<tr>
<td>Ikke dokumenterte feil i Oracle OLAP</td>
<td></td>
<td style="text-align: right;">100</td>
<td style="text-align: right;">92</td>
<td style="text-align: right;">1</td>
</tr>
</tbody>
</table>
<p>Tabellen skal leses slik at om du oppdaterer fra versjon 10.2.0.3 til 10.2.0.4, er 1974 dokumenterte feil rettet i Oracle server-koden. Oppgraderer du fra versjon 10.2.0.1 til 10.2.0.4 er 3113 dokumenterte feil blitt rettet. Du ser også at antallet rettede feil er mye høyere i 10.2.0.4 i forhold til tidligere versjoner. Dette skyldes at fler kunder har tatt i bruk produktet og dermed blir flere feil oppdaget og rettet.</p>
<p>Hvis vi ser på antallet ikke dokumenterte feil som er blitt rettet er tendensen også at det er blitt rettet noen fler feil i den siste versjonen av <em>Oracle 10g</em> R2. Ser vi på de andre produktene er det vært å merke seg at antallet ikke dokumenterte feil i OLAP-modulen (online analytisk prosesseringløsning) har gått ned fra 100 til 1! Dette er et produkt som ikke mange kunder har tatt i bruk enda, men det er antageligvis viktig for de kundene som benytter det. Moralen her må være: Ikke bruk OLAP i noen lavere versjon enn 10.2.0.4.</p>
<p>Jeg vil med andre ord anbefale de fleste kundene å oppgradere til <em>Oracle10g</em> versjon 10.2.0.4. Dette leder oss til neste avsnitt: Hvordan?</p>
<h3>Hvordan oppgraderer vi?</h3>
<p>En mulighet i <em>Oracle10g</em> R2 er å klone installasjonen, dvs. du kopierer den versjonen du har til en ny katalog og oppgraderer derfra. Dermed kan du oppgradere i kontrollerte former, først lytteprosessen i SQL*Net, deretter ASM (om du benytter deg av dette), så kommer den minst viktige databasen eller en test database. Du tar alle databasene i tur og orden med den mest kritiske sist. Denne måten er spesielt gunstig på Windows hvor du ellers må regne med å starte maskinen på nytt for å få begynt oppgraderingen.</p>
<p>Kloningen kan du utføre slik. Her vises eksempel som kan brukes i Unix og Linux. Du erstatter &#8230;/10.2.0/db_1 med &#8230;/10.2.0.<strong>4</strong>/db. Min begrunnelse for dette er at <strong>db_1</strong> gir ikke noen informasjon, <strong>10.2.0.4</strong> forteller akkurat hva denne katalogen inneholder.</p>
<pre><code>oracle@ferrari:~ <strong>$echo $ORACLE_HOME</strong>
/oracle/product/10.2.0/db_1
oracle@ferrari:~ <strong>mkdir /oracle/product/10.2.0.4/db</strong>
oracle@ferrari:~ <strong>cp -rp $ORACLE_HOME /oracle/product/10.2.0.4/db</strong>
oracle@ferrari:~ <strong>cd /oracle/product/10.2.0.4/db/clone/bin</strong>
oracle@ferrari:bin <strong>perl ./clone.pl ORACLE_HOME='/oracle/product/10.2.0.4/db' ORACLE_HOME_NAME='Oracle_10204'    </strong>
...
oracle@ferrari:bin <strong>sudo /oracle/product/10.2.0.4/db/root.sh</strong>
...
</code></pre>
<p><code> </code><br />
Når du har klonet Oracle til en ny katalog, oppgraderer du denne, ikke den gamle versjonen. Det aller beste er at du kan utføre dette i et test miljø, pakke det sammen, kopiere over til ditt utviklings og produksjonsmiljø, kjøre klone programmet og du er 100% sikker på at alle installasjonene er like. Dette uten å ha startet <em>Oracle Universal Installer</em> &#8211; OUI. Nå har du en ny versjon ved siden av den gamle som du kan flytte over passord-fil og parameter- eller serverparameter-fil (spfile) til innen du oppgraderer databasene. Kan det utføres enklere?</p>
<p>Selvfølgelig bør du ha studert relevante <em>README</em> dokumenter. I denne forbindelse anbefales spesielt  <strong>10g Upgrade Companion</strong> beskrevet i Metalink notat <strong>466181.1</strong>. Jeg mener denne håndboken bør være obligatorisk lesning for alle som planlegger en oppgradering.</p>
<p>Noen overraskelser kan du få på veien når du oppgraderer databasen. For eksempel inneholder <strong>CONNECT</strong> rollen kun <strong>CREATE SESSION</strong> rettigheten i <em>Oracle10g</em> R2. Dette oppdager du når du tester og endrer i god før produksjonsystemet står for tur, ikke sant!</p>
<p>Som et siste tips hvis du velger å oppgradere til <em>Oracle11g</em> er det en ting du bør huske på, det skilles mellom store og små bokstaver i passord som er opprettet for å øke sikkerheten. Dette er selvfølgelig en fordel men kan gi litt trøbbel i for eksempel database linker hvor det står:</p>
<pre> <code>...IDENTIFIED BY passord...;</code></pre>
<p>Det burde ha stått:</p>
<pre> <code>...IDENTIFIED BY <strong>'</strong>passord<strong>'</strong>...;</code></pre>
<p>Dette for å være sikker på at linken fungerer i <em>Oracle11g</em>. Du så forskjellen? Apostrofer rundt passordet.</p>
<h3><em>Oracle10g </em>R2 eller <em>Oracle11g </em>R1</h3>
<p>Så er da spørsmålet: skal jeg oppgradere til 10g eller 11g? Svaret er som oftest hva er kritiske faktorer for deg i ditt prosjekt? Trenger du trygghet &#8211; velg <em>Oracle10g </em>R2, trenger du noe som kun 11g kan tilby som for eksempel bedre <strong>passordhåndtering</strong> eller bedre håndtering av <strong>partisjoner</strong>, vurder <em>Oracle11g </em>R1.</p>
<p>Lykke til med oppgraderingene og husk å dobbelsjekke sikkerhetskopien innen du begynner&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oraklet.no/2008/10/b%c3%b8r-du-oppgradere-oracle-eller-vente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL-prompt i Oracle</title>
		<link>http://www.oraklet.no/2006/11/hello-world/</link>
		<comments>http://www.oraklet.no/2006/11/hello-world/#comments</comments>
		<pubDate>Sun, 26 Nov 2006 13:46:23 +0000</pubDate>
		<dc:creator>Ingemar Jansson Haverstad</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[sql-prompt sqlprompt glogin.sql login.sql]]></category>

		<guid isPermaLink="false">http://192.168.2.114/?p=1</guid>
		<description><![CDATA[Bruker du også SQL*Plus når du arbeider i Oracle? Da har jeg et tips til deg. Det første jeg gjør når jeg arbeider i en ny database er å redigere SQL-prompten. Da vises navnet du har logget inn med og &#8230; <a href="http://www.oraklet.no/2006/11/hello-world/">Les videre <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bruker du også <em>SQL*Plus</em> når du arbeider i Oracle? Da har jeg et tips til deg.</p>
<p>Det første jeg gjør når jeg arbeider i en ny database er å redigere SQL-prompten. Da vises navnet du har logget inn med og instanse navnet i prompten.<span id="more-1"></span></p>
<p>Variabelen <strong>sqlprompt</strong> defineres enten i filen <em>glogin</em> i katalogen <em>$ORACLE_HOME/sqlplus/admin</em> eller i lokal fil <em>login.sql</em>. Arbeider du fra en klient utføres endringen der.</p>
<h3>SQL-prompt i Oracle10g og Oracle11g</h3>
<pre> <code>SET sqlprompt “_USER’@'_CONNECT_IDENTIFIER SQL&gt; “</code></pre>
<p>Og resultatet blir:</p>
<pre> <code>SYS@DW SQL&gt; </code></pre>
<p>Dette kan du lese mere om i Oracle dokumentasjonen, <a title="sqlprompt i 10g" href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14357/ch12040.htm#SQPUG108" target="_blank"><em>Oracle10g</em></a> og <a title="sqlprompt i 11g" href="http://download.oracle.com/docs/cd/B28359_01/server.111/b31189/ch12040.htm#SQPUG108" target="_blank"><em>Oracle11g</em></a>.</p>
<h3>SQL-prompt i Oracle9i</h3>
<p>I Oracle9i kan du ikke bruke denne metoden uten må jukse litt. Her ser du en mulig løsning:</p>
<pre><code>-- Definert av Ingemar J. Haverstad
SET TERMOUT OFF

DEFINE gname=idle

COLUMN global_name new_value gname

SELECT LOWER(user) || '@' ||
  SUBSTR(global_name, 1,
                decode(dot, 0, LENGTH(global_name), dot-1)) global_name
  FROM (SELECT global_name, INSTR(global_name, '.') dot
FROM global_name);

SET sqlprompt '&amp;gname SQL&gt; '

SET TERMOUT ON
</code></pre>
<p>Denne er litt mer tungvint men kanskje OK  allikevel.</p>
<h3>SQL-prompt i Data Guard</h3>
<p>Dette leder oss til en variant som jeg bruker i Data Guard. Utfordringen her er å vite om man er i primærbasen eller i Data Guard databasen. Følgende knep kan brukes:</p>
<pre> <code>-- Definert av Ingemar J. Haverstad
SET TERMOUT OFF

DEFINE g_name=idle

COLUMN global_name new_value g_name

SELECT '[' || database_role || '] ' ||
  LOWER(user) || '@' ||
  db_unique_name global_name
FROM v$database;

SET sqlprompt '&amp;g_name SQL&gt; '

SET TERMOUT ON
</code></pre>
<p>Resultatet blir følgende i primær databasen:</p>
<pre> <code>[PRIMARY] sys@CHICAGO SQL&gt;
</code></pre>
<p>Resultatet blir følgende i standby databasen:</p>
<pre> <code>[PHYSICAL STANDBY] sys@BOSTON SQL&gt;
</code></pre>
<p>Vakkert, ikke sant!</p>
<h3>SQL-prompt i Real Application Cluster</h3>
<p>Noe liknende kan også brukes i <em>Real Application Cluster</em> miljøer. Her er det en fordel å angi hvilken av flere instanser du er innlogget på. Dette vises best med et eksempel:</p>
<pre> <code>-- Definert av Ingemar J. Haverstad
SET TERMOUT OFF

DEFINE g_name=idle

COLUMN global_name new_value g_name

SELECT
  LOWER(user) || '@' ||
  instance_name global_name
FROM v$instance;

SET sqlprompt '&amp;g_name SQL&gt; '

SET TERMOUT ON
</code></pre>
<p>Resultatet blir følgende når system brukeren er pålogget første instansen:</p>
<pre> <code>system@PROD1 SQL&gt;
</code></pre>
<p>Og resultatet blir følgende når system brukeren er pålogget andre instansen:</p>
<pre> <code>system@PROD2 SQL&gt;</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.oraklet.no/2006/11/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

