2013年7月29日 星期一

Oracle 11g-Transport Tablespace


事實上Transport Tablespace根本就是expdp 與 impdp 的方法之一,差別在實際的data仍放在datafile中,試想如果我要匯出的tablespace中的其中一個table有1百萬筆資料時,你覺得是expdpd含資料快還是直接複製datafile快??


Transport Tablespace的注意事項
Oracle8/8i=>兩個database必須有相同oracle版本,OS平台,block size,characterset
Oracle9i=>兩個database必須有相同oracle版本,OS平台,characterset.block size可以不相同
                  (可以有1個standard block,4個non-standard block同時存在)
Oracle10g/11g=>兩個database必須有相同oracle版本,characterset.block size與os平台可以不相同

如果你了解了,請參閱下方步驟...




2013年7月26日 星期五

Oracle 11g-手動 Duplicate database (異機使用RMAN備份檔)

說起來本章算是半人工狀態進行 Duplicate 資料庫到其他台,為什說是半人工狀態呢?
因為整個過程人工的部分都在做環境設定,直到最後仍需要RAMN所產生的備份檔進行還原
接下來我會先模擬一個情境狀態接下來在一步一步說明該如何操作!!

情境:


A同事說: 我需要一個平台測試我的SQL或是內容...但我不想搞壞現有的DB
B同事說: 我需要安裝一個Patch但我也不想搞壞現有的DB
C同事說: 我想要練習一下DB管理,但我也能搞壞現有的DB
老闆說: 我希望公司就算沒有錢做Cluster的機器.....但還是希望這台壞掉以後能有一台加減頂一
               下.....不管怎樣你自己想個辦法解決一下


所以說....用手上現有空閒的硬體複製一個一模一樣的DB就可以暫時解決這個問題
Duplicate database時最好兩邊的版本都是一樣的比較不會有問題

來吧~ 看看怎樣進行下一步



Oracle 11g-安裝Oracle database software


如果你還沒安裝  Grid Infrastructure 的話請參閱延伸閱讀
[Oracle 11g-安裝Grid Infrastructure ]

接下來我們要來正式的跨出Oracle DB 的第一步,安裝Oracle database software
請跟著我一起做吧~



2013年7月25日 星期四

Oracle 11g-使用dbca 建立個樣版資料庫

Oracle 11g-使用dbca 建立個樣版資料庫


事實上,使用樣版來複製資料庫真的是一個很好用的方法,有時候要測試一些有的沒的,又不想搞壞原本的DB時,那就來創建幾個DB吧....


Oracle 11g-使用樣版資料庫建立新的資料庫

Oracle 11g-使用樣版資料庫建立新的資料庫

俗話說的好有進就有出,做了樣版資料庫不拿出來做幾個測試用的怎可以呢???
就讓我們開始建立資料庫吧

如果您還不知道怎樣做樣版資料庫請參閱 :[Oracle 11g-使用dbca 建立個樣版資料庫]



Oracle 11g-使用EM(Enterprise Manager) 進行Clone Database

Oracle 11g-使用EM(Enterprise Manager) 進行Clone Database
這真的是個神兵利器...圖形介面改善了以往都只能靠command line運作的不方便
有了這個你可以混合使用你一定會覺得很開心的

來吧 讓我們來用EM Clone Database




Oracle 11g-安裝Grid Infrastructure

終於來到安裝Grid Infrastructure ,事實上我在這裡吃了不少閉門羹,原因都是因為ASM DISK
不管如何....Grid Infrastructure 是10g開始就提供的功能,請大家跟著我一起安裝起來吧

Grid Infrastructure 軟體可由Oracle 官方網站下載: Free

安裝條件: 請務必在OS command 下將ASM DISK準備好如果還沒準備好的話請參閱
  [Oracle-建立ASM DISK] 一文

安裝步驟如下:


Oracle 11g-建立ASM DISK

如果你才剛安裝好Linux的話,也還沒安裝Grid Infrastructure 跟 database software的話
 ASMDISK配置是你絕對不能錯過的~


2013年7月24日 星期三

Oracle 11g-遇到ORA-03113: end-of-file on communication channel

我的這台VM OS 中一共有 2個Instance 2個DB(orcl 與 orcl2) ,orcl2 是用來放RMAN catalog用的
今天想說把它開起來讓orcl連過去做一下備份,但是一直連不過去都會出現錯誤


[oracle@oracledb admin]$ rman target / catalog vpc1/oracle@192.168.56.2:1521/orcl2
Recovery Manager: Release 11.2.0.1.0 - Production on Wed Jul 24 22:32:59 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: ORCL (DBID=1346113250)
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04004: error from recovery catalog database: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor


一開始以為是Listener的問題,檢查了一下也沒啥異狀,接著去看了一下orcl2順便重啟了一下DB結果出現一個錯誤

[oracle@oracledb /]$ sqlplus "/as sysdba"
SQL*Plus: Release 11.2.0.1.0 Production on Wed Jul 24 22:48:58 2013
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
Connected to an idle instance.

SQL> startup
ORACLE instance started.
Total System Global Area  523108352 bytes
Fixed Size    1337632 bytes
Variable Size  423626464 bytes
Database Buffers   92274688 bytes
Redo Buffers    5869568 bytes
Database mounted.
ORA-03113: end-of-file on communication channel
Process ID: 16039
Session ID: 136 Serial number: 5


看了一下alert log 出現錯誤的原因是

(事實上整個內容還蠻多的我就只貼最後一段就好)

Errors in file /u01/app/oracle/diag/rdbms/orcl2/orcl2/trace/orcl2_ora_17012.trc:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 48234496 bytes disk space from 4039114752 limit
ARCH: Error 19809 Creating archive log file to '+FRA'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance orcl2 - Archival Error
ORA-16038: log 2 sequence# 89 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: '+DATA/orcl2/onlinelog/group_2.273.818334511'
ORA-00312: online log 2 thread 1: '+FRA/orcl2/onlinelog/group_2.263.818334523'
Errors in file /u01/app/oracle/diag/rdbms/orcl2/orcl2/trace/orcl2_arc2_17066.trc:
ORA-16038: log 2 sequence# 89 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: '+DATA/orcl2/onlinelog/group_2.273.818334511'
ORA-00312: online log 2 thread 1: '+FRA/orcl2/onlinelog/group_2.263.818334523'
Errors in file /u01/app/oracle/diag/rdbms/orcl2/orcl2/trace/orcl2_ora_17012.trc:
ORA-16038: log 1 sequence# 88 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 1 thread 1: '+DATA/orcl2/onlinelog/group_1.272.818334495'
ORA-00312: online log 1 thread 1: '+FRA/orcl2/onlinelog/group_1.262.818334505'
USER (ospid: 17012): terminating the instance due to error 16038

Instance terminated by USER, pid = 17012




看起來應該是logfile sequence#88  89沒辦法 archived的關係,所以DB在recover的時候出現意外導致DB開不起來

    GROUP# STATUS  TYPE    MEMBER  IS_
---------- ------- ------- ---------------------------------------------------------------------- ---
3   ONLINE  +DATA/orcl2/onlinelog/group_3.274.818334529  NO
3   ONLINE  +FRA/orcl2/onlinelog/group_3.264.818334539  YES
2   ONLINE  +DATA/orcl2/onlinelog/group_2.273.818334511  NO
2   ONLINE  +FRA/orcl2/onlinelog/group_2.263.818334523  YES
1   ONLINE  +DATA/orcl2/onlinelog/group_1.272.818334495  NO

1   ONLINE  +FRA/orcl2/onlinelog/group_1.262.818334505  YES


    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE  MEMBERS ARC STATUS       FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
1    1      91   52428800   512 2 NO  CURRENT     3217365 24-JUL-13 2.8147E+14
2    1      89   52428800   512 2 NO  INACTIVE     3170929 21-JUL-13    3187976 21-JUL-13
3    1      90   52428800   512 2 YES INACTIVE     3187976 21-JUL-13    3217365 24-JUL-13



查了一下解決方法,找出比較可能的方式所以我執行了clear unarchived logfile 事著看看能不能修復,運氣不錯....只清除了group1就好了!!


SQL> ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 1;

Database altered.

SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
startORACLE instance shut down.
     
SQL> startup
ORACLE instance started.

Total System Global Area  523108352 bytes
Fixed Size    1337632 bytes
Variable Size  423626464 bytes
Database Buffers   92274688 bytes
Redo Buffers    5869568 bytes
Database mounted.
Database opened.

SQL>


會發生這個問題我猜有可能是我的手殘因為不想要天天都開機等很久所以我有時候會用休眠的方式,沒想到用了這麼久都沒事今天卻.......所以趕快紀錄一下




**** 如果您也喜歡本篇內容的話,請幫忙點選一下下方的廣告,做為對小弟的鼓勵****

****當然如果我的內容不好也請您給予寶貴建議以做為檢討的基礎****


Oracle 11g-安裝Oracle 用Linux OS 及設定


每個人總是有第一次的,我記得我在學Oracle的時候光是安裝這作業系統就不知道重裝了幾次
裝到我都快哭了!  趕快來看看怎麼裝吧~~~

2013年7月23日 星期二

Oracle 11g-複製資料庫的方法-前導

今天要研究的是如何複製一個資料庫,通常會用到這種複製資料庫的情境不外乎是要建立第2套Instance或是資料庫,而建立第2套Instance 或是資料庫的話原因就有很多種了,我想最主要的原因之一應該可以歸納成 為了驗證或測試而產生的假PROD 資料庫,很多時候公司的DB有點異常為了排除問題但又不想要把PROD搞掛,所以複製資料庫是一個蠻常見的問題



在這裡介紹幾種方式,並讓你知道如何操作

方法1:  使用dbca 建立一個全新的資料庫  
優點: 簡單、容易操作,人生的第一個database就是從這邊出現的
缺點: 從無到有所有設定都要重來
適用對象: 同機/異機


方法2:  使用dbca 產生一個樣版,並透過樣版進行資料庫建置
優點: 簡單、容易操作    使用來源:使用現有樣版進行無限制產生資料庫,另外樣版可以只產生結
         構或是結構+資料
缺點: 必須先有樣版才可以進行
適用對象: 同機/異機


方法3:  使用EM進行Clone 
優點: 簡單、容易操作    使用來源: RMAN 下的backup file 或現有的database
缺點: 需要使用RMAN進行現有資料庫備份,如果想要產生大量的instance跟資料庫
適用對象: 同機

方法4:手動產生
優點: 很適合異機還原

缺點: 時間要夠多,所有檔案都必須要對應
適用對象: 同機 (路徑相同的話直接還原就好) /異機(路徑不相同的話必須要把controlfile的資訊都改過,DBID也要修改)


當然我想在其他達人的眼中複製資料庫搞不好還有其他方法,這只是我想的到的幾種方法提供參考。接下來我會把相關的操作方式PO在下面



方法1:  使用dbca 建立一個全新的資料庫   
             操作方式同[Oracle-使用樣版資料庫建立新的資料庫] 僅Step 3 選項不太一樣

方法2:  使用dbca 產生一個樣版,並透過樣版進行資料庫建置 
   [Oracle 11g-使用dbca 建立個樣版資料庫]  >   [Oracle-使用樣版資料庫建立新的資料庫]


方法3:  使用EM進行Clone


方法4: 手動 Duplicate Database   (努力中)



**** 如果您也喜歡本篇內容的話,請幫忙點選一下下方的廣告,做為對小弟的鼓勵****

****當然如果我的內容不好也請您給予建議以做為檢討的基礎****

 

2013年7月19日 星期五

Oracle-如何重新安裝Oracle 11g EM


最近有些練習需要開啟Oracle 11g的EM (Enterprise manager)來搭配command line , 所以懶的開開關關 ,所以都用休眠的方式比較快點

最近發現EM怪怪的,首頁的統計圖表都不見看了一下EM 說 agent有點問題,但我也沒特別去理它想說其他功能能使用就好了

今天早上,EM升天了....瀏覽器都開不起來,我想說可能是太久沒重開機的關係 (但事實上無用仍然開不起來) ,啟動都會failed掉,事實上就算去看了它提供給我的路徑下我也不知道要看哪些log .....太多且不知道哪個才是真的有幫助的(如果哪位前被知道的話請指點一下)

以下就是我每次啟動都會一直異常的樣子:

[oracle@oracledb install]$ emctl stop dbconsole
Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0 
Copyright (c) 1996, 2009 Oracle Corporation.  All rights reserved.
https://oracledb:5500/em/console/aboutApplication
Stopping Oracle Enterprise Manager 11g Database Control ... 
 ...  Stopped. 
[oracle@oracledb install]$ emctl start dbconsole
Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0 
Copyright (c) 1996, 2009 Oracle Corporation.  All rights reserved.
https://oracledb:5500/em/console/aboutApplication
Starting Oracle Enterprise Manager 11g Database Control ............................................................................................. failed. 
------------------------------------------------------------------
Logs are generated in directory /u01/app/oracle/product/11.2.0/dbhome_1/oracledb_orcl2/sysman/log 
[oracle@oracledb install]$ 



網路上找了一些方法,但似乎沒甚麼幫助.....
最後只想到要不如重裝EM好了但網上也有一堆五花八門的重裝方式,試了幾個都失敗
最後整合了一下用最簡單的方式來移除及重裝

1.首先先停掉你的EM   SQL> emctl stop dbconsole
2.重置密碼  SQL> alter user sys identified by xxx;   <<(事實上可以不用做這步驟,除非你也忘了密碼)

3.卸載EM 資料庫 > 建立 > 設定

emca -repos drop
emca -repos create
emca -config dbcontrol db

執行以上命令,先卸載EM,並重新安裝。

以下是執行過程

(3-1 )

SQL> emca -repos drop


輸入以下資訊:
資料庫 SID: (請輸入你自己的SID別跟著我呀)
監聽程式埠號: 1521
SYS 用戶的密碼: (請輸入你自己的密碼別跟著我呀)
SYSMAN 用戶的密碼 (請輸入你自己的密碼別跟著我呀)
是否繼續? [yes(Y)/no(N)]: Y

接著要等一小段時間他會卸載掉........

SQL>emca -repos create 

資料庫 SID: (請輸入你自己的SID別跟著我呀)
監聽程式埠號: 1521
SYS 用戶的密碼: (請輸入你自己的密碼別跟著我呀)
SYSMAN 用戶的密碼 (請輸入你自己的密碼別跟著我呀)
是否繼續? [yes(Y)/no(N)]: Y

(基本上整個過程輸入的都差不多)

3-3  emca -config dbcontrol db

SQL>emca -config dbcontrol db


Database SID: orcl2
Database Control is already configured for the database orcl2
You have chosen to configure Database Control for managing the database orcl2
This will remove the existing configuration and the default settings and perform a fresh configuration
Do you wish to continue? [yes(Y)/no(N)]: Y
Listener port number: 1521
Listener ORACLE_HOME [ /u01/app/oracle/product/11.2.0/grid ]: 
Password for SYS user:  
Password for DBSNMP user:  
Password for SYSMAN user:  
Email address for notifications (optional): 
Outgoing Mail (SMTP) server for notifications (optional): 
-----------------------------------------------------------------

You have specified the following settings

Database ORACLE_HOME ................ /u01/app/oracle/product/11.2.0/dbhome_1

Local hostname ................ oracledb
Listener ORACLE_HOME ................ /u01/app/oracle/product/11.2.0/grid
Listener port number ................ 1521
Database SID ................ orcl2
Email address for notifications ............... 
Outgoing Mail (SMTP) server for notifications ............... 


網路上的朋友說,通常EM會掛掉有幾種可能原因:  

1. 更改網路
2.更改電腦名稱
3.更改IP

但我一樣也沒遇到就掛掉了.....Orz  請大家參考參考吧





2013年7月15日 星期一

Oracle-意外搞砸SPFILE內容的Ccontrolfile路徑事件

一開始打要更改parameter中的 tape_asynch_io參數但是每次我只要一改就會一直出錯說找不倒spfile 


SQL> show parameter spfile

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
spfile


2.想說SPFILE應該是有甚麼問題好加在數天之前曾經匯出過PFILE所以用了上次備份出來的pfile直接匯回spfile

SQL> create spfile form pfile  (預設位置為 /home/oracle) 或是使用
SQL> create spfile form pfile='檔案路徑'

3.關閉instance在重啟

SQL> shutdown immediate;
SQL> startup       
ORACLE instance started.

Total System Global Area  523108352 bytes
Fixed Size      1337632 bytes
Variable Size    427820768 bytes
Database Buffers    88080384 bytes
Redo Buffers      5869568 bytes
ORA-00205: error in identifying control file, check alert log for more info


3.看起來好想是開起來了但是居然出現ORA-00205 Control file的異常錯誤
(但蠻怪的這樣系統開的起來???)


4.不管怎樣先檢查了一下Spfile有額內容

SQL> show parameter spfile

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
spfile         string  /u01/app/oracle/product/11.2.0 /dbhome_1/dbs/spfileorcl.ora <<這次有東西了


5.順便檢查了一下Controlfile也有內容但是我想了一下這個匯入的PFILE應該是上次做Controlfile遺失練習的時候恢復了不一樣的Controlfile (不同時間的controlfile 也做過resetlogs)
所以跟之前匯出的pfile controlfile檔名不太一樣

   
SQL> show parameter control

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
control_files        string  +DATA/orcl/controlfile/current.310.819326913,                        
                                   +FRA/orcl/controlfile/current.256.818332519


6.本想用AutoBACKUP直接還原最新的Controlfile 與Spfile結果好巧不巧在今天一早我就把所有備份殺光光了.....Orz (這故事告訴我們沒事不要把所有備份檔都殺光)


7.直接先去找實體檔案在哪,知道路徑後用手動的方式先去修改PFILE正確的Controlfile路徑與檔名 (共計兩個一個在+DATA 一個在+FRA)


8.開啟instance到nomount下,執行

SQL> alter system set control_files = '+DATA/orcl/controlfile/current.332.820661737','+FRA/orcl/controlfile/current.449.820661741' scope=spfile;

System altered.

9.Shutdown and restartup 後修復完成

SQL> shutdown immediate;

SQL> startup ;

ORACLE instance started.

Total System Global Area  523108352 bytes
Fixed Size      1337632 bytes
Variable Size    427820768 bytes
Database Buffers    88080384 bytes
Redo Buffers      5869568 bytes
Database mounted.
Database opened.



孩子~ 沒事的話記得留一份最新的Controlfile /SPFILE /還有datafile  !!!




============================================================
SPFILE的匯出與匯入

做create pfile from spfile=' spfile 檔名';
做create spfile from pfile='  pfile 檔名';