tag:blogger.com,1999:blog-48943396208021804012024-02-22T07:50:51.825-08:00Experiences in the World of ITThis is a blog of my thoughts, opinions, tips, and lessons learned as I work in information technology. It includes technical and strategic entries and is based on the things I run into working in higher education.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.comBlogger45125tag:blogger.com,1999:blog-4894339620802180401.post-89023068466240151592022-02-18T14:56:00.001-08:002022-02-18T14:56:11.501-08:00Setting Up Tomcat for an Easy Upgrade<p> I recently started running <a href="https://tomcat.apache.org" target="_blank">Apache Tomcat</a> for my servlet-based application. I was using Glassfish but it's not trivial to set up and it never seems to get patched. So I tried Tomcat. It works great for my servlet and it is actively patched. Unfortunately, in this day of just running an upgrade program and it does everything for you, Tomcat isn't quite so trivial to patch. Unless you set it up properly.</p><p>CATALINA_BASE and CATALINA_HOME</p><p>In Tomcat, CATALINA_HOME is where are the binaries are. These are the things that aren't user configurable. They don't change - until you need to patch.</p><p>CATALINA_BASE is where the configuration files and libraries are stored. These are 100% configurable and change as often as the needs of the admin change. This is the stuff you don't want to lose. Stuff like your web.xml, server.xml, context.xml, etc. All your custom configurations for things like users, jdbc drivers, jdbc connection pools, etc. Oh - and most importantly, your web apps.</p><p>The great news is that you can set up Tomcat to have your CATALINA_HOME on one path and your CATALINA_BASE on another. You want to do this as you install it because, by default, they share the same path. When they are separate, you upgrade your binaries in CATALINA_HOME and all of your configs in CATALINA_BASE are untouched.</p><p>So, here's how you do it.</p><p>Installing Tomcat is easy, just untar it to wherever you want it. Now it's there and ready to configure. That's your CATALINA_HOME. The home directory is, by default, named something like apache-tomcat-<version>. The version is going to change whenever you update it so I created a symlink to apache-tomcat.</p><p>Now create a separate directory for CATALINA_BASE. I called mine apache-tomcat-base. Then you copy your config directories to the new directory. This is the conf, lib, logs, ssl, temp, webapps, and work directories.</p><p>Now I have my CATALINA_BASE and CATALINA_HOME paths set up. I then updated my .bash_profile to set up the environment variables - so Tomcat knows which path is which. Here's what I put:</p><div style="text-align: left;">CATALINA_HOME=$HOME/apache-tomcat<br />export CATALINA_HOME<br />CATALINA_BASE=$HOME/apache-tomcat-base<br />export CATALINA_BASE</div><p>Now when you start Tomcat, it knows where to look. It's a fine setup but the real payoff is when you need to update. Now it's super easy.</p><p></p><ol style="text-align: left;"><li>Download the new tomcat version</li><li>Unzip it into the Tomcat home directory</li><ol><li>Example Command: tar -xvf apache-tomcat-10_0_11.tar.gz</li></ol><li>Stop Tomcat</li><li>Delete the old symlink</li><ol><li>Example Command: rm apache-tomcat</li></ol><li>Create the new symlink</li><ol><li>Example Command: ln -s apache-tomcat-10.0.11 apache-tomcat</li></ol><li>Start Tomcat</li></ol><p></p><p>Now you have an updated version of Tomcat and you didn't have to touch any of your web apps or other configurations.</p><p>It may not be quite as slick as just running an update program but, once set up properly, it's pretty close!</p><br /><br /><p></p><p><br /></p><div><br /></div>Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-90772034751528984312018-03-21T15:03:00.000-07:002018-04-06T13:03:05.697-07:00Oracle Native Encryption and Integrity on a Glassfish JDBC Connection Pool<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh7VVESELgUjHCcWvJ2raS_nK35P8KD1wFpwbvjTKZhUwfBLiRD_do7xwgIyWAwMd4ifxtFWAXQOX_n5DzIUjlH8Wmzp_c42neQ9t60SbAGZMtc0_slOtqp_eMKDvRpZ_3kHPeQGHVP3rD/s1600/glassfish.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="133" data-original-width="300" height="88" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh7VVESELgUjHCcWvJ2raS_nK35P8KD1wFpwbvjTKZhUwfBLiRD_do7xwgIyWAwMd4ifxtFWAXQOX_n5DzIUjlH8Wmzp_c42neQ9t60SbAGZMtc0_slOtqp_eMKDvRpZ_3kHPeQGHVP3rD/s200/glassfish.jpg" width="200" /></a></div>
When encrypting a connection to an Oracle database, there are two primary choices. You can use SSL/TLS (which creates a TCPS connection) or you can use Oracle Native Encryption. As with web servers, creating a TCPS connection requires SSL Certificates that are accepted by both the client and the database server as well as creating wallets to store them. Oracle native encryption, on the other hand, only requires some quick configuration changes. On the whole, it is much easier to implement.<br />
<h2>
How It Works</h2>
Oracle native encryption encrypts your data before sending it to the client. It still uses a TCP connection (which is not encrypted) but the data flowing through it is encrypted. As of 11g, Oracle supports the following encryption algorithms:<br />
<br />
<ul>
<li>AES256 (AES 256-bit key)</li>
<li>AES192 (AES 192-bit key)</li>
<li>AES128 (AES 128-bit key)</li>
<li>3DES168 (3-key 3DES)</li>
<li>3DES112 (2-key 3DES)</li>
<li>DES56C (DES 56-bit key CBC)</li>
<li>DES40C (DES 40-bit key CBC)</li>
<li>RC4_256 (RC4 256-bit key)</li>
<li>RC4_128 (RC4 128-bit key)</li>
<li>RC4_56 (RC4 56-bit key)</li>
<li>RC4_40 (RC4 40-bit key)</li>
</ul>
<div>
Once you have selected your preferred encryption algorithm, you can set either your server or client to treat connections as follows:</div>
<div>
<ul>
<li>ACCEPTED : The client or server will allow both encrypted and non-encrypted connections. <i>This is the default if the parameter is not set.</i></li>
<li>REJECTED : The client or server will refuse encrypted traffic.</li>
<li>REQUESTED : The client or server will request encrypted traffic if it is possible, but will accept non-encrypted traffic if encryption is not possible.</li>
<li>REQUIRED : The client or server will only accept encrypted traffic.</li>
</ul>
<div>
The easiest way to set it up is to configure either your database or your client (any client using the Oracle client libraries) by adding parameters to your sqlnet.ora file. For example:</div>
</div>
<div>
<br /></div>
<br />
<div>
SQLNET.ENCRYPTION_SERVER=REQUIRED</div>
<div>
<div>
SQLNET.ENCRYPTION_TYPES_SERVER= (3DES168)</div>
<div>
<br /></div>
<div>
SQLNET.CRYPTO_CHECKSUM_CLIENT=REQUESTED</div>
<div>
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT=(SHA1,MD5)</div>
</div>
<div>
<br /></div>
<div>
These lines will require any outgoing (client) or incoming (server) connections to be encrypted using 3DES168 encryption.</div>
<div>
<br /></div>
<div>
Further, there are two lines that enable data integrity checking. Data integrity creates a checksum to ensure that the data/message/request that the database receives is the same as what the client sent. This protects against the following attacks:</div>
<div>
<ul>
<li>Data Modification</li>
<li>Deleted Packets</li>
<li>Replay Attacks</li>
</ul>
<div>
The configuration follows the same rules as encryption. It supports the following checksumming algorithms:</div>
</div>
<div>
<ul>
<li>SHA1</li>
<li>MD5</li>
</ul>
<div>
It also has the same preference/requirement parameters:</div>
</div>
<div>
<ul>
<li>ACCEPTED : The client or server will allow both checksummed and non-checksummed connections. <i>This is the default if the parameter is not set.</i></li>
<li>REJECTED : The client or server will refuse checksummed traffic.</li>
<li>REQUESTED : The client or server will request checksummed traffic if it is possible, but will accept non-checksummed traffic if checksumming is not possible.</li>
<li>REQUIRED : The client or server will only accept checksummed traffic.</li>
</ul>
<h2>
JDBC Thin Clients</h2>
</div>
<div>
Unfortunately, JDBC Thin Clients do use the standard Oracle client libraries and so any configuration in the sqlnet.ora file on your client machine will be ignored. So how do you enable encryption and integrity over JDBC? There are two methods. You can add it to your JDBC connection creation code or you can enable it as part of a server configured JDBC connection pool.</div>
<div>
<br /></div>
<div>
There is lots of <a href="https://docs.oracle.com/cd/B28359_01/java.111/b31224/clntsec.htm#EHAFHEIG" target="_blank">documentation</a> on how to enable encryption and integrity checking in your java code. What I had a hard time finding, is how to enable it in your JDBC connection pool configuration - specifically in your GlassFish server configuration (I was able to find WebLogic help <a href="http://blog.oracle48.nl/oracle-native-connection-encryption-in-weblogic-connection-pools/" target="_blank">here</a>). Apparently, nobody does it.</div>
<div>
<br /></div>
<div>
So after a LOT of searching, I was able to find the clues I needed on <a href="https://support.oracle.com/" target="_blank">My Oracle Support</a> in Doc ID <a href="https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=405751752889374&id=1664506.1&_afrWindowMode=0&_adf.ctrl-state=69ac9raos_58" target="_blank">1664506.1</a>. </div>
<h2>
Encryption and Integrity in a GlassFish Connection Pool</h2>
<div>
When you create a JDBC Connection Pool in GlassFish 4, you go through a very simple creation wizard with some very basic options. First you create the name and type of connection. For example, the following creates an Oracle connection pool called Example Pool.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJPwdseBX36TbWPFxa_mySHTEKeAwAKw1UupKRxLbv3OHA8T3TiycwLrhOlc8RRyaoTgsdEhZo2l6Re63_RLiEjp5XE69OzaP8h7LzpjKuDoynRNu0hxtcthl2cgCUTR_wFlaxYFI36j-P/s1600/Glassfish+Connection+Pool+Step+1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="371" data-original-width="942" height="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJPwdseBX36TbWPFxa_mySHTEKeAwAKw1UupKRxLbv3OHA8T3TiycwLrhOlc8RRyaoTgsdEhZo2l6Re63_RLiEjp5XE69OzaP8h7LzpjKuDoynRNu0hxtcthl2cgCUTR_wFlaxYFI36j-P/s640/Glassfish+Connection+Pool+Step+1.PNG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Once you've completed the first step, you move on to step 2 by clicking Next. On step 2 you'll have a bunch of default values which you can leave the same but if you scroll down to the bottom, you'll get to a section called Additional Properties. This is where you will enter in your encryption and integrity options. You do it by clicking the Add Property button and using the following;</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<ul>
<li>Name: ConnectionProperties</li>
<li>Value: (oracle.net.encryption_client=REQUIRED, oracle.net.encryption_types_client=(AES128,3DES168), oracle.net.crypto_checksum_client=REQUIRED, oracle.net.crypto_checksum_types_client=(MD5,SHA1))</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhva7jnlGzQ0NgtvqFQGe-RkHkSolX8IhUDwHa16smKoP6iXR-8uDPVea9HQYkY05JqZCQe9rFAc-ePp8h47mRrY5S9-NyoVpeUk43dNjp9okOAXdeZ7IVe63WKpGQovkW5A6Sb8FKiYFgQ/s1600/Glassfish+Connection+Pool+Step+2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="533" data-original-width="837" height="406" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhva7jnlGzQ0NgtvqFQGe-RkHkSolX8IhUDwHa16smKoP6iXR-8uDPVea9HQYkY05JqZCQe9rFAc-ePp8h47mRrY5S9-NyoVpeUk43dNjp9okOAXdeZ7IVe63WKpGQovkW5A6Sb8FKiYFgQ/s640/Glassfish+Connection+Pool+Step+2.PNG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<br /></div>
<div>
This breaks down into essentially 4 commands:</div>
<div>
<ol>
<li>oracle.net.encryption_client=REQUIRED</li>
<li>oracle.net.encryption_types_client=(AES128,3DES168)</li>
<li>oracle.net.crypto_checksum_client=REQUIRED</li>
<li>oracle.net.crypto_checksum_types_client=(MD5,SHA1)</li>
</ol>
<div>
So, encryption is required and AES128 and 3DES168 are acceptable algorithms. Also, data integrity checking is required and MD5 and SHA1 are acceptable algorithms.</div>
</div>
<div>
<br /></div>
<div>
NOTE: Make sure your whole command is surrounded by parenthesis and that there are commas separating the individual commands. </div>
<div>
<br /></div>
<div>
As a quick reminder, you'll need to put in a User, Password, and URL. The URL will be in the form of: </div>
<div>
<br /></div>
<div>
jdbc:oracle:thin:@<server name="">:ServerName<server name=""><port>:PortNumber<port><db sid=""></db></port></port></server></server></div>
<br />
<div>
<div class="separator" style="clear: both;">
</div>
<div>
<h2>
Verification</h2>
</div>
<div>
How can you tell if it worked? The following SQL will give the session's network service banner which will show if encryption and integrity are being used.</div>
<div>
<br /></div>
<div>
select network_service_banner from v$session_connect_info where sid = sys_context('USERENV','SID');</div>
<div>
<br /></div>
<div>
It will show an output similar to this:</div>
<div>
<br /></div>
<br />
<div>
TCP/IP NT Protocol Adapter for Linux: Version 12.1.0.2.0 - Production</div>
<div>
<div>
Encryption service for Linux: Version 12.1.0.2.0 - Production</div>
<div>
<b>AES256 Encryption service adapter for Linux: Version 12.1.0.2.0 - Production</b></div>
<div>
Crypto-checksumming service for Linux: Version 12.1.0.2.0 - Production</div>
<div>
<b>MD5 Crypto-checksumming service adapter for Linux: Version 12.1.0.2.0 - Production</b></div>
</div>
</div>
<div>
<br /></div>
<div>
The lines in bold show that the connection is using AES256 encryption and MD5 checksumming. A network service banner with no encryption or integrity checking would look like this:</div>
<div>
<br /></div>
<div>
<div>
TCP/IP NT Protocol Adapter for Linux: Version 12.1.0.2.0 - Production</div>
<div>
<div>
Encryption service for Linux: Version 12.1.0.2.0 - Production</div>
<div>
Crypto-checksumming service for Linux: Version 12.1.0.2.0 - Production</div>
</div>
</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<h2>
Observed Behavior</h2>
<div>
I couple of quick observations in closing. When there are no client side settings for a JDBC connection, I've observed the following:</div>
<div>
<ul>
<li>If encryption or integrity is set to REQUIRED on the database server, the connection will be encrypted and checksummed.</li>
<li>If encryption or integrity is set to REQUESTED on the database server, the connection will NOT be encrypted or checksummed (this is counter-intuitive as the connection should be encrypted and checksummed if possible but on my JDBC connections, they were not).</li>
</ul>
<h2>
</h2>
</div>
</div>
Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-90803565285188342382017-12-04T08:35:00.001-08:002017-12-04T08:35:14.043-08:00Windows Task Scheduler Job Fails After Password ChangeI've got a simple powershell script that I use to back up some files every week. I use the Windows Task Scheduler to run the job automatically. <br />
<br />
Last week I changed my password (I use an Active Directory domain account) and over the weekend, my job failed. At first I didn't see the correlation and the error was not helpful:<br />
<br />
<i>Task Scheduler failed to start "\Backup Security Files" task for user "<username>". Additional Data: Error Value: 2147943726.</username></i><br />
<br />
I tried running the script from the command line and it worked fine. So I used Bing to search the error. It came up with this <a href="https://answers.microsoft.com/en-us/windows/forum/windows_vista-windows_programs/task-scheduler-failed-to-start-additional-data/96994b77-d690-4403-8b51-4e1d0ae998e1?auth=1" target="_blank">link</a> which explained that it was the password change which causes the issue. The solution said to do the following:<br />
<br />
<ul>
<li></li>
<li>In Task Scheduler, right click on the scheduled job and select Properties >>> then select the Settings tab</li>
<li>In the last listed option: "If the task is already running, the following rule applies:", select "Stop the existing instance" from the drop down list.</li>
<li>Click "OK"</li>
<li>You will be prompted to put your password in. </li>
</ul>
Once you've put your new password in, the job is fixed and should run fine.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-53166369762069198772015-04-06T13:14:00.001-07:002015-04-06T13:14:24.424-07:00Installing Oracle 32 ODBC Drivers from the 12c ClientWhen you install the 32 bit Oracle 12c client on a Windows 64 bit server, the ODBC drivers don't show up. You actually have to run the following from the command line:<br />
<br />
<div style="font-family: Calibri; font-size: 11pt; margin: 0in;">
%windir%\SysWOW64\odbcad32.exe</div>
<br />
Once you run it, the ODBC drivers work fine.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-65398887380048997272014-09-25T08:47:00.001-07:002014-09-25T08:47:35.914-07:00Windows 8.1 and the Cisco VPN ClientCisco stopped updating their VPN client a long time ago but there are many of us that continue to use it. Mostly because we're required to. I recently updated my home laptop to Windows 8.1 and my VPN client stopped working. I tried uninstalling and reinstalling multiple times but that didn't help at all. I did quite a few internet searches as well and was getting nowhere. Finally, I found a forum entry that solved the issue for me. It has to do with DNE (which I don't know what it stands for but it has to do with low level network functionality and is used with VPN clients). Here's how it worked:<br />
<br />
<div>
<ol>
<li>I uninstalled my Cisco VPN client.</li>
<li>I went to the site: http://www.citrix.com/go/lp/dne.html (I thought it amusing that I'm using a Citrix solution to a Cisco problem)</li>
<li>I downloaded and ran the winfix.exe program (ftp://files.citrix.com/winfix.exe)</li>
<li>I rebooted my computer.</li>
<li>I downloaded and installed the latest DNE (ftp://files.citrix.com/dneupdate64.msi)</li>
<li>I reinstalled the Cisco VPN client.</li>
</ol>
<div>
That fixed my issue and I am now able to VPN in to work.</div>
</div>
Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-34188881063741500072013-06-05T14:29:00.000-07:002013-06-05T14:29:00.018-07:00SOA - What and Why<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBzdPF0JXP6BayTj4WChylka_ulHCPiwpdX9dmha9HfK37bf_aub6Go9WryaLgr9B8p2OZNY96Cbyf82XPrByxVXwYuQ8hsNdBOtLREUL114_RROF35GKyINFHVdb0cPi4sYs19M-YyS8m/s1600/SOA.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBzdPF0JXP6BayTj4WChylka_ulHCPiwpdX9dmha9HfK37bf_aub6Go9WryaLgr9B8p2OZNY96Cbyf82XPrByxVXwYuQ8hsNdBOtLREUL114_RROF35GKyINFHVdb0cPi4sYs19M-YyS8m/s1600/SOA.png" /></a>Service Oriented Architecture (SOA) is more of a mindset than a product. In fact there are many different products you could use for SOA and you could also use none. It depends on how you implement it. In other words, it is a philosophy more than it is a product. Yes, there are many products that follow the philosophy but having a product doesn't make SOA successful as much as following the philosophy does.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
SOA, as I think of it, is about standardizing and managing your integrations. The goal is to create an accounting of what you have, eliminate tribal knowledge (you know, the stuff that only this one techy guy knows), and simply integration management. It's the idea that data flow from one application to another, be it legacy application or cloud application or something else, should be done in a standards-based way, a way that is not dependent on a particular application or vendor. My most common example is web services. </div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Web services are based on standards, the are created and maintained in a consistent manner, and they developed/administered outside of the source and target applications. So now you can have a single team responsible for integration instead of one resource here and another over there, etc. It also means that if resource A leaves, resource B can pick up where A left off and not have to try to figure out what and how A got these two things to talk to each other. That's one benefit of SOA, the reduction or even elimination of tribal knowledge.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Unfortunately, web services is not going to be supported by every single application. That's why there's enterprise service buses (ESBs). These work like translation layers. They talk to legacy applications in a way they understand and convert that data into your integration standard (like web services). On top of that, they are a tool for monitoring your integrations as well and catching issues before they become problems. </div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Another aspect of SOA is governance or change management. Ever had an application break because something it depended on changed? You know the stress of trying to find out what broke and why it broke while people are freaking out because some widget is down? Effective SOA governance can eliminate almost all of that. Yes it's a pain to track down and effectively document all of your applications and integrations. Yes it's a cultural shift (and not necessarily a popular one) to record any new or changed integrations. But, once in place, good governance can take care of many problems before they become problems.</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: left;">
So, that's my take on SOA in a nutshell: standards-based integration and good integration governance.</div>
<br />Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-38878421336417500492013-06-03T10:55:00.000-07:002013-06-03T10:55:00.859-07:00The User Experience<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUT1y1LfNfgKGF2QEFdKlek3u7RJMr-QBCbyasLVZLFnhUOSrUhaViy3KbM5nXhVmxjqqCyM7coX2jCXnokbpJuRPgDIzMK7Q_qfQRycu5IXgpuDV5LrxpleFtKbl_-andL_ax3Rl_aM8/s1600/thinker.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUT1y1LfNfgKGF2QEFdKlek3u7RJMr-QBCbyasLVZLFnhUOSrUhaViy3KbM5nXhVmxjqqCyM7coX2jCXnokbpJuRPgDIzMK7Q_qfQRycu5IXgpuDV5LrxpleFtKbl_-andL_ax3Rl_aM8/s1600/thinker.jpeg" /></a></div>
It used to be that users would just put up with what they were given. If it a was a long, complex process or a non-intuitive application, they would just do it because that's all there was. Times are changing. There is a lot more competition and a lot more options and if your customers don't like you, they can find someone else. This is even true in higher education. Students transfer all the time or drop out or whatever. They are not a captive audience and should not be taken for granted. Fortunately, they are not and many colleges and universities are increasingly trying to make their students' experiences better.<br />
<br />
A huge part of the student experience is the administrative overhead. Getting accepted, registering, enrolling in classes, getting financial aid, etc. While modern technology has made all of this possible over the web, it is usually provided by different systems of varying age. The could make applying an entirely different experience from registering which could be entirely different than financial aid and on and on. This creates headaches for student and even for staff as the students are then calling and/or visiting various departments for help. What is needed is an intuitive, consistent user experience.<br />
<br />
Creating a good user experience is no simple task. There are technical, design, and political challenges that will have to be overcome in order to be successful. It's a long and sometimes expensive road but, in the end, you have the opportunity to build something that makes things easier for the student, for the support staff, and may even save money and time in the long run. It's really a win win situation.<br />
<br />
So how do you do it? First of all, you can't just buy some content creation tools and walk away. You can't even buy a whole portal suite and walk away. If you want to be successful, you must link the IT back end with the user interface front end in a way that will serve both. So, if your organization is like mine, you've got a mixture of legacy enterprise applications mixed in with a few cloud applications and held together with duct tape and baling wire. How do you link all of the data and processes you need from these applications? The answer is SOA.<br />
<br />
The whole point of a service oriented architecture (SOA) is to organize and integrate your applications in a way that is standard and flexible. The simplest way is to standardize your integration as much as possible (using web services or something similar) and use an enterprise service bus or something similar to translate the data from incompatible applications. Basically, you create a standard set of web services that not only integrates your current applications but creates a standard way for the new user interface to interact with all of your applications. It lets you create a single interface that spans multiple systems. Yes, I realize that my simple paragraph here is quite possibly several years of work to implement. It's never as easy as it sounds.<br />
<br />
Once you have your SOA layer, you can provide your user experience development team with the tools they need to develop and maintain the user experience. Gartner calls this the User eXperience Platform (UXP). The goal of the platform is to provide the tools to create a great user experience on the desktop, tablet, and smartphone. As a platform, this is an new/immature concept, but there are all sorts of tools popping up that fill some or all of the requirements.<br />
<br />
The last thing to remember is that the UXP must be agile. It must be able to change and change quickly to the needs of the user. Building the infrastructure and finding the correct tools is a huge and time-consuming task but the updates and process re-writes, etc. should not be. Adapting to new technologies should not be. Adding and removing back-end applications should not be disruptive. This is the purpose of the SOA layer, to make sure the data is accessible in a standard way that reflects not only today's needs but tomorrow's as well.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-61285904494147369432013-05-30T15:29:00.000-07:002013-05-30T15:29:00.619-07:00Choose you this day...Enterprise<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaH-9X0d2uy6JSPUgWNyuJWBH1RrMXDmtIs3Idqs6cF8i4Lh2IVe8CXu_2Fvl0bG37zuG99iD7X-pWkY_gzkO1A0FhmJVKy0lm995AJ63-dJWbaPaHw3M_3RMpP3NjL3ArtfaUEQxC-6Y/s1600/scales.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaH-9X0d2uy6JSPUgWNyuJWBH1RrMXDmtIs3Idqs6cF8i4Lh2IVe8CXu_2Fvl0bG37zuG99iD7X-pWkY_gzkO1A0FhmJVKy0lm995AJ63-dJWbaPaHw3M_3RMpP3NjL3ArtfaUEQxC-6Y/s1600/scales.jpg" /></a></div>
In my <a href="http://tech-astute.blogspot.com/2013/05/choose-you-this-daythe-consumer.html" target="_blank">previous post</a>, I outlined the three primary consumer ecosystems and their differences. Now let's talk about the enterprise. There is a lot of the same thing going on but with an interesting twist. First of all, if I were to name the top 3 enterprise ecosystems, I would have to go with Microsoft, Oracle, and SAP. There are other best of breed and open source, etc. but I think these three are the really big ones. Unlike the consumer space, the enterprise space seems to only have one business model for vendors, sell as many licenses of as many products as possible and make it difficult to change vendors.<br />
<br />
All three vendors have tight integration among their products. All three have great value propositions. And all three want you to buy as much from them as possible. In other words, they want to be your single source - for you to be a Microsoft shop or an Oracle shop or an SAP shop. Their applications are feature rich but complex and can be very difficult to manage. They are all customizable (to a point) but become more difficult to maintain the more customized they are. They all can make the claim that it's easier to standardize on their ecosystem than to try to get best of breed systems.<br />
<br />
For a long time that was the way it was. You picked what best suited your needs and you stayed with it (because moving was way to expensive and time consuming). However, there's a newcomer to the crowd, cloud systems.<br />
<br />
When service oriented architecture started gaining steam, enterprises began to use web services and other standards to integrate their systems. They found it not only made integration easier but it made their systems modular and more easily replaceable. If the same feeds that provide data to and from PeopleSoft, for example, can provide data to and from Workday, then these huge on-premise systems could be replaced with cloud based systems. Further, if these applications (HRMS, Financials, etc.) are not critical differentiators for the business, is an onsite application worth the time and resources to build, secure, and maintain it? As cloud applications mature and become more and more pervasive, will the huge, complex, onsite installations start to die out?<br />
<br />
It seems odd that at a time when consumer ecosystems are becoming more and more closed, that enterprise systems are actually becoming more and more open. While consumers are getting more and more locked in, the lock-in strategies of enterprise vendors is starting to fail.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-34292020772950597602013-05-28T14:55:00.001-07:002013-05-29T10:38:32.496-07:00Choose you this day...The Consumer<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGeCtPsgfv6aQDtsFvMffb8sj4Legm78WIrlNGTc9i-_N9mqUBe5eXwGNjeKP5Y2FfhV8Z2MsPJBwtfTytNNUCR-_1615cV1fwLRtvjnJE3w-uKH9itOoZcrRvaqQwLCceN4vGXigOE4U/s1600/balance_of_power.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGeCtPsgfv6aQDtsFvMffb8sj4Legm78WIrlNGTc9i-_N9mqUBe5eXwGNjeKP5Y2FfhV8Z2MsPJBwtfTytNNUCR-_1615cV1fwLRtvjnJE3w-uKH9itOoZcrRvaqQwLCceN4vGXigOE4U/s1600/balance_of_power.jpeg" /></a></div>
There are 3 primary consumer ecosystems right now. They are Apple, Google, and Microsoft. Interestingly enough, their primary forms of revenue come from 3 different segments of the market. Apple makes most of its money selling hardware. Google makes most of its money from ads. Microsoft makes most of its money selling software. However, all three are striving to provide users with an all-encompassing experience in order to promote their revenue generation models.<br />
<br />
Apple wants you to buy Apple hardware - iPhones, iPads, MacBooks, Apple TVs, etc. Their hardware costs more than comparable hardware from other manufacturers. So how do they create a value proposition? They have created an easy to use, intuitive set of software and services - iTunes, iCloud, iOS, MacOS, etc. These all work together to make what Apple bills a superior user experience. That's the value. If you want the Apple experience, you must buy the Apple hardware.<br />
<br />
Google wants your data. The odd thing about Google is that, unlike Apple and Microsoft, the consumer is not Google's customer. Google's customers are advertisers. Advertisers want the best possible return on investment for their ads. Google gives that to them by collecting all of the data it can on individuals and targeting ads to them based on that data. Google wants to find out as much as possible about consumers so it created apps that work well and then uses those apps to track consumers, learn about them, and advertise to them. Gmail, Google Calendar, Google+, Google Drive, etc. are all tools for gathering data. Chrome, Android, and ChromeOS are all platforms optimized to run Google's data gathering tools and can also be data gathering tools themselves. All of this is offered "free" to the consumer because Google is getting their money from advertisers.<br />
<br />
Microsoft sells software. Most notably (for the consumer) Windows and Office. For a long time, Microsoft's strategy was to have Windows installed on every PC and have Office dominate the business world which means consumers used it at work so they were more likely to purchase and use it at home. A simple enough strategy that worked well until the internet revolution started taking off. All of a sudden people could become more productive online. There appeared email and messaging, then came online word processors and spreadsheets, then online entertainment, etc. Slowly but surely, the world is becoming less and less dependent on Windows and Office. To combat this slide into obscurity, Microsoft launched its own web browser, its own smartphone, its own web services, its own online word processor and spreadsheet, etc. However, when Microsoft did this, it integrated these offerings with its existing software offerings. Running Windows and Office with Microsoft cloud services gives the user an enhanced experience. Further, it bundled the cloud and software offerings together and now sells it as a subscription.<br />
<br />
Admittedly, this is a huge oversimplification. I haven't even touched on social networking which is primarily controlled by Facebook and Twitter. However, my point is the same, these three vendors have created and/or are creating ecosystems that are vying for consumer attention. As time goes on, these ecosystems are drifting farther away from each other. This is by design as Google doesn't want you jumping ship to Microsoft and Microsoft doesn't want you jumping ship to Apple, etc. So the question becomes, which ecosystem do you choose? or can you stay aloof from all of them?<br />
<br />
The answer I give to most people is that they will be happier committing to an ecosystem and staying with it. They just need to pick the one that best suites their needs and budget and go with that.<br />
<ul>
<li>Pick Apple if they can afford the hardware and enjoy the Apple experience.</li>
<li>Pick Microsoft if they are fans of Windows or Office or Xbox more than they like Apple or Google.</li>
<li>Pick Google if they are looking for the lowest price and are OK with Google using all of their data to advertise to them. However, I always encourage people who choose Google to purchase Nexus devices as they will have a consistent user experience whereas the other carriers (Samsung, HTC, LG, Motorola, etc.) each have their own flavor of Android.</li>
</ul>
It's odd but businesses have a very similar dilemma which I will go into on my next post.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-33769855006016526362012-10-29T20:33:00.000-07:002012-10-29T20:33:29.057-07:00Microsoft's Windows Everywhere Strategy - A Few Holes Left<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5TNYRkLYQFXPDLQQMC4G8PbKO1k6mxYQMpxuQzb17sva82D_DWo0dDzvHLwWtBjmzwrGY1cO0VdUWxVoImZ1ysndDwk3NQDDS_8T6t9Jc_YxIN3OI1BvvEYq_rJfXVlNFk3WCpB0eUB5x/s1600/thCAF9N765.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5TNYRkLYQFXPDLQQMC4G8PbKO1k6mxYQMpxuQzb17sva82D_DWo0dDzvHLwWtBjmzwrGY1cO0VdUWxVoImZ1ysndDwk3NQDDS_8T6t9Jc_YxIN3OI1BvvEYq_rJfXVlNFk3WCpB0eUB5x/s1600/thCAF9N765.jpg" /></a></div>
Windows 8 is out and Microsoft's strategy to be everywhere is rolling out. They have a unified interface so you get the same look and feel whether you're using a desktop, a tablet, a smartphone, or an Xbox. They are synchronizing their entertainment apps (movies and music) over all devices. They have their own stores for everything and they really are blurring the line between devices. By that I mean they are creating a lot of overlap. For example, you can start a movie on your PC, move to your Xbox and continue it, and even keep going on your phone. Basically, they're creating core entertainment that works on everything. They have also set up Skydrive so that your files are accessible everywhere as well. So, similar to Google, they created a central repository where your data, music, movies, games, etc. are all stored. Then your devices simply become terminals to access your content. However, unlike Google, you also can have copies of all of your documents stored locally (so it's not gone when the internet is not available) and you can edit your documents with the extra power and speed of Office on the desktop. Yes, you can also view and edit your documents online but you don't have the same functionality that you get from the desktop applications. We're just not there yet.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6YOUkmCXdkv9qUPqorH6MUMFWwbEOS9ze0DL4dZ5WziUuqKa6EZ93ej5_kScGGwWK9VikuQ14WbyUZ5NzGV3go_P2JyrHOwR2sEozPNRQE_D5lIo-82mrIfDEzydTCqfSpVLX33UMymOX/s1600/thCAMREWX0.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6YOUkmCXdkv9qUPqorH6MUMFWwbEOS9ze0DL4dZ5WziUuqKa6EZ93ej5_kScGGwWK9VikuQ14WbyUZ5NzGV3go_P2JyrHOwR2sEozPNRQE_D5lIo-82mrIfDEzydTCqfSpVLX33UMymOX/s1600/thCAMREWX0.jpg" /></a></div>
<br />
So, Microsoft's got a great plan. The execution has begun. Skydrive is there, Xbox Music is there, Xbox Movies are there, Office is available both online and on your desktop. Your whole digital life in sync with all of your devices - well, all of your Windows devices. There's where the weaknesses come in. Hopefully this will change soon but Microsoft is requiring you to have Microsoft powered devices to get this wonderful synergy - very Apple-esque. Unfortunately, like Apple, there are gaps that could allow Google or Apple or somebody else to elbow their way in. So what do they need? Starter devices and low end devices.<br />
<br />
<strong>Tablets</strong>: The Surface is great. It's the most interesting new tablet out there. But it starts at $500 and the other brands are about the same price. For that price I can get two Nexus 7 tablets and a Roku. People who are not willing to spend big bucks on a tablet are going to be getting the iPad minis and Android tablets of the world. If people are getting tablets from Google or Apple, they're buying apps and entertainment from the same source. They may also develop brand loyalty to somebody else. This is bad. Microsoft needs a $200 to $250 tablet. That is where Windows RT could really shine. Strip out Office RT if you have to but you need entry level tablets. The kind of tablets parents will want to get for their kids. They have great high end offerings, they need good low-end offerings as well.<br />
<br />
<strong>Entertainment</strong>: Right now, the best way to actually watch Xbox Movies (that your rent or buy) is through your Xbox. You can watch them on a PC or Windows Tablet but, for me, that's a poor substitute for watching them on your TV with full surround sound. However, I don't have an Xbox and I don't want to get an Xbox just to stream movies - that's way too expensive. I do have a couple of Rokus though and would love to be able to stream movies from Microsoft the same way I can stream them from Netflix or Amazon or Hulu, etc. Adding the ability to access that content from a variety of devices (even if they're not Microsoft) will make it a lot easier for Microsoft to invade the living room as well as the office and the mobile space. It would bring it all together in a way that works for the customer first.<br />
<br />
I am a Microsoft fan. I didn't used to be but they won me over with Windows 7 and now Windows 8 coupled with Skydrive and Office Online. Thanks to their integration that still lets me have local copies of my files, I have actually purchased Office and 2 copies of Windows 8. I would have purchased a Surface but they're just too expensive. I use their music service for my Zune and computer. I would use their video service if they would let me purchase with money instead of points and if I could watch the movies on my Roku. I'm half-way in but there are some barriers to getting in the rest of the way. I'm hoping they overcome that soon.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-15364554071749290222012-08-13T14:36:00.001-07:002012-08-13T14:36:53.312-07:00Unknown WLS Home Location - Grid Control 11gI have a Grid Control 11g server set up that keeps giving me this host configuration error:<br />
<br />
"Unknown WLS Home Location or WLS Version in Middleware Home"<br />
<br />
All attempts to refresh the host configuration error off with a java null pointer error. Not good.<br />
<br />
I tried to find the answer on <a href="http://support.oracle.com/" target="_blank">My Oracle Support</a> but could only find the bug. I filed an SR and was told to reference Doc ID 1433113.1. Unfortunately, I couldn't access that document. So the support rep sent me the text. <br />
<br />
Here's the issue: The new version of SmartUpdate (3.3.0.0) changes the WebLogic registry and makes it so Grid Control 11g can no longer read it. Hence the error. The solution is to uninstall the update and reinstall it outside of your middleware home. That will fix the problem.<br />
<br />
So here's what you have to do:<br />
<br />
<ol>
<li>Backup/copy your current batch cache ($MW_HOME/utils/bsu/cache_dir). You will use this later.</li>
<li>Uninstall Smart Update ($MW_HOME/utils/uninstall/uninstall.sh).</li>
<li>Install Smart Update in a different location.</li>
<ol>
<li>Run the installer (java -jar patch-client-installer330_generic32.jar)</li>
<li>Choose to create a new home directory</li>
<li>Specify the new directory</li>
</ol>
<li>Copy your backed up cache_dir to $NEW_MW_HOME/utils/bsu.</li>
<li>Backup your $HOME/bea/beahomelist file.</li>
<li>Edit your $HOME/bea/beahomelist file and remove the new middleware home path (remove the old one too if it's there).</li>
<li>Refresh your host configuration. It should work fine now.</li>
</ol>
This bug is fixed in 12c but I don't know if they'll even try to fix it in 11g.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-12252083610908114692011-10-24T08:15:00.000-07:002012-02-03T09:22:43.300-08:00What PSU Am I On?Working with Oracle products can be frustrating sometimes. For example, if you install a PSU on Grid Control 11g (let's say PSU 5), then My Oracle Support will refer to your version as 11.1.0.1.5. However, every single Oracle executable that returns a version number (including OPatch) report the version as 11.1.0.1.0. So how do you know what's really installed?<br />
<br />
I looked it up on My Oracle Support and the following is a excerpt from Document ID 854428.1:<br />
<br />
<br />
<blockquote>
Patch Set Updates are referenced by their 5-place version number. The
following OPatch commands are a simple way to determine the latest PSU installed
in the Oracle Home.<br />
For <span class="bold">Database</span> PSUs, enter the following command: </blockquote>
<blockquote>
opatch lsinventory -bugs_fixed | grep -i 'DATABASE PSU' </blockquote>
<blockquote>
A list will be output, and the highest release version reported is the
current PSU installed. In the following example output, 11.1.0.7.4 is the
installed Database PSU: </blockquote>
<blockquote>
8833297 9654987 Tue Oct 05 15:36:55 GMT 2010 DATABASE PSU 11.1.0.7.1 (INCLUDES CPUOCT2009)<br />
9209238 9654987 Tue Oct 05 15:36:55 GMT 2010 DATABASE PSU 11.1.0.7.2 (INCLUDES CPUJAN2010)<br />
9352179 9654987 Tue Oct 05 15:36:55 GMT 2010 DATABASE PSU 11.1.0.7.3 (INCLUDES CPUAPR2010)<br />
9654987 9654987 Tue Oct 05 15:36:55 GMT 2010 DATABASE PSU 11.1.0.7.4 (INCLUDES CPUJUL2010) </blockquote>
<blockquote>
For <span class="bold">CRS (Cluster Ready Services)</span> PSUs, enter the
following command: </blockquote>
<blockquote>
opatch lsinventory -bugs_fixed | grep -i 'TRACKING BUG' | grep -i 'PSU' </blockquote>
<blockquote>
For <span class="bold">GI (Grid Infrastructure)</span> PSUs, enter the
following command: </blockquote>
<blockquote>
opatch lsinventory -bugs_fixed | grep -i 'GI PSU' </blockquote>
<blockquote>
<table border="1" cellpadding="3" cellspacing="0" class="Note oac_no_warn" frame="hsides" rules="groups">
<tbody>
<tr>
<td align="left"><div class="notep1">
For Windows Users:</div>
In the following commands for Enterprise
Manager PSUs, use <code><span class="codeinlinebold">findstr /i</span></code>
instead of <code>grep -i</code>. </td></tr>
</tbody></table>
<br />
For <span class="bold">Enterprise Manager Agent</span> PSUs, enter the
following command: </blockquote>
<blockquote>
opatch lsinventory -bugs_fixed | grep -i 'ENTERPRISE MANAGER AGENT' | grep -i 'PSU' </blockquote>
<blockquote>
For <span class="bold">Enterprise Manager OMS</span> PSUs, enter the following
command: </blockquote>
<blockquote>
opatch lsinventory -bugs_fixed | grep -i 'ENTERPRISE MANAGER OMS' | grep -i 'PSU' </blockquote>
<blockquote>
For <span class="bold">WebLogic Server</span> PSUs, enter the following
commands, where <code>WL_HOME</code> is the path of the WebLogic home: </blockquote>
<blockquote>
$ . $WL_HOME/server/bin/SetWLSEnv.sh<br />
$ java weblogic.version </blockquote>
<blockquote>
In the following example output, 10.3.4.0.1 is the installed WebLogic Server
PSU. </blockquote>
<blockquote>
WebLogic Server 10.3.4.0.1 PSU Patch for Bug11677325 Wed Feb 23 10:52:30 IST 2011<br />
WebLogic Server 10.3.4.0 Fri Dec 17 20:47:33 PST 2010 1384255</blockquote>
So that's how you find it. Is it convoluted and non-intuitive? It sure is! Oh well, that's Oracle for ya.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-59847637720102546012011-10-14T10:25:00.000-07:002012-02-03T09:21:59.723-08:00Rebuild A Standby DatabaseI don't know about you but every now and then, due to technical issues, I have to rebuild one of my standby databases. Fortunately, it is much simpler than creating a new one. I have outlined the steps for it below.<br />
<br />
<strong>NOTE</strong>: These steps assume you're using RMAN.<br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 10pt;">
<span style="font-size: large;"><span style="color: #365f91;"><span style="font-family: Cambria;"><strong>REBUILD STANDBY DATABASE<o:p></o:p></strong></span></span></span></div>
<br />
<div class="MsoListParagraph" style="margin: 0in 0in 10pt 0.5in; mso-list: l1 level1 lfo1; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">1)</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">Create a Backup Copy of the Primary Database</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">RMAN>
configure default device type to ‘DISK’;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">RMAN>
backup current controlfile for standby;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">RMAN>
backup as compressed backupset database</span></div>
<br />
<div class="MsoListParagraph" style="margin: 0in 0in 10pt 0.5in; mso-list: l1 level1 lfo1; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">2)</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">Copy the backup
($FRA/<db_name>/backupset/<date_of_backup>) to the standby
host.<span style="mso-spacerun: yes;"> </span>Make sure the pathnames are
exactly the same.</date_of_backup></db_name></span></div>
<h1 style="margin: 24pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #365f91;"><span style="font-family: Cambria;">STANDBY DATABASE<o:p></o:p></span></span></span></h1>
<br />
<div class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0pt 0.5in; mso-list: l4 level1 lfo2; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">1)</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">Start The Standby Database in nomount mode<o:p></o:p></span></div>
<br />
<div class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0pt 0.5in; mso-add-space: auto;">
<span style="font-family: Courier;">#> sqlplus
/nolog</span></div>
<div class="MsoListParagraphCxSpLast" style="margin: 0in 0in 0pt 0.5in; mso-add-space: auto;">
<span style="font-family: Courier;">SQL> connect / as
sysdba</span></div>
<div class="MsoNormal" style="margin: 0in 0in 10pt 0.5in;">
<span style="font-family: Courier;">SQL>
startup nomount</span></div>
<h1 style="margin: 24pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #365f91;"><span style="font-family: Cambria;">PRIMARY DATABASE</span></span></span></h1>
<br />
<div class="MsoListParagraph" style="margin: 0in 0in 10pt 0.5in; mso-list: l3 level1 lfo3; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">1)</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">Test your configuration:<span style="mso-spacerun: yes;"> </span>log into the standby instance as sysdba<o:p></o:p></span></div>
<br />
<div class="MsoNormal" style="margin: 0in 0in 10pt 0.5in;">
<span style="font-family: Courier;">#>
sqlplus sys@standby_location as sysdba</span></div>
<br />
<div class="MsoListParagraph" style="margin: 0in 0in 10pt 0.5in; mso-list: l3 level1 lfo3; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">2)</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">Connect to RMAN with the standby as an auxiliary<o:p></o:p></span></div>
<br />
<div class="MsoNormal" style="margin: 0in 0in 10pt 0.5in;">
<span style="font-family: Courier;">#>
rman target / auxiliary sys@standby_location nocatalog<o:p></o:p></span></div>
<br />
<div class="MsoListParagraph" style="margin: 0in 0in 10pt 0.5in; mso-list: l3 level1 lfo3; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">3)</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">Run the duplicate script:</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">run {</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;"><span style="mso-tab-count: 1;"> </span>allocate channel prmy1 type disk;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;"><span style="mso-tab-count: 1;"> </span>allocate channel prmy2 type disk;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;"><span style="mso-tab-count: 1;"> </span>allocate channel prmy3 type disk;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;"><span style="mso-tab-count: 1;"> </span>allocate channel prmy4 type disk;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;"><span style="mso-tab-count: 1;"> </span>allocate auxiliary channel stby1 type
disk;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;"><span style="mso-tab-count: 1;"> </span>allocate auxiliary channel stby2 type
disk;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;"><span style="mso-tab-count: 1;"> </span>allocate auxiliary channel stby3 type
disk;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;"><span style="mso-tab-count: 1;"> </span>allocate auxiliary channel stby4 type
disk;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;"><span style="mso-tab-count: 1;"> </span>duplicate target database for standby
nofilenamecheck;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">}<o:p></o:p></span></div>
<br />
<div class="MsoListParagraphCxSpFirst" style="margin: 0in 0in 0pt 1in; mso-add-space: auto; mso-list: l3 level2 lfo3; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">a.</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">The standby is created using the auxiliary
channels, I’m not sure if more than one primay channel would be needed.<o:p></o:p></span></div>
<br />
<div class="MsoListParagraphCxSpLast" style="margin: 0in 0in 10pt 1in; mso-add-space: auto; mso-list: l3 level2 lfo3; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">b.</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">The “nofilenamecheck” parameter make RMAN ignore
the fact that the destination paths are identical to the source paths.<span style="mso-spacerun: yes;"> </span>Do NOT do this if your standby is on the same
host!</span></div>
<h1 style="margin: 24pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #365f91;"><span style="font-family: Cambria;">STANDBY DATABASE<o:p></o:p></span></span></span></h1>
<br />
<div class="MsoListParagraph" style="margin: 0in 0in 10pt 0.5in; mso-list: l2 level1 lfo4; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">1)</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">Start the Redo Apply<o:p></o:p></span></div>
<br />
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">SQL>
alter database recover managed standby database disconnect from session;</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">SQL>
exit</span><span style="font-family: Courier;"><o:p> </o:p></span></div>
<br />
<div class="MsoListParagraph" style="margin: 0in 0in 10pt 0.5in; mso-list: l2 level1 lfo4; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">2)</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">If you are using the Data Guard Broker, go into
Grid Control and, in the Data Guard screen, click the Edit button for the
standby database.<span style="mso-spacerun: yes;"> </span>From there click the
Reset button to reset the Data Guard Broker and that should start it back up. </span></div>
<h1 style="margin: 24pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #365f91;"><span style="font-family: Cambria;">VERIFY THAT IT WORKS</span></span></span></h1>
<br />
<div class="MsoListParagraph" style="margin: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo5; text-indent: -0.25in;">
<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;"><span style="font-family: Calibri;">1)</span><span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";">
</span></span></span><span style="font-family: Calibri;">On the Primary<o:p></o:p></span></div>
<br />
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">SQL>
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;<o:p></o:p></span></div>
<br />
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">SQL>
alter system switch logfile<o:p></o:p></span></div>
<br />
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">SQL>
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;<o:p></o:p></span></div>
<br />
<div class="MsoNormal" style="margin: 0in 0in 0pt 0.5in;">
<span style="font-family: Courier;">SQL>
SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;<o:p></o:p></span></div>Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-18773648091555142152011-10-07T09:06:00.000-07:002011-10-07T09:13:50.866-07:00Grid Control Breaks DataGuard When Multiple NICs UsedWe have two separate networks in our data center. Once is used for monitoring/administration programs (like Grid Control) and the other is used for everything else. We have our database set up to use the admin network (NIC1) for Grid Control and the other network (NIC2) for DataGuard. I initially set up DataGuard manually because we were having some issues with our admin network. Once those issues were resolved, I went into Grid to enable monitoring of our failover there. That's when the trouble began. You see, instead of just hooking into the DataGuard configuration that I set up, it assumed that I was using the same network as it was (the admin network) and changed the DataGuard configuration to use that network. Well, the two servers can't communicate with each other over the admin network so, by trying to set up Grid to monitor my DataGuard setup, I broke my failover. Not cool.<br />
<br />
Here's how I fixed it:<br />
<br />
First of all, the error I was getting was: ORA-12533: TNS:Illegal Address Parameters<br />
<br />
I found the error by logging into the DataGuard Broker CLI and running a show parameters command like so (this is on the primary database server):<br />
<br />
<ul>
<li>$> dgmgrl</li>
<li>DGMGRL> connect system/[password]@[primarydb]</li>
<li>DGMGRL> show database verbose [primary db];</li>
<li>DGMGRL> show database verbose [standby db];</li>
</ul>
<div>
These commands showed me that my InitialConnectIdentifier parameter was set to the admin network. Using the information from Oracle Support Doc ID 730361.1, I did the following:</div>
<div>
<br /></div>
<div>
Disabled the DataGuard Broker:</div>
<div>
<ul>
<li>DGMGRL> disable configuration;</li>
</ul>
<div>
Set the InitialConnectIdentifier parameter to the correct setting for both databases:</div>
</div>
<div>
<ul>
<li>DGMGRL> edit database [primary db] set property InitialConnectIdentifier='[new connect string with correct hostname]';</li>
<li>DGMGRL> edit database [standby db] set property InitialConnectIdentifier='[new connect string with correct hostname]';</li>
</ul>
<div>
I verified that the local listener address was correct for both databases:</div>
</div>
<div>
<ul>
<li>DGMGRL> show database [primary db] LocalListenerAddress;</li>
<li>DGMGRL> show database [standby db] LocalListenerAddress;</li>
</ul>
<div>
I found that the LocalListenerAddress for the standby wasn't set, so I set it:</div>
</div>
<div>
<ul>
<li>DGMGRL> edit database hrprd_failover set property LocalListenerAddress='[local listener connect string]';</li>
</ul>
<div>
I then verified that all of the settings appeared correct:</div>
</div>
<div>
<ul>
<li>DGMGRL> show database verbose [primary db];</li>
<li>DGMGRL> show database verbose [standby db];</li>
</ul>
<div>
Everything looked good so I re-enabled the configuration:</div>
</div>
<div>
<ul>
<li>DGMGRL> enable configuration;</li>
</ul>
<div>
This step took a while but it finally came back enabled. I then checked the configuration the make sure everything was running well:</div>
</div>
<div>
<ul>
<li>DGMGRL> show configuration;</li>
</ul>
<div>
It showed me that the primary was up and running but that the standby database still starting up (command 'ENABLE DATABASE [standby db]' in progress). I waited a few minutes and tried again and everything came back good.</div>
</div>
<div>
<br /></div>
<div>
I then logged on to Grid Control and checked there. It was now up and running but it gave me an error that there was a inconsistent parameter setting between my data guard configuration and my standby database configuration. I ran the Verify Configuration command (under Additional Adminitration in the Data Guard screen) and it showed me that there was a value set in my standby that wasn't set in my data guard configuration and gave me the option to sync them up. I did and the error cleared up.</div>
<div>
<br /></div>
<div>
I now have everything running. Whew!</div>
Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-47547947829962122522011-09-16T12:59:00.000-07:002011-09-16T13:00:23.870-07:00Basic Commands For PostgreSQLI've recently started messing with PostgreSQL as a light-weight database and have found it quite capable. Unfortunately, since I do Oracle day in and day out, I tend to forget some of the basic commands for running it. So I thought I'd use this blog post as a reminder.<br />
<ul>
<li>Start the database: <strong>/opt/postgres/9.0/bin/pg_ctl -D [path to db] start</strong></li>
<li>Log in: <strong>psql [DB Name] [User Name]</strong></li>
<li>Exit psql shell: <strong>\q</strong></li>
</ul>
Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-35743793862615389872011-09-12T13:41:00.000-07:002011-09-12T13:41:13.601-07:00Multiple Inventories in Grid Control<br />
<div class="MsoNormal">
You need two things to enable multiple inventory collection
in Grid Control.<span> </span>First you need an
oraInst.loc file that points to the directory.<span>
</span>Second you need to update your OUIinventories.add file to show the
location of your oraInst.loc files.<span> </span>Here’s
how you do it:<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"><span>·<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Create an oraInst.loc file for each oraInventory
you want Grid to be able to see.<span> </span>You can
probably put them anywhere, but this example will put them next to the standard
oraInst.loc.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Copy /etc/oraInst.loc to /etc/oraInst.loc.db2<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Edit /etc/oraInst.loc.cfsr so that it points to
the db2 oraInventory<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Repeat for any other oraInventories you want to
add<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"><span>·<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Edit the OUIinventories.add file and add the
inventories you created.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Go to the $AGENT_HOME/sysman/config directory<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Back up the original OUIinventories.add file so
you can get back to it if you need to.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Edit the OUIinventories.add file and add the
following line:<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"><span>§<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Inventory: /etc/oraInst.loc.db2<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Add any other inventory pointers you may have
configured.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"><span>·<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Restart the Grid Control Agent.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Go to the $AGENT_HOME/bin directory.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Type the following commands:<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"><span>§<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->./emctl stop agent<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; mso-add-space: auto; mso-list: l0 level3 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"><span>§<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->./emctl start agent<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->When the agent has restarted, go to the Grid
Control home page.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Click on the Targets tab.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Click on the Hosts subtab.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Select the Host you are updating.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Click on the Configuration subtab for the Host.<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->Click on the Refresh Host Configuration button
in the top right.<o:p></o:p></div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: "Courier New"; mso-fareast-font-family: "Courier New";"><span>o<span style="font: 7.0pt "Times New Roman";">
</span></span></span><!--[endif]-->When that finishes, it should show all of the
$ORACLE_HOMEs that you have configured.<o:p></o:p></div>
Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-60592636733836543792011-08-26T10:35:00.000-07:002011-08-26T10:35:48.623-07:00Set Oracle Initialization ParametersI don't know about you but I'm always forgetting the syntax for checking and setting Oracle database initialization parameters. So, here's a quick overview:<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><u>Check Initialization Parameters</u></span><br />
<br />
For this, you use the SHOW PARAMETER command from SQL*Plus.<br />
<br />
<blockquote>SQL> show parameter processes;</blockquote><br />
This will show the values for any parameters that have the word processes in it.<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><u>Change Initialization Parameters</u></span><br />
<br />
For this, you use the ALTER SYSTEM command from SQL*Plus.<br />
<br />
<blockquote>SQL> alter system set processes=500 scope=both;</blockquote><br />
This sets the processes parameter for both in the spfile and for the currently running system (scope=both). Unfortunately, my pick (processes) is not dynamic so the command will fail. To make it work you have to run:<br />
<br />
<blockquote>SQL> alter system set processes=500 scope=spfile;</blockquote><br />
This changes the system settings but won't activate until you restart the database. If you want the change to only affect the current running instance and not persist after a restart, use scope=memory.<br />
<br />
Another addition is the comment='my comment here' if you want to track why you made the changes you did.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-91909476451798994122011-07-25T15:12:00.000-07:002011-07-25T15:12:37.670-07:00Delete Archivelogs From Standby Using RMANI thought I had set up my standby to delete its old archivelog files when it ran out of space. I was wrong and my standby ground to a halt with an ora-00270 error. While I need to research what's going on with that, I need to get my standby caught up right now as well as free up some disk space.<br />
<br />
I thought about deleting a bunch of them manually and running a crosscheck and a delete expired command in RMAN but that seems like breaking it and forcing it to fix itself. Not a good solution in my book. I tried deleting obsolete but none of the archivelogs were obsolete. So I searched around a bit and found this command:<br />
<br />
RMAN> delete archivelog until time 'sysdate-5' device type disk;<br />
<br />
This deletes all of my archivelog files older than 5 days on my local disk. Well, 1300 archivelog deletions later, I'm back in business.<br />
<br />
Now I just need to keep it from happening again...Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-7956734829383440982011-07-18T16:13:00.000-07:002011-07-18T16:18:14.916-07:00Set Up PeopleSoft Web Servers To Work With A Load BalancerUnfortunately, setting up PeopleSoft to work with a load balancer is no simple tasks. The following shows some of the steps I had to go through to get everything set up. This is assuming a very secure environment. <br />
<div> </div><strong>Network Related Tasks</strong><br />
<div> </div>First, the network needs to be set up. The following are tasks that are usually performed by the networking and/or systems groups.<br />
<div> </div><ul><li>Supply IP Addresses – Allocate appropriate IP addresses for all of the hosts keeping in mind the following:</li>
<ul><li>The Load Balancer must connect to the Web Servers</li>
<li>The Web Servers must connect to the App Servers</li>
<li>The App Servers must connect to the Database Servers</li>
<li>The Process Schedulers must connect to the Web Servers and the Load Balancer</li>
</ul><li>Assign the IP Addresses – Assign the supplied IP addresses to the actual hosts</li>
<li>Create Firewall Rules (if necessary) – Create/modify firewall rules to allow the following communications:</li>
<ul><li>Load Balancer</li>
<ul><li>Must be able to connect to Web Server Hosts on the ports the Web Servers are listening on (7001, 8001 for example).</li>
</ul><li>Web Servers</li>
<ul><li>Must be able to connect to App Server Hosts on the port the App Servers are listening on (9000 through 11000 is a good range)</li>
<li>NOTE: App Servers use a port range instead of a single port. An App Server listening on port 9000 will take incoming connections and reassign them to other ports (9001, 9002, etc.) so if a port range is not opened, your App Server will not work.</li>
</ul><li>App Servers</li>
<ul><li>Must be able to connect to Database Hosts on the ports the Databases are listening on (1521 for example).</li>
</ul><li>Process Schedulers</li>
<ul><li>Must be able to connect to the load balancer via the application’s virtual address for reporting.</li>
<li>Must be able to FTP files to the Report Repository (usually located on a web server).</li>
</ul></ul><li>Create an Application URL and Virtual IP address for the application (Networking) – Create a URL that the load balancer will reroute across all of the actual web servers. Create a Virtual IP address that maps to the URL.</li>
<ul><li>Add the Application URL to DNS (Systems) – Add the Application URL to the DNS servers so the URL resolves to the Virtual IP address.</li>
</ul><li>Create a Reporting URL and Virtual IP address for the application report repository (Networking) – Create a URL that the load balancer will route to the ONE actual web server (since the reports are all stored on one server, the report repository URL MUST point to that one server). Create a Virtual IP address that maps to the URL.</li>
<ul><li>Add the Reporting URL to DNS (Systems) – Add the Reporting URL to the DNS servers so the URL resolves to the Virtual IP address.</li>
</ul></ul><div> <strong>Application Related Tasks</strong></div><div> </div>Once the network is set up, the application needs to be correctly configured. The following tasks are performed by the DBA Group.<br />
<div> </div><ul><li>Install Web Servers – Install the Web Servers on the Web Servers Hosts</li>
<ul><li>During the install, make sure the authentication domain is set (it will show up as an optional step). It should be set to the domain of the Load Balancer URL. For example, if the load balancer URL was app.mydomain.com, the authentication domain would be mydomain.com.</li>
<li>NOTE: If it is not set up during install, it can be updated in the weblogic.xml file in the $WEB_SERVER_HOME/applications/peoplesoft/PORTAL.war/WEB-INF directory. The parameter name is “CookieDomain” and the domain needs to start with a dot (.mydomain.com for example).</li>
</ul><li>Set the keep-alive page – The load balancer pings a page called keepalive.html every few seconds to verify that the Web Server is up and accepting connections.</li>
<ul><li>The keepalive.html file should be in the $WEB_SERVER_HOME/applications/peoplesoft/PORTAL.war directory on every web server.</li>
<li>Example html text: <pre><b>Hello</b></pre><br />
</li>
</ul><li>Make sure the session cookies all have the same name. If they have different names, the application will get confused since it is treating all of the web servers like a single web server.</li>
<ul><li>The cookie name is set in the weblogic.xml file in the $WEB_SERVER_HOME/applications/peoplesoft/PORTAL.war/WEB-INF directory.</li>
<li>The parameter name is “CookieName”, the parameter value must be set identical on all web servers (for example, set them all to PSJSESSIONID).</li>
</ul><li>Set up the Web Profiles – Set up two web profiles in the PeopleSoft application. One for the application and one for the report repository.</li>
<ul><li>Make the web profile a copy of the PROD web profile.</li>
<li>In the “General” tab, set the authentication domain (again) to the application domain (for example, .mydomain.com).</li>
<li>In the “Security” tab, check the “Secured Access Only” box in the “SSL” section.</li>
<li>In the “Virtual Addressing” tab, put the Application URL (for the application web profile) or the Reporting URL (for the reporting web profile) in the “Default Addressing” section.</li>
<ul><li>Protocol: https</li>
<li>Name: URL Name (for example, app.mydomain.com)</li>
<li>Port: 443</li>
</ul></ul></ul>Following these instructions should get you up and running with your web servers behind a load balancer.<br />
<div> </div>Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-43706049220595533812011-06-30T16:02:00.000-07:002011-06-30T16:10:55.701-07:00Running VERSION AE in PeopleSoftI just ran VERSION on my PeopleSoft instance and, due to me not following all of the instructions, it didn't work. It took a few minutes to find my mistake and when I did, I felt a bit silly. So, for all you out there who are curious, here's what I did:<br />
<br />
<ul><li>Shut down the app servers and the process schedulers. You should shut down the web servers as well but we share our web servers with other environments so that wasn't an option. We'll see if that bites me later.</li>
<li>Make sure all sessions of App Designer are shut down. I have a nifty tool that shows me the contents of v$session (for Oracle databases) so I can verify that there are no connections.</li>
<li>Set the PS_SERVER_CFG environment variable. This is the part I forgot. You set it to the psprcs.cfg file for your process scheduler.</li>
<li>Run the command:</li>
<ul><li>$PS_HOME/bin/psae -CD <database name> -CT <database type> -CO <oprid> -CP <oprid password> -R <run control (must be a valid run control)> -AI VERSION</li>
</ul><li>Check the database to make sure it worked:</li>
<ul><li>SQL> select * from psversion;</li>
<li>All versions should be 1.</li>
</ul><li>Clear you caches for the app servers and process schedulers.</li>
<li>Start your app servers and process schedulers back up.</li>
</ul><div>It's really pretty straightforward but if you forget a step, you're asking for trouble.<br />
<br />
For more detailed instructions, try <a href="http://peoplesoft.ittoolbox.com/groups/technical-functional/peopletools-l/version-application-engine-program-750136">ITToolBox</a> and <a href="http://peoplesoft-admin.rakeshparwal.com/2008/01/how-and-when-to-run-version-application.html">Rakish Parwal's Blog</a>.</div>Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-74611686961604483512011-06-27T14:06:00.000-07:002011-06-27T14:06:47.518-07:00WebLogic Patching Just Got HarderThe WebLogic patching process was pretty good. I could just pull up the patching tool, put in my credentials, pull the patches I needed and install them. Simple, fast, efficient. I was really happy with it. Unfortunately Oracle decided to wreck it.<br />
<br />
I was running a new install of WebLogic for Grid Control and, as part of the install, I need to apply a couple of patches. No problem. I pull up SmartUpdate (the patching tool) and it tells me it's installing a new version. Once finished, it has me restart it and I'm off to download my new patches. Only, there's no "find patches" functionality anywhere. What happened? I can't download patches, I can't even enter my credentials; it's like I've been cut off.<br />
<br />
So I search through "My Oracle Support" and find that, as of June 10, 2011, Oracle is discontinuing automatic patch downloading. Now you must manually download your patches, put them in you patch cache directory, and then use SmartUpdate to install them. Great, so now patching is a complex, slow, inefficient mess.<br />
<br />
Thanks Oracle.<br />
<br />
PS - The official announcement can be found on My Oracle Support. Look for Document ID 1294294.1Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-2058181385488436642011-06-24T16:55:00.000-07:002011-06-24T16:55:00.296-07:00Restore Database from RMAN Backup<div style="border-bottom: solid #4F81BD 1.0pt; border: none; mso-border-bottom-themecolor: accent1; mso-element: para-border-div; padding: 0in 0in 4.0pt 0in;">The following outlines the steps for restoring an RMAN backup to a different server. In this exercise, the database restored is an exact duplicate of the one backed up (just on a different host). This validates that a full restore can be done with the current backups.</div><div class="MsoNormal"><o:p></o:p></div><div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">1.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Create the paths for all of the database files on the target host. This gives RMAN the locations that it needs to restore to.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">2.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Copy the source pfile to $ORACLE_HOME/dbs on the target host.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">3.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Record the source database DBID. This allows RMAN to recognize which backup to restore.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">4.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Record the SCN for the backup you’re restoring (it makes things much easier).<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">5.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Copy the backup to the same location on the target host.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">6.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Set the Oracle SID:<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">a.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>#> export ORACLE_SID=<sid></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">7.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Start RMAN<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">a.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>#> rman target / nocatalog<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">b.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>IMPORTANT: The restore cannot be used in conjunction with an RMAN catalog because the DBIDs will be identical and that will corrupt the data in the catalog.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">8.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Set the DBID<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">a.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>RMAN> set dbid = 464514217;<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">9.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Start the instance in nomount mode.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">a.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Startup force nomount pfile=’?/dbs/init<db name="">.ora’;<o:p></o:p></db></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">b.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>The “?” in the path name specifies the $ORACLE_HOME<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">10.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Restore the control file. This will tell the database where to put all of its files.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">a.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>RMAN> restore controlfile from autobackup;<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">11.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Mount the database.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">a.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>RMAN> alter database mount;<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">12.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Restore the database files to the host.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">a.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>RMAN> restore database;<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">13.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Use the restored files and recover the database.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">a.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>RMAN> recover database until scn <scn number="">;<o:p></o:p></scn></div><div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">b.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>If you don’t know the scn number, the recover command may try to apply redo logs to catch the database up. If you don’t have those redo logs, you won’t be able to recover your database.<o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -.25in;">14.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Open up the database.<o:p></o:p></div><div class="MsoListParagraphCxSpLast" style="margin-left: 1.0in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;">a.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>SQL> alter database open resetlogs;</div>Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-68252982839926836902011-06-23T16:54:00.000-07:002011-10-14T10:17:44.338-07:00Create a Standby Database Using DataGuard and RMAN on Oracle 10gCreating a standby database manually (without using Grid Control) can be a daunting task. However, sometimes it's the best way to do things. Here's how I have been able to manually set up a standby database using DataGuard but NOT DataGuard Broker.<br />
<br />
<div style="border: currentColor; mso-border-bottom-themecolor: accent1; mso-element: para-border-div; padding: 0in 0in 4pt;">
<span class="Apple-style-span" style="font-size: large; font-weight: bold;">PRIMARY DATABASE</span></div>
<div class="MsoListParagraphCxSpFirst" style="mso-list: l1 level1 lfo1; text-indent: -0.25in;">
1)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Enable Forced Logging - alter database force logging;<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l1 level1 lfo1; text-indent: -0.25in;">
2)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Create a Password File - orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=<sys password=""> entries=5<o:p></o:p></sys></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l1 level1 lfo1; text-indent: -0.25in;">
3)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Set Primary Database Initialization Parameters<o:p></o:p></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;"># DataGuard Parameters<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.remote_login_passwordfile=EXCLUSIVE<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.db_unique_name=<name of primary database></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.log_archive_config='DG_CONFIG=(<primary db_unique_name>,<standby db_unique_name>)'</span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.log_archive_dest_2='SERVICE=<standby tnsnames.ora entry> ARCH ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=<standby db_unique_name>'</span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.log_archive_dest_state_1=ENABLE<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.log_archive_dest_state_2=ENABLE<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.log_archive_format='T%TS%SR%R.ARC'<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;"># if the Primary becomes the standby<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.fal_server=<standby db_unique_name></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.fal_client=<primary db_unique_name></span></div>
<div class="MsoListParagraphCxSpMiddle">
<span style="font-family: Courier;">*.standby_file_management=auto<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpMiddle">
<br /></div>
<div class="MsoListParagraphCxSpLast" style="mso-list: l1 level1 lfo1; text-indent: -0.25in;">
4)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Add a standby database entry in tnsnames.ora so oracle will know where to ship the logs to<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"><standby name>.DIST.MARICOPA.EDU =</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (DESCRIPTION =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (ADDRESS_LIST =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (ADDRESS = (PROTOCOL = TCP)(HOST = <standby host name>)(PORT = <standby port>))</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> )<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (CONNECT_DATA =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (SERVER = DEDICATED)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (SERVICE_NAME = <standby db_unique_name>.<db_domain>) </span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> )<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> )<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoListParagraph" style="mso-list: l1 level1 lfo1; text-indent: -0.25in;">
5)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Enable Archiving<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> SHUTDOWN IMMEDIATE;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> STARTUP MOUNT;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> ALTER DATABASE ARCHIVELOG;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> ALTER DATABASE OPEN;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoListParagraph" style="mso-list: l1 level1 lfo1; text-indent: -0.25in;">
6)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Create a Backup Copy of the Primary Database<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">RMAN> backup current controlfile for standby;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">RMAN> backup as compressed backupset database;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoListParagraph" style="mso-list: l1 level1 lfo1; text-indent: -0.25in;">
7)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Copy the backup to the standby host. Make sure the pathnames are exactly the same.<o:p></o:p></div>
<h1>
<span class="Apple-style-span" style="font-size: large;">STANDBY DATABASE</span></h1>
<div class="MsoListParagraph" style="mso-list: l4 level1 lfo2; text-indent: -0.25in;">
1)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Set Standby Database Initialization Parameters by copying the Primary Database init.ora file and modifying the following:<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"># DataGuard Parameters<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.remote_login_passwordfile=EXCLUSIVE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.db_unique_name=<unique name for the standby database - MUST be different from the name of the primary></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.log_archive_config='DG_CONFIG=(<primary db_unique_name>,<standby db_unique_name>)'</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST'<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.log_archive_dest_2='SERVICE=<primary tnsnames.ora entry> ARCH ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=<primary db_unique_name>'</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.log_archive_dest_state_1=ENABLE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.log_archive_dest_state_2=ENABLE<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.log_archive_format='T%TS%SR%R.ARC'<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.fal_server=<primary db_unique_name></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.fal_client=<standby db_unique_name></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">*.standby_file_management=auto<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoListParagraphCxSpFirst" style="mso-list: l4 level1 lfo2; text-indent: -0.25in;">
2)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Create a Password File - orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=<sys password> entries=5</div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 1in; mso-add-space: auto; mso-list: l4 level2 lfo2; text-indent: -0.25in;">
a.<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>NOTE: docs say to copy password file from primary and rename it - I just created one from scratch<o:p></o:p></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoListParagraph" style="mso-list: l4 level1 lfo2; text-indent: -0.25in;">
3)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Set Up The Listener<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SID_LIST_LISTENER =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (SID_LIST =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (SID_DESC =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (GLOBAL_DBNAME = <db_unique_name>.<db_domain>) </span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (ORACLE_HOME = /u01/app/oraclex/product/10.2.0/db_1)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (SID_NAME = <instance_name> ) <i style="mso-bidi-font-style: normal;"># this is usually the same as the SID but not always<o:p></o:p></i></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> )<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> )<o:p></o:p></span></div>
<div class="MsoListParagraph" style="mso-list: l4 level1 lfo2; text-indent: -0.25in;">
4)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Make sure tnsnames points to the primary database<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">PRIMARY.DIST.MARICOPA.EDU =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (DESCRIPTION =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (ADDRESS_LIST =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (ADDRESS = (PROTOCOL = TCP)(HOST = <primary host name>)(PORT = <primary port>))</span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> )<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (CONNECT_DATA =<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (SERVER = DEDICATED)<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> (SERVICE_NAME = <db_unique_name>.<db_domain>) </span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> )<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> )<o:p></o:p></span></div>
<div class="MsoListParagraph" style="mso-list: l4 level1 lfo2; text-indent: -0.25in;">
5)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Create a Server Parameter File for the Standby<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">#> sqlplus /nolog<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> connect / as sysdba<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> create spfile from pfile='init<db sid>.ora'<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<br /></div>
<div class="MsoListParagraph" style="mso-list: l4 level1 lfo2; text-indent: -0.25in;">
6)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Start The Standby Database in nomount mode<o:p></o:p></div>
<div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Courier;">SQL> startup nomount<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<h1>
<span class="Apple-style-span" style="font-size: large;">PRIMARY DATABASE</span></h1>
<div class="MsoListParagraph" style="mso-list: l3 level1 lfo3; text-indent: -0.25in;">
1)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Test your configuration: log into the standby instance as sysdba<o:p></o:p></div>
<div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Courier;">#> sqlplus sys@<standby db> as sysdba</span></div>
<div class="MsoListParagraph" style="mso-list: l3 level1 lfo3; text-indent: -0.25in;">
2)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Connect to RMAN with the standby as an auxiliary<o:p></o:p></div>
<div class="MsoNormal" style="margin-left: 0.5in;">
<span style="font-family: Courier;">#> rman target / auxiliary sys@standby_location nocatalog<o:p></o:p></span></div>
<div class="MsoListParagraph" style="mso-list: l3 level1 lfo3; text-indent: -0.25in;">
3)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Run the duplicate script:<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">run {<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> allocate channel prmy1 type disk;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> allocate channel prmy2 type disk;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> allocate channel prmy3 type disk;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> allocate channel prmy4 type disk;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> allocate auxiliary channel stby1 type disk;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> allocate auxiliary channel stby2 type disk;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> allocate auxiliary channel stby3 type disk;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> allocate auxiliary channel stby4 type disk;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;"> duplicate target database for standby nofilenamecheck;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">}<o:p></o:p></span></div>
<div class="MsoListParagraphCxSpFirst" style="margin-left: 1in; mso-add-space: auto; mso-list: l3 level2 lfo3; text-indent: -0.25in;">
a.<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>The standby is created using the auxiliary channels, I’m not sure if more than one primay channel would be needed.<o:p></o:p></div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 1in; mso-add-space: auto; mso-list: l3 level2 lfo3; text-indent: -0.25in;">
b.<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>The “nofilenamecheck” parameter make RMAN ignore the fact that the destination paths are identical to the source paths. Do NOT do this if your standby is on the same host!<o:p></o:p></div>
<h1>
<span class="Apple-style-span" style="font-size: large;">STANDBY DATABASE</span></h1>
<div class="MsoListParagraph" style="mso-list: l2 level1 lfo4; text-indent: -0.25in;">
1)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>Start the Redo Apply<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> alter database recover managed standby database disconnect from session;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> exit<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>
<h1>
<span class="Apple-style-span" style="font-size: large;">VERIFY THAT IT WORKS</span></h1>
<div class="MsoListParagraph" style="mso-list: l0 level1 lfo5; text-indent: -0.25in;">
1)<span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal "Times New Roman";"> </span>On the Primary<o:p></o:p></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> alter system switch logfile<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;<o:p></o:p></span></div>
<div class="MsoNormal" style="margin: 0in 0in 0in 0.5in;">
<span style="font-family: Courier;">SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;<o:p></o:p></span></div>
<div class="MsoNormal">
<br /></div>Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-44709755993140171072011-02-28T13:14:00.000-08:002011-02-28T13:14:06.298-08:00Change SYSMAN Password on GridI had forgotten my SYSMAN password on an old test Grid installation and so I needed to change it. I tried to follow the standard instructions (change it in database and then in emoms.properties) but ran into a snag - there are no password entries in my emoms.properties file. Of course I had already changed the password in the database so I couldn't back out. A frantic search ensued and I found the answer. Here is how you do it:<br />
<br />
<ul><li>Stop Grid (emctl stop oms)</li>
<li>Change the password in the database (alter user sysman identified by newpassword)</li>
<li>Change the password for grid (emctl config oms -change_repos_pwd)</li>
<ul><li>enter the new password when prompted</li>
</ul><li>Start Grid (emctl start oms)</li>
</ul>Wow! That's way easier than modifying the emoms.properties file. I just wish it was easier to find.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0tag:blogger.com,1999:blog-4894339620802180401.post-90940183483478394202010-09-30T10:10:00.000-07:002010-09-30T10:10:09.121-07:00Using OPatch to Check for ConflictsOPatch is an amazingly verstile tool. Among its many functions is the ability to check for conflicts or any other issues that may spoil your patching fun.<br />
<br />
To use this functionality on a CPU patch (for example), simply do the following:<br />
<ul><li>Navigate to the directory where the CPU is located</li>
<li>Move the README file (README.txt or README.html) out of the directory as it could cause the check to fail.</li>
<li>Run the following command: <i>opatch prereq CheckConflictAgainstOH -phBaseDir .</i></li>
<li>Check the output for conflicts</li>
</ul>Be aware that the check will "fail" if there are unnecessary patches and/or patches that will be rolled back. These are actually issues so you need to look for actual conflicts that would prevent the CPU from installing.Jeffhttp://www.blogger.com/profile/15836232396757605708noreply@blogger.com0