環境:

EBS : R12.2.2
Package:oracle.apps.ak.hello

 

實例:

step 01: Import OA Page to MDS

使用 jdevbin/oaext/bin/ 將 Page 的 XML 檔導入 EBS 資料庫的 MDS ( Metadata Services ) 裡

cd C:\p17888411_R12_GENERIC\jdevbin\oaext\bin

C:\>import.bat %JDEV_USER_HOME%/myprojects/oracle/apps/ak/hello/webui/HelloWorldPG.xml -rootdir %JDEV_USER_HOME%/myprojects -username apps -password apps -dbconnection "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gued02-vip.globeunion.com)(PORT=1533))(CONNECT_DATA=(SID=VIS)))"

Importing file "C:\Oracle\EBS_R12_JDEV\jdevhome\jdev\myprojects\oracle\apps\ak\hello\webui\HelloWorldPG.xml" as "/oracle/apps/ak/hello/webui/HelloWorldPG".

Import completed.

或者在 EBS AP 主機上執行,但 XML 檔案 HelloWorldPG.xml 需先上載到 EBS AP 主機上

$ adjava oracle.jrad.tools.xml.importer.XMLImporter $JAVA_TOP/oracle/apps/ak/hello/webui/HelloWorldPG.xml -username APPS -password apps -dbconnection "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gued02-vip.globeunion.com)(PORT=1533))(CONNECT_DATA=(SID=VIS)))" -rootdir $JAVA_TOP/ ;

或是


$ java oracle.jrad.tools.xml.importer.XMLImporter $JAVA_TOP/oracle/apps/ak/hello/webui/HelloWorldPG.xml -username APPS -password apps -dbconnection "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=gued02-vip.globeunion.com)(PORT=1533))(CONNECT_DATA=(SID=VIS)))" -rootdir $JAVA_TOP/ ;


Importing file "/u01/oracle/VIS/fs1/EBSapps/comn/java/classes/oracle/apps/ak/hello/webui/HelloWorldPG.xml" as "/oracle/apps/ak/hello/webui/HelloWorldPG".
Import completed.

檢查 MDS 是否有此筆資料

SET serveroutput ON;
BEGIN
  jdr_utils.printdocument('/oracle/apps/ak/hello/webui/HelloWorldPG');
EXCEPTION
WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

 若要刪除此筆 MDS,則可以用 jdr_utils.DeleteDocument 的函數

begin
  jdr_utils.DeleteDocument( '/oracle/apps/ak/hello/webui/HelloWorldPG' ) ;
end ;
/

 

 

Step 02: FTP Upload class file to $JAVA_TOP

利用 FTP 工具將開發好所有 Package 的 class files,從開發本機目錄:/jdevhome/jdev/myclasses/oracle/apps/ak/hello,上載到 EBS 主機上的 $JAVA_TOP 相對應的目錄下,因為撰寫 Java 程式的 Package 為 oracle.apps.ak.hello ,所以 EBS 主機相對應的目錄為 $JAVA_TOP/oracle/apps/ak/hello,若 Package 為 wei.oracle.apps.ak.hello,則程式應上傳到 $JAVA_TOP/wei/oracle/apps/ak/hello

classUpload  

 

 Step 03: Configure the Funtions

先規劃 Funtions 的相關屬性再作設定,HTML Call 則是 Step02 中,class file 上載到 EBS 主機上的 $JAVA_TOP 相對應的目錄下,此例為/oracle/apps/ak/hello/webui/HelloWorldPG,所以HTML Call:OA.jsp?page=/oracle/apps/ak/hello/webui/HelloWorldPG

Function User Function Name Description Function Type HTML Call
POLIN_AK_HELLO POLIN_AK_HELLO Hello World SSWA jsp function

OA.jsp?page=/oracle/apps/ak/hello/webui/HelloWorldPG

 

Hello_Function_Description

 

Hello_Function_Properties

Hello_Function_WebHTML  

HTML Call:OA.jsp?page=/oracle/apps/ak/hello/webui/HelloWorldPG

 

Step 04:Configure Menu

先規劃 MENU 的相關屬性再作設定

Menu Header

Menu User Menu Name Menu Type Description
POLIN_TEST_MENU POLIN_TEST_MENU Standard Polin Testing Menu

Menu Detail

Seq Prompt Submenu Function Description
10 Hello World   POLIN_AK_HELLO POLIN_AK_HELLO

Polin_Test_Menu  

 

 Step 05:Configure Responsibility

先查出 Responsibility Name:OA Framework ToolBox Tutorial 掛的 Menu Name:OA Framework ToolBox Tutorial

OA_Responsibility_Name  

再將剛設定好的 Menu:POLIN_TEST_MENU 掛到 Menu Name:OA Framework ToolBox Tutorial 這個的下面

FWK_TBX_TUTORIAL_MENU  

 

Step 06: Restart Apache Server

login as app user

$ cd $INST_TOP/admin/scripts
$ sh adapcctl.sh stop
$ sh adapcctl.sh start [forcepatchfs]

 

 

文章標籤

MIS 發表在 痞客邦 留言(1) 人氣()

先到 Tomcat 的網站 http://tomcat.apache.org/ 下載的安裝檔 apache-tomcat-7.0.47-windows-x64.zip ,並解壓於 C:\AppServ\apache-tomcat-7.0.47x64 目錄下。因此設定 TOMCAT_HOME="C:\AppServ\apache-tomcat-7.0.47x64",並假設 JDK 的 JAVA_HOME="D:\Progs\jdk1.7.0_45_x64"。

修改下列兩個檔案:

1. C:\AppServ\apache-tomcat-7.0.47x64\bin\setclasspath.bat

rem ---------------------------------------------------------------------------
rem Set JAVA_HOME or JRE_HOME if not already set, ensure any provided settings
rem are valid and consistent with the selected start-up options and set up the
rem endorsed directory.
rem
rem $Id: setclasspath.bat 1202062 2011-11-15 06:50:02Z mturk $
rem ---------------------------------------------------------------------------

set JAVA_HOME="D:\Progs\jdk1.7.0_45_x64"

 

2. C:\AppServ\apache-tomcat-7.0.47x64\conf\tomcat-users.xml

<tomcat-users>
<!--
  NOTE:  By default, no user is included in the "manager-gui" role required
  to operate the "/manager/html" web application.  If you wish to use this app,
  you must define such a user - the username and password are arbitrary.
-->
<user username="tomcat" password="tomcat" roles="manager-gui"/>
</tomcat-users>

 

再執行 C:\AppServ\apache-tomcat-7.0.47x64\bin\startup.bat | shutdown.bat 即可開關 Tomcat Server,並可以在 http://localhost:8080/manager/html 透過帳號/密碼:tomcat/tomcat 來管理。

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

Maven 基本概念:

Maven 是類似 ANT 的 Java 佈署工具,MavenANT 方便的地方是,Maven 會自動去下載專案中必要的 jar 檔。Maven 的 Archetype 主要是會先配置好相關不同專案類型的開發環境,有點類似 template 。

首先到官方網址下載 apache-maven-3.1.1-bin.zip 檔案,並解壓於 C:\AppServ\apache-maven-3.1.1 ( M2_HOME )目錄下。因為我的 Java JDK 是 1.6.0_07 版本,並且放在 D:\Progs\jdk1.6.0_07 目錄下。所以要修改 C:\AppServ\apache-maven-3.1.1\bin\mvn.bat ,增加 JAVA_HOME 的設定如下:

@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM     e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------

set JAVA_HOME="D:\Progs\jdk1.6.0_07"

 

剛提到 Maven 會自動下載專案相關的套件 JAR 檔,Windows 環境中,這就是所謂的 repository 指的是 Maven 存放套件資源的地方.若我們本機(local)電腦中沒有這些套件,Maven會自動從預設的網路位置 下載放到我們本機的repository 中,之後所有Maven專案需要用到的套件,Maven 都會先找本機的 repository,找不到再到網路上去 找;預設存放的目錄是在 ${user.home}/.m2/repository ,若要變更則是修改 %M2_HOME%\conf\settings.xml 檔案中的 <localRepository>...</localRepository>,如:<localRepository>D:/Progs/.m2/repository</localRepository>

確認一下 安裝可以正常執行

C:\AppServ\apache-maven-3.1.1\bin>mvn -ver

C:\AppServ\apache-maven-3.1.1\bin>set JAVA_HOME="D:\Progs\jdk1.6.0_07"

Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:2
2+0800)
Maven home: C:\AppServ\apache-maven-3.1.1\bin\..
Java version: 1.6.0_07, vendor: Sun Microsystems Inc.
Java home: D:\Progs\jdk1.6.0_07\jre
Default locale: zh_TW, platform encoding: MS950
OS name: "windows vista", version: "6.2", arch: "x86", family: "windows"

 

eclipse 專案實作:

Step 01:設定 Maven 在 eclipse 的環境

 maven_eclipse_preference.png  

也是可以利用 Eclipse Markplace 中去下載,與 eclipse 整合;若是整合 (Embedded) 在一起的話,那 eclipse 在 New 一個專案時,就可以看到 Maven 的選項

Maven_Project  

Step 02:建立一個 Archetype:maven-archetype-quickstart 的專案

把專案程式放在 D:\my_workspace\myMaven 目錄下

myMaven_place

 

選擇 Maven Project 預設的 Archetype:maven-archetype-quickstart

maven-archetype-quickstart

  預設將 java 的程式放在 package: com.demo 下

 myMaven_package  

整個結構就會像下圖:

myMaven_Structure  

 

手動執行看看

D:\my_workspace\myMaven>mvn exec:java -Dexec.mainClass=com.demo.App

D:\gu_workspace\myMaven\myMaven>set JAVA_HOME="D:\Progs\jdk1.6.0_07"

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myMaven 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> exec-maven-plugin:1.2.1:java (default-cli) @ myMaven >>>
[INFO]
[INFO] <<< exec-maven-plugin:1.2.1:java (default-cli) @ myMaven <<<
[INFO]
[INFO] --- exec-maven-plugin:1.2.1:java (default-cli) @ myMaven ---
Hello World!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.535s
[INFO] Finished at: Tue Nov 12 11:48:04 CST 2013
[INFO] Final Memory: 4M/9M
[INFO] ------------------------------------------------------------------------
D:\my_workspace\myMaven>

 

Step 03: Build JAR 檔

將要 build JAR 檔的目的位置(Goals)設為 package

maven_goals  

再針對 pom.xml  作 Maven build , 就會在 target 目錄下得到:myMaven-0.0.1-SNAPSHOT.jar
  

mvn_build  

 

參考:

http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

系統環境:

系統環境先放在前面,是為了後面說明概念時,可以加以標示註解,以便更加瞭解 RMAN 的各個環節。

1. Oracle DB 11g  on Windows:記錄 RMAN 所有備份的記錄,在 RMAN 稱為 RMAN Repository (RMAN 恢復目錄資料庫)。

ORACLE_SID:RMANDB
執行記錄 recovery catalog 的帳號/密碼:RMAN_USER/RMAN_PWD

2. Taget Database (要備份的目標資料庫):

Oracle DB 12c on Linux:正式資料庫,日常的交易要作備份。

ORACLE_SID:orcl
執行備份的帳號/密碼:sys/oracle

 

3. 兩者的 tnsnames.ora 均要有雙方連線的資訊:

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oradb12clinux.domain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

RMANDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rmandb.domain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = rmandb.domain)
    )
  )


 

RMAN 概念:

Oracle Database 的備份,一般建議是利用 RMAN 來作業,一來可以由系統自行管理,二來也可以省掉自已下一堆的指令。在建立 RMAN 的機制前,下面幾個概念要有:

1. Target Database:(目標資料庫):本實例為 ORACLE_SID:orcl

就是需要RMAN對其進行備份與恢復的資料庫,RMAN 可以備份資料檔案,控制檔,歸檔日誌,spfile.(注意:RMAN不能用於備份連線日誌、初始化參數檔:pfile 和命令檔)

2. recovery catalog(恢復目錄)

用來保存備份與恢復資訊的一個資料庫,不建議建在目標資料庫上。RMAN 利用恢復目錄記載的資訊去判斷如何執行需要的備份恢復操作。

如果不採用恢復目錄(nocatalog),備份資訊可以存在於目標資料庫的 control file 中。如果存放在目標資料庫的 control file 中,控制項檔會不斷增長,不能保存 RMAN 的Script. CONTROL_FILE_RECORD_KEEP_TIME (default=7):控制項檔中 RMAN 資訊保存的最短時間。

使用恢復目錄(catalog)的優勢: 可以存儲腳本,並記載較長時間的備份恢復操作。


3. RMAN Repository(RMAN 恢復目錄資料庫): 本實例為 ORACLE_SID:rmandb

存放 recovery catalog(恢復目錄)的資料庫。建議為 recovery catalog(恢復目錄)資料庫創建一個單獨的資料庫。

 

設置 RMAN ( Configuration RMAN )實作:

Step 01: 在資料庫 ORACLE_SID:orcl 建立 RMAN 所需的環境

1.) 連上資料庫:rmandb

C:\>sqlplus /nolog

SQL> connect / as sysdba

 

2.) 建立 tablespace:RMAN_TS

CREATE TABLESPACE RMAN_TS
    DATAFILE 'C:\oradb11g\oradata\rmandb\RMAN_DATA.DBF' SIZE 100M
 AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE
    LOGGING
    ONLINE
    SEGMENT SPACE MANAGEMENT AUTO;

 

3.) 建立執行記錄 recovery catalog 的帳號:RMAN_USER,並給 CONNECT,RESOURCE,RECOVERY_CATALOG_OWNER 這三個權限

CREATE USER RMAN_USER IDENTIFIED BY RMAN_PWD
DEFAULT TABLESPACE RMAN_TS
    TEMPORARY TABLESPACE TEMP
    ACCOUNT UNLOCK ;
    
GRANT CONNECT,RESOURCE,RECOVERY_CATALOG_OWNER TO RMAN_USER;

註:Oracle Database 11g 以後,帳號/密碼 有分大小寫,(To Enable/ Disable set SEC_CASE_SENSITIVE_LOGON to TRUE/ FALSE ,預設:TRUE ) 若要關閉需用指令 alter system set sec_case_sensitive_logon=false scope=both;

4.) 利用帳號:RMAN_USER 來建立 recovery catalog(恢復目錄)

C:\>rman catalog RMAN_USER/RMAN_PWD@rmandb

RMAN> create catalog;

recovery catalog created

 

Step 02: 連到目標資料庫  Connect to the target database

1.a ) 若是在 ORACLE_SID:rmandb 資料庫主機上作業

C:\>rman catalog RMAN_USER/RMAN_PWD@rmandb

RMAN> connect target sys/oracle@orcl

己連線到目標資料庫: ORCL (DBID=1357434876)

 

1.b ) 若是在 ORACLE_SID: orcl (目標資料庫)資料庫主機上作業

[oracle@oradb12clinux ~]$ echo $ORACLE_SID
orcl
[oracle@oradb12clinux ~]$ rman catalog RMAN_USER/RMAN_PWD@rmandb

RMAN> connect target;
connected to target database: ORCL (DBID=1357434876)

 

Step 03: 註冊目標資料庫 Register the database

RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

 

Step04: 驗證是否有註冊成功

RMAN> list incarnation of database;

List of Database Incarnations
DB Key  Inc Key   DB Name   DB ID                STATUS      Reset SCN   Reset Time
-------    -------      --------      ----------------      ------------  --------------  ----------
1           2            ORCL        1357434876       CURRENT  1720082     24-OCT-13

PS: 也可以用SQL:select * from rc_database;

 

RMAN 備份實作:

0.) 先將 ORACLE_SID: orcl 改為 archive log mode

$ sqlplus / as sysdba

#查看現在資料庫的備份狀況
SQL> archive log list;
Database log mode           No Archive Mode
Automatic archival           Disabled
Archive destination           USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     30
Current log sequence           32

#查看 archive log 預設備份的目錄
SQL> show parameter DB_RECOVERY_FILE_DEST

NAME                                       TYPE           VALUE
------------------------------------ -----------     ------------------------------
db_recovery_file_dest            string           /u01/app/oracle/fast_recovery_area
db_recovery_file_dest_size    big integer  4800M

#為了方便觀察, 改變備份目錄, 並關閉資料庫

SQL> alter system set db_recovery_file_dest='/u01/arclog' scope=both;
SQL> shutdown immediate;

# 設定資料庫的模式為 archive log mode
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

SQL> archive log list;
Database log mode           Archive Mode
Automatic archival             Enabled
Archive destination           USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     30
Next log sequence to archive   32
Current log sequence           32

#強制產生 archive log file
SQL> alter system switch logfile;
System altered.

#到 OS 去查看是否有 archive log file 產生
$ pwd
/u01/arclog/ORCL/archivelog/2013_11_07
$ ls -l
-rw-r-----. 1 oracle oinstall 25397248 Nov  7 13:44 o1_mf_1_32_97pb5qnt_.arc

註: log_archive_format 的參數設定請參考: http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams103.htm

1.) 建立一個全備份的 script (Script 會存在RC_STORED_SCRIPT及RC_STORED_SCRIPT_LINE的table中): fullbackup


$ rman catalog RMAN_USER/RMAN_PWD@rmandb
RMAN> connect target;
connected to target database: ORCL (DBID=1357434876)

# 先將之前的 script 刪除 (若有的話)
RMAN> delete script fullbackup;
deleted script: fullbackup

# 建立一個資料庫全備份的 script (含control file & spfile)
RMAN> create script fullbackup {
allocate channel d1 type disk;
backup
incremental level 0
format '/u01/backdb/%d_%s_%p'
filesperset 5
(database include current controlfile);
sql 'alter system archive log current';
release channel d1;}

 

2.) 查看 RMAN 的備份 script

RMAN> connect target;
connected to target database: ORCL (DBID=1357434876)

RMAN> print script fullbackup;

$ sqlplus RMAN_USER/RMAN_PWD@rmandb


SQL> select * from RC_STORED_SCRIPT;
SQL> SQL> select * from RC_STORED_SCRIPT_LINE;

 

 3.) 執行備份 script

RMAN>  run {execute script fullbackup;}

executing script: fullbackup

allocated channel: d1
channel d1: SID=416 device type=DISK

Starting backup at 07-NOV-13
channel d1: starting incremental level 0 datafile backup set
channel d1: specifying datafile(s) in backup set
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
input datafile file number=00006 name=/u01/app/oracle/oradata/orcl/users01.dbf
channel d1: starting piece 1 at 07-NOV-13
channel d1: finished piece 1 at 07-NOV-13
piece handle=/u01/backdb/ORCL_7_1 tag=TAG20131107T145348 comment=NONE => 此為RMAN備份的檔名:/u01/backdb/ORCL_7_1
channel d1: backup set complete, elapsed time: 00:00:45
channel d1: starting incremental level 0 datafile backup set
channel d1: specifying datafile(s) in backup set
input datafile file number=00009 name=/u01/app/oracle/oradata/orcl/pdborcl/sysaux01.dbf
input datafile file number=00011 name=/u01/app/oracle/oradata/orcl/pdborcl/example01.dbf
input datafile file number=00008 name=/u01/app/oracle/oradata/orcl/pdborcl/system01.dbf
input datafile file number=00010 name=/u01/app/oracle/oradata/orcl/pdborcl/SAMPLE_SCHEMA_users01.dbf
channel d1: starting piece 1 at 07-NOV-13
channel d1: finished piece 1 at 07-NOV-13
piece handle=/u01/backdb/ORCL_8_1 tag=TAG20131107T145348 comment=NONE => 此為RMAN備份的檔名:/u01/backdb/ORCL_8_1
channel d1: backup set complete, elapsed time: 00:00:35
channel d1: starting incremental level 0 datafile backup set
channel d1: specifying datafile(s) in backup set
input datafile file number=00007 name=/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
channel d1: starting piece 1 at 07-NOV-13
channel d1: finished piece 1 at 07-NOV-13
piece handle=/u01/backdb/ORCL_9_1 tag=TAG20131107T145348 comment=NONE => 此為RMAN備份的檔名:/u01/backdb/ORCL_9_1
channel d1: backup set complete, elapsed time: 00:00:25
channel d1: starting incremental level 0 datafile backup set
channel d1: specifying datafile(s) in backup set
including current control file in backup set
channel d1: starting piece 1 at 07-NOV-13
channel d1: finished piece 1 at 07-NOV-13
piece handle=/u01/backdb/ORCL_10_1 tag=TAG20131107T145348 comment=NONE
channel d1: backup set complete, elapsed time: 00:00:01
Finished backup at 07-NOV-13

Starting Control File and SPFILE Autobackup at 07-NOV-13
piece handle=/u01/arclog/ORCL/autobackup/2013_11_07/o1_mf_s_830876136_97pgc919_.bkp comment=NONE
=> 此為RMAN 備份 Control File and SPFILE file :/u01/arclog/ORCL/autobackup/2013_11_07/o1_mf_s_830876136_97pgc919_.bkp
Finished Control File and SPFILE Autobackup at 07-NOV-13

sql statement: alter system archive log current

released channel: d1

 

基本上 Oracle Database 資料庫在 RMAN 的備份,ORACLE_SID: orcl (目標資料庫)應該是處於 Archive log mode 才可以線上備份。以上是 Oracle RMAN 的基本概念與資料庫全備份實作

 

附註:

若您是使用 Oracle XE 版本的資料庫,應該會出現下列的訊息,代表資料庫 ORACLE_SID:xe 是11g,但目標資料庫 ORACLE_SID:orcl 是 12c ,package RMAN_XE.DBMS_RCVCAT 不相容。所以不能用 oracle XE 版本的資料庫來作。

在資料庫 ORACLE_SID:xe 是11g 看到的訊息:

database registered in recovery catalog
starting full resync of recovery catalog
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03008: error while performing automatic resync of recovery catalog
RMAN-20036: invalid record order

 

在資料庫 ORACLE_SID:orcl 是 12c 看到的訊息:

PL/SQL package RMAN_XE.DBMS_RCVCAT version 11.02.00.02 in RCVCAT database is too old
PL/SQL package RMAN_XE.DBMS_RCVCAT version 11.02.00.02 in RCVCAT database is too old
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of list command at 11/01/2013 14:38:44
RMAN-06429: RCVCAT database is not compatible with this version of RMAN

 

就算用指令UPGRADE CATALOG; 來升級 catalog,雖然會成功,也不能使用

RMAN> UPGRADE CATALOG;

recovery catalog owner is RMAN_XE
enter UPGRADE CATALOG command again to confirm catalog upgrade

RMAN> UPGRADE CATALOG;

recovery catalog upgraded to version 11.02.00.02
DBMS_RCVMAN package upgraded to version 11.02.00.02
DBMS_RCVCAT package upgraded to version 11.02.00.02

 

 

 

參考:

http://fecbob.pixnet.net/blog/post/38195291-oracle-rman%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

Oracle Database 設定檔中,這個設定檔:listener.ora  是要在主機端啟動的服務設定檔;而 tnsnames.ora & sqlnet.ora 則是在使用者諯的設定檔,主要是連到主機端資料庫的連線設定。關於比較詳細的說明如下:


sqlnet.ora:

作用類似於 linux 或者其他 unix 的 nsswitch.conf 文件,Oracle Database 利用這個設定檔來決定連接資料庫系統的連線方式順序 

例如使用者端輸入:sqlplus sys/oracle@orcl

且使用者端的 sqlnet.ora 是下面這個樣子

SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME, EZCONNECT)

 

那麼,使用者端就會首先在 tnsnames.ora 文件中找 orcl 的記錄.如果沒有相應的記錄則嘗試把 orcl 當作一個主機名,通過網路的途徑去解析它的 ip 地址然後去連接這個 ip 上GLOBAL_DBNAME=orcl 這個實例,當然我這裡orcl並不是一個主機名,如果我是這個樣子 NAMES.DIRECTORY_PATH= (TNSNAMES),那麼使用者端就只會從 tnsnames.ora 查找 orc l的記錄,括號中還有其他選項,如LDAP等並不常用。


tnsnames.ora:

這個文件類似於 unix 的 hosts 文件,tnsnames.ora 是設定連線簡稱(alias)對應於主機名或者ip address 的解析,只有當 sqlnet.ora中有 NAMES.DIRECTORY_PATH= (TNSNAMES) 的設定,也就是使用者端解析連接字符串的順序中有 TNSNAMES ,才會嘗試使用這個文件。

#下面的設定是連線到遠端:192.168.1.1 的資料庫

ORCL =
  (DESCRIPTION =
  (ADDRESS_LIST =  
  #下面是這個 TNSNAME 對應的資料庫主機,端口,協定  
   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))  
  )  
  (CONNECT_DATA =

  #使用專用服務器模式去連接需要跟服務器的模式匹配,如果沒有就根據服務器的模式  

  #自動調節
  (SERVER = DEDICATED) 

  #對應service_name,SQLPLUS>show parameter service_name;

  #進行查看  
  (SERVICE_NAME = orcl)  
   )  
  )

 

#下面設定是連到本機的資料庫

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

 


listener.ora:

listener 監聽器服務的配置文件:是接受使用者端對數據庫的連接進入申請,並轉交給 oracle database 的服務。LISTENER 監聽器的名字,一台數據庫可以有不止一個監聽器,Listener.ora 例子如下:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)



監聽器的操作命令:lsnrctl、tnsping

$ORACLE_HOME/bin/lsnrctl start,其他諸如 stop,status 等。可以進入 lsnrctl 後,輸入 help 看其它的參數說明來作偵錯,也可以利用基本的指令 tnsping orcl 來作基本偵錯。  

上面說到的三個文件都可以通過圖形的配置工具 $ORACLE_HOME/netca & $ORACLE_HOME/netmgr 來完成配置,但以 netmgr 較為方便。

 

幾種連接用到的命令形式:

  • 1.) sqlplus / as sysdba 這是典型的操作系統認證,不需要listener進程
  • 2.) sqlplus system/oracle 這種連接方式只能連接本機數據庫,同樣不需要listener進程
  • 3.) sqlplus sysrem/oracle@orcl 這種方式需要listener進程處於可用狀態。最普遍的通過網路連接。

 

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

Oracle Database 12c 因為有 multitenant container database (CDB) 及 pluggable databases (PDBs) 的功能,所以在建立帳號時,就必需要指定。不然會有錯誤訊息:ORA-65096: invalid common user or role name

[oracle@oradb12clinux ~]$ echo $ORACLE_SID
orcl
[oracle@oradb12clinux ~]$ sqlplus / as sysdba

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> create user abcd identified by abcd;
create user abcd identified by abcd
            *
ERROR at line 1:
ORA-65096: invalid common user or role name

SQL> create user test identified by test container=current;
create user test identified by test container=current
                               *
ERROR at line 1:
ORA-65049: creation of local user or role is not allowed in CDB$ROOT

 

這時候,您要決定建立一個共用(common)帳號於 CDB (a "common" user in the CDB which could be used to manage multiple PDBs ),或是 Local 帳號於 PDB,可以使用 SQL 指令 select pdb from v$services; 來查詢目前有多少服務

SQL> select pdb from v$services;

PDB
------------------------------
PDBORCL
CDB$ROOT
CDB$ROOT
CDB$ROOT
CDB$ROOT

 

若要建立一個共用(common)帳號在 CDB$ROOT ,則必需在帳號前加入 c##

SQL> create user c##abc identified by abc;

User created.

SQL> drop user c##abc;

User dropped

 

若要將帳號建在 Local PDB:PDBORCL ,必需先將 session 指定在 container=PDBORCL;

SQL> alter session set container=PDBORCL;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
PDBORCL


SQL> CREATE USER RMAN_XE IDENTIFIED BY RMAN_PWD
ACCOUNT UNLOCK;
CREATE USER RMAN_XE IDENTIFIED BY RMAN_PWD
                                  *
ERROR at line 1:
ORA-01109: database not open

 

ORACLE_SID: orcl 資料庫不是明明已 open 了嗎? 奇怪,怎麼還告訴我 database not open,其實它是說 PDB:PDBORCL 沒有open,可以用 SQL 指令:ALTER PLUGGABLE DATABASE PDBORCL OPEN | CLOSE ;ALTER PLUGGABLE DATABASE ALL OPEN|CLOSE; 來開啟 pluggable databases (PDBs)

SQL> SHOW PDBS;

SQL> show pdbs;

 CON_ID CON_NAME              OPEN MODE  RESTRICTED
---------- ------------------------ ----------------- ----------
     2        PDB$SEED              READ ONLY      NO
     3        PDBORCL                MOUNTED

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

Pluggable database altered.

SQL> show pdbs;

CON_ID CON_NAME             OPEN MODE  RESTRICTED
---------- ------------------------ ---------------- ----------
     2       PDB$SEED              READ ONLY    NO
     3       PDBORCL                READ WRITE NO

 

 再來試一次吧

[oracle@oradb12clinux ~]$ sqlplus / as sysdba

SQL> ALTER PLUGGABLE DATABASE ALL OPEN;

SQL> alter session set container=PDBORCL;

SQL> show pdbs;

CON_ID CON_NAME             OPEN MODE  RESTRICTED
---------- ------------------------ ---------------- ----------
     3       PDBORCL                READ WRITE NO

SQL> CREATE USER RMAN_XE IDENTIFIED BY RMAN_PWD;

User created.

SQL> alter session set container=PDBORCL;

Session altered.

SQL> select username from dba_users where username like '%RMAN%';

USERNAME
--------------------------------------------------------------------------------
RMAN_XE

 

 

ORA-65096 的意思:

oerr ora 65096
65096, 00000, "invalid common user or role name"
// *Cause:  An attempt was made to create a common user or role with a name
//          that wass not valid for common users or roles.  In addition to
//          the usual rules for user and role names, common user and role
//          names must start with C## or c## and consist only of ASCII
//          characters.
// *Action: Specify a valid common user or role name.

 

ORA-65049 的意思:

oerr ora 65049
65049, 00000, "creation of local user or role is not allowed in CDB$ROOT"
// *Cause:   An attempt was made to create a local user or role in CDB$ROOT.
// *Action:  If trying to create a common user or role, specify CONTAINER=ALL.

 

參考:

http://docs.oracle.com/cd/E16655_01/server.121/e17633/cdblogic.htm#CNCPT89259

http://blog.contractoracle.com/2013/06/oracle-12c-ora-65096.html

http://www.oracle-base.com/articles/12c/multitenant-manage-tablespaces-in-a-cdb-and-pdb-12cr1.php

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

來源: Polin Wei

  上一篇 ANT 的基本介紹 我們知道透過 ANT 可以幫我們 Compile Java 所建立的專案,而且可以順便建立 JBoss 所需要的 .war 檔.但是 build.xml 的撰寫卻是一項艱鉅的任務,那有什麼工具可以代勞呢?! 接下來就來介紹如何用 Eclipse 自動建立 ANT 需要的 build.xml

環境:

Java : jdk1.5.0_12 程式放在 D:\Progs\jdk1.5.0_12
Eclipse: Ganymede http://www.eclipse.org/downloads/JBoss: Jboss-4.0.3SP1

  在專案上按滑鼠右鍵,選擇 Export

  

  然後選擇 General -> Ant Buildfiles





 最後選擇你要建立那一個專案的 build.xml ,按下 Finish 即可。



  這樣子就可以自動產生這個專案 Ant 所需要的 build.xml ,當然這個檔案是需要作些許修改的,至於 Ant 的屬性及要修改那些地方,可以視你自己的需要,詳細的說明可以參考
ANT 的基本概念與實作

參考:

[教學] 利用Eclipse 自動建立ANT 需要的build.xml

MIS 發表在 痞客邦 留言(0) 人氣()

來源: Polin Wei

Ant 的全名是"Another Neat Tool",Ant主要可以幫您自動完成下列的任務:

  • 編譯Java原始碼
  • 建立jar、war、zip檔案
  • 自動測試與生成報告
  • 從 CVS 或 SVN 等管理系統取得原始碼

所以若你對 Java 程式沒有任何興趣的話,那就可以先離開了,不然會很無聊.

環境:
OS: WinXPSP2

程式版本:
Java : jdk1.5.0_12 程式放在 D:\Progs\jdk1.5.0_12
Ant: ant-1.7.0 程式放在 C:\AppServ\apache-ant-1.7.0

增加系統變數:
%JAVA_HOME% = D:\Progs\jdk1.5.0_12
%ANT_HOME% = C:\AppServ\apache-ant-1.7.0

增加路徑:
PATH=%ANT_HOME%\bin;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

以上的環境設定好後,可以在 Command Prompt 中來測試一下 Ant 是否正常運作.




project 節點:

project 節點是 build.xml 的文件根節點。一個文件之中,只能有一個根節點。project 節點有以下三個屬性。

name:(必要:No)
專案名稱

default:(必要:Yes)
假設命令列未指定 target 時,預設執行的 target 節點

basedir:(必要:No)
用來指定專案的根目錄,這個屬性可以使用"basedir" property 節點來改變,如果定義 basedir的 property 節點,在 project 標籤中,就不可以定義這個屬性。假使未使用這個屬性或 property 節點來定義 basedir的話,則 Ant 會使用這個專案 build.xml 的目錄,作為 basedir。

屬性 說明 是否必要
name 專案名稱 No
default 假設命令列未指定 target 時,預設執行的 target 節點 Yes.
basedir 用來指定專案的根目錄,這個屬性可以使用"basedir" property 節點來改變,如果定義 basedir的 property 節點,在 project 標籤中,就不可以定義這個屬性。假使未使用這個屬性或 property 節點來定義 basedir的話,則 Ant 會使用這個專案 build.xml 的目錄,作為 basedir。 No

 



target 節點:

  target 節點是 Ant 執行的目標,我們可以把各種命令(在 Ant 中的術語,叫任務 task),放在 target 的節點中。所以,你可以把他想成是一組命令的結合,以程式設計來說,接近副程式或不傳回值的函式。

  target 和 target 之間,可以使用 depends屬性來定義彼此間的依存關係。藉由定義這些依存的關係,我們可以改變 target 的執行順序。也可以定義 if 以及 unless 屬性,來決定是否執行這個 target 節點的工作。沒有定義 if 和 unless 屬性的 target 節點,一定會按照順序執行。


name:target 的名稱

depends:
在執行這個 target 節點之前,先要執行其他節點的名稱。如果是多個節點時,以逗號區隔各個節點。


if:
指定 property 名稱。必須定義這個 property ,才會執行這個 target的工作。


unless:
指定 property 名稱。必須不定義這個 property ,才會執行這個 target的工作。


description:
文字說明

屬性 說明 是否必要
name target 的名稱 Yes
depends 在執行這個 target 節點之前,先要執行其他節點的名稱。如果是多個節點時,以逗號區隔各個節點。 No
if 指定 property 名稱。必須定義這個 property ,才會執行這個 target的工作。 No
unless 指定 property 名稱。必須不定義這個 property ,才會執行這個 target的工作。 No
description 文字說明 No

 



task 節點:

  task 節點,是 Ant 執行工作最基本的單位,類似程式設計中的命令句。可分為 core tasks 和 optional tasks 兩類,你也可以使用 java 來撰寫自定的 task。

 task 的範圍很廣,各個屬性也不相同,要運用 task時,可參考 Ant 的線上說明。



property 節點:

  property 節點,定義專案的屬性值,類似程式設計中的變數。最常用的屬性有 name 和 value。name 定義這個 property 的名稱,value 定義這個property 的值。要讀取 property 的值時,必須使用 ${property名稱}的格式。


  
  整理一下:在 Ant 的 buildfile 中可以定義構建專案時的「屬性」(property)、「任務」(task),一個build.xml中可以定義多個任務,這些任務可能是建立目錄、編譯Java原始碼、搬移檔案、產生doc文件、進行測試、產生測試報告等等,這些任務通常組織為一個「目標」(target)。



現在我們就來建立一個實際的專案及一個簡單的 build.xml 檔作測試

專案名:test (這是一個 struts 架構)
JBoss: jboss-4.0.3SP1

專案架構如下圖:







build.xml 檔案內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="build" name="test">
<property environment="env"/>
<property name="ECLIPSE_HOME" value="../../Progs/eclipse-ganymede"/>
<property name="JBOSS_HOME" value="C:/AppServ/jboss-4.0.3SP1" />
<property name="server.publish.dir" value="${JBOSS_HOME}/server/default/deploy/" />=> 定義 JBoss 存放專案的地方

<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.5"/>
<property name="source" value="1.5"/>
<path id="JBoss v4.0 [JBoss v4.0].libraryclasspath"> => 這個專案所需要的 JAR 檔
    <pathelement location="${JBOSS_HOME}/client/jboss-j2ee.jar" />
    <pathelement location="${JBOSS_HOME}/client/jbossall-client.jar" />
    <pathelement location="${JBOSS_HOME}/server/default/lib/javax.servlet.jar" />
    <pathelement location="${JBOSS_HOME}/server/default/lib/javax.servlet.jsp.jar" />
    <pathelement location="${JBOSS_HOME}/server/default/lib/activation.jar" />
    <pathelement location="${JBOSS_HOME}/server/default/lib/mail.jar" />
</path>

<path id="Web App Libraries.libraryclasspath">=>在 WebContent 中要包含的 JAR 檔
    <pathelement location="WebContent/WEB-INF/lib/NCSO.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/activation.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/common-annotations.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-beanutils-bean-collections.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-beanutils.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-collections-3.1.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-dbcp-1.2.2.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-digester-1.7.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-digester.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-fileupload.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-io-1.3.1.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-javaflow-20060411.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-lang.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-logging-api.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-logging.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-pool-1.2.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/commons-validator.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/itext-1.3.1.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/jakarta-oro.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/jasperreports-1.3.4.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/jdbc2_0-stdext.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/jstl.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/jxl.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/log4j-1.2.11.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/mail.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/ocrs12.zip"/>
    <pathelement location="WebContent/WEB-INF/lib/ojdbc14.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/ojdbc14_g.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/p6spy.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/png-encoder-1.5.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/poi-3.0.1-FINAL-20070705.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/quartz-1.5.2.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/standard.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/struts-legacy.jar"/>
    <pathelement location="WebContent/WEB-INF/lib/struts.jar"/>
</path>
<path id="EAR Libraries.libraryclasspath"/>

<path id="test.classpath"> => 這是重點, 此專案中所有 Java compile 成 class 檔 , 只要deploy Class 檔即可
    <pathelement location="WebContent/WEB-INF/classes"/>
    <path refid="JBoss v4.0 [JBoss v4.0].libraryclasspath"/>
    <path refid="Web App Libraries.libraryclasspath"/>
    <path refid="EAR Libraries.libraryclasspath"/>
</path>

<target name="init"> => ANT Compile 的進入點
    <mkdir dir="WebContent/WEB-INF/classes"/>
    <copy includeemptydirs="false" todir="WebContent/WEB-INF/classes">
        <fileset dir="src" excludes="**/*.launch, **/*.java"/>
    </copy>
</target>

<target name="clean"> => ANT compile 完後, 將 class 檔刪除
    <delete dir="WebContent/WEB-INF/classes"/>
</target>

<target depends="clean" name="cleanall"/>
<target depends="build-subprojects,build-project" name="build"/>
<target name="build-subprojects"/>

<target depends="init" name="build-project"> => 開始建立整個專案
    <echo message="${ant.project.name}: ${ant.file}"/>
    <javac deprecation="no" nowarn="true" encoding="UTF-8" debug="true" debuglevel="${debuglevel}" destdir="WebContent/WEB-INF/classes" source="${source}" target="${target}">
    <src path="src"/>
    <classpath refid="test.classpath"/>
</javac>

<jar destfile="${ant.project.name}.war"> => 把整個專案包成一個 .war 檔
    <zipfileset dir="WebContent/">
        <include name="**/*.*" />
        <exclude name="**/*.war" />
    </zipfileset>
</jar>

<move file="${ant.project.name}.war" todir="${server.publish.dir}" /> => 將 .war 檔 copy 到 JBoss 的目錄 "C:/AppServ/jboss-4.0.3SP1/server/default/deploy/"

</target>

<target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
<target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler">
<copy todir="${ant.library.dir}">
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</copy>
<unzip dest="${ant.library.dir}">
<patternset includes="jdtCompilerAdapter.jar"/>
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</unzip>
</target>
<target description="compile project with Eclipse compiler" name="build-eclipse-compiler">

<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>

<antcall target="build"/>
</target>
</project>

然後再用 ANT 執行, 如下圖



參考文獻:

我與小崴崴的工作日記: [教學] ANT 的基本介紹

Ant 使用手冊:
http://ant.apache.org/manual/index.html





文章標籤

MIS 發表在 痞客邦 留言(1) 人氣()

spfile & pfile 差異:

Oracle Database 自從 9i 以後的版本,就開始支援 spfile ,spfile & pfile 差異處如下:

  • pfile  :client 端參數文件,是一個文字檔,不能動態修改,可用 notepad 或 vi 來編輯,DBA 通常是指這個 init.ora 文件;修改之後需要重啟資料庫才會生效。
  • spfile:服務器端參數文件(Server Parameter File),這是一個二進位的檔案,編輯 SPFILE 檔案會破壞它,您將無法啟動您的數據庫,要更改參數值,需用指令:"ALTER SYSTEM SET" 來變更; 有了spfile,資料庫的參數可以線上動態修改,部分參數修改之後無需重啟資料庫就可以直接生效。。

 

可以用下列指令,得知您的資料庫是用那一種模式起動的。

 SQL> SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type"
       FROM sys.v_$parameter WHERE name = 'spfile';

 

另一種查詢的方式,是查 view: V$SPPARAMETER,如:SHOW PARAMETERS pfile | spfile ; 若值為 null ,則是使用 pfile (init.ora) 啟動資料庫。

show parameters 各位 view 的意思:

V$PARAMETER view - display the currently in effect parameter values
V$PARAMETER2 view - display the currently in effect parameter values, but "List Values" are shown in multiple rows
V$SPPARAMETER view - display the current contents of the server parameter file.

 

spfile 的優點:

  • 1. 可以用 RMAN 備份 spfile ( spfile 是 Server Parameter File ), RMAN 無法備份 pfile ( client 端參數文件 )
  • 2. 滅少人為修改參數造成的錯誤,spfile 是儲存在資料庫系統裡,用 "ALTER SYSTEM SET" 來變更時,系統會先作檢查。
  • 3. 只有一個 spfile 參數檔,很容易找到與維護。

 

從 spfile 獲取 pfile:

Create pfile='d:pfileSID.ora' from spfile;
SQL> Create pfile='C:\oraclexe\app\oracle\admin\XE\pfile\pfileSID.ora' from spfile;


從pfile獲取spfile:

Create spfile from pfile='Your_pfile_location'
Create spfile='spfile_location' from pfile='Your_pfile_location'

動態修改參數:
alter system set parameter=Value scope=spfile | both | memory ( Startup nomount 的時候需要讀去 spfile 或 pfile 或 兩者共存,系統以 spfile 優先 )

SQL> ALTER SYSTEM SET open_cursors=300 SCOPE=SPFILE;

SQL> ALTER SYSTEM SET timed_statistics=TRUE
    COMMENT='Changed by Frank on 1 June 2003'
    SCOPE=BOTH
     SID='*';

The SCOPE parameter can be set to SPFILE, MEMORY or BOTH:

  • - MEMORY: Set for the current instance only. This is the default behaviour if a PFILE was used at STARTUP.
  • - SPFILE: update the SPFILE, the parameter will take effect with next database startup
  • - BOTH: affect the current instance and persist to the SPFILE. This is the default behaviour if an SPFILE was used at STARTUP.
  • The COMMENT parameter (optional) specifies a user remark.

 

強制用 pfile 啟動:

SQL>startup pfile='Your_Pfile.ora'
SQL>startup spfile='/data/oracle/product/10.2.0/db_1/dbs/dbs/spfile_orcl.ora' force

 

參數檔案 spfile 的備份:

RMAN (Oracle's Recovery Manager) 可以備份 SPFILE ,但參數 "CONFIGURE CONTROLFILE AUTOBACKUP" 要設定為 ON (the default is OFF). PFILEs 則無法由 RMAN 備份.如下範例設定:

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

由 RMAN 回存 SPFILE:

RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;

 

參考:

http://orafaq.com/node/5

http://weicheng331.blogspot.tw/2009/05/oracle-spfile-pfile.html

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()

在談到 Oracle DB 12c 的安裝 install on linux 如何建立資料庫後,手動啟動/關閉資料庫總是覺得煩索了點,可以像 Windows Service  一樣自動化嗎? 這是可行的,接著我們來實作看看。

以上先用帳號:oracle 來編輯

Step 01: 建立 /home/oracle/scripts 目錄及 /home/oracle/scripts/startup.sh & /home/oracle/scripts/shutdown.sh 檔案

startup.sh

#!/bin/bash

export TMP=/tmp
export TMPDIR=$TMP
export PATH=/usr/sbin:/usr/local/bin:$PATH
export ORACLE_HOSTNAME=oradb12clinux.globeunion.com
export ORACLE_UNQNAME=orcl

export ORACLE_SID=orcl
ORAENV_ASK=NO
. oraenv
ORAENV_ASK=YES

# Start Listener
lsnrctl start

# Start Database
sqlplus / as sysdba << EOF
STARTUP;
EXIT;
EOF

 

shutdown.sh

#!/bin/bash

export TMP=/tmp
export TMPDIR=$TMP
export PATH=/usr/sbin:/usr/local/bin:$PATH
export ORACLE_HOSTNAME=oradb12clinux.globeunion.com
export ORACLE_UNQNAME=orcl

export ORACLE_SID=orcl
ORAENV_ASK=NO
. oraenv
ORAENV_ASK=YES

# Stop Database
sqlplus / as sysdba << EOF
SHUTDOWN IMMEDIATE;
EXIT;
EOF

# Stop Listener
lsnrctl stop

 

編輯好 /home/oracle/scripts/startup.sh & /home/oracle/scripts/shutdown.sh 兩個檔案後,記得用指令 chmod u+x /home/oracle/scripts/startup.sh /home/oracle/scripts/shutdown.sh 讓這兩個檔案變成可執行檔,並用手動執行,測試一下是否可以正常開啟與關閉資料庫。

 

以下以用帳號:root來編輯檔案

Step 02 : 手動測試可以正常開啟與關閉資料庫無誤後,再來建立 /etc/init.d/dbora 檔案,這是用來建立 Linux 上自建的服務啟動檔,內容如下:

#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database software.

ORA_OWNER=oracle

case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su $ORA_OWNER -c "/home/oracle/scripts/startup.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1"
        touch /var/lock/subsys/dbora
        ;;
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su $ORA_OWNER -c "/home/oracle/scripts/shutdown.sh >> /home/oracle/scripts/startup_shutdown.log 2>&1"
        rm -f /var/lock/subsys/dbora
        ;;
esac

 

記得用指令 chmod 750 /etc/init.d/dboradbora 它變成可執行檔案,這時 Linux 的 Service 應有一個 dbora 的服務。

linux-service-oradb  

 

最後,用指令 chkconfig --add dbora 將它與系統啟動與關閉作關連。

db-running-level  

 

您可以使用下列兩個指令,並用帳號:root 來作測試

# service dbora start
# service dbora stop

資料庫啟動與關閉的記錄,則可以查看 /home/oracle/scripts/startup_shutdown.log 這個記錄檔。

 

參考:

http://www.oracle-base.com/articles/linux/automating-database-startup-and-shutdown-on-linux.php#oracle-11gr2-update

文章標籤

MIS 發表在 痞客邦 留言(0) 人氣()