在 Oracle 的開發工具 JDeveloper 11g/12c 中除了支援 SVN Server ( Subversion ) 外,也支援 git ,但測試了 git 目前在繁體中文的 Windows 平台上支援並不好,不過摸了幾天,還是記錄一下配置心得。

環境:

1. git server 1.7.x on Oracle Linux 6.5

2. gitweb 1.7 on apache 2.x

3. git clinet on windows 8 downloadGit-1.8.5.2-preview20131230.exe

 一、安裝 git server

git_package.png  

# rpm -qa | grep git
gitweb-1.7.1-3.el6_4.1.noarch
git-1.7.1-3.el6_4.1.x86_64

二、設定 git repository:project.git 在 /opt/git_root 目錄下

# pwd
/opt/git_root
# mkdir project.git
# cd project.git/
# git init --bare
Initialized empty Git repository in /opt/git_root/project.git/

註:可以修改 /opt/git_root/project.git/description 來說明此專案目的

# vi description
git Version Control Project

三、設定 repository:project.git 權限給 AD 的 Domain Users 有權限存放資料,參考:AD Account Login Linux Server (oracle linux 與 Windows AD 帳號認證整合)

# ls -al
total 40
drwxr-xr-x. 7 root root 4096 Jan 21 12:05 .
drwxr-xr-x. 3 root root 4096 Jan 21 11:35 ..
drwxr-xr-x. 2 root root 4096 Jan 21 11:35 branches
-rw-r--r--. 1 root root  150 Jan 21 12:04 config
-rw-r--r--. 1 root root   73 Jan 21 11:35 description
-rw-r--r--. 1 root root   23 Jan 21 11:35 HEAD
drwxr-xr-x. 2 root root 4096 Jan 21 11:35 hooks
drwxr-xr-x. 2 root root 4096 Jan 21 11:35 info
drwxr-xr-x. 7 root root 4096 Jan 21 11:49 objects
drwxr-xr-x. 4 root root 4096 Jan 21 11:35 refs

# chown -R root."WEI\Domain Users" refs/
# chown -R root."WEI\Domain Users" objects/
# chmod 775 -R refs/
# chmod 775 -R objects/

四、設定 gitweb:gitweb 預設安裝到了/var/www/git 下,其設定檔在 /etc/gitweb.conf ,另外,httpd 的設定檔為 /etc/httpd/conf.d/git.conf。

1) 修改 /etc/gitweb.conf

# vi /etc/gitweb.conf
our $projectroot = "/var/www/git";

2) 修改 /etc/httpd/conf.d/git.conf

# vi /etc/httpd/conf.d/git.conf
Alias /git /var/www/git
<Directory /var/www/git>
        Allow from all
        AllowOverride all
        Order allow,deny
        Options +ExecCGI
        AddHandler cgi-script .cgi
        DirectoryIndex gitweb.cgi
        SetEnv GITWEB_CONFIG /etc/gitweb.conf
        Dav On
        RewriteEngine Off
</Directory>

3) 重啟 apache server
# service httpd restart

4) 將 Git repository in /opt/git_root/project.git 連結到 /var/www/git 下

# ln -s /opt/git_root/project.git /var/www/git

5) 在 windows 平台用流覽器查看

gitweb_viewProject.png  
 六、測試

1) 在 windows 平台上安裝 Git-1.8.5.2-preview20131230.exe ,並將目錄 C:\Program Files (x86)\Git\cmd 加入 Windows 環境變數的 PATH  中

2) 在 windows 平台上將 Linux 主機上 git repository:project.git  clone 到 D:\git_repo 目錄下,並設定 D:\git_repo\project.git 資料夾為 UTF-8 編碼

D:\git_repo>git clone polin.wei@oradb12clinux:/opt/git_root/project.git
Cloning into 'project'...
polin.wei@oradb12clinux's password:
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

設定 D:\git_repo 目錄編碼為 utf-8:
    在 D:\git_repo\project.git 資料夾上,以滑鼠右鍵點選 Git Gui。
    按「Edit」,再點選「Option」。
    將 Global (All Repositories) 的「Default File Contents Encoding」改變為「utf-8」後,按「Save」。

3) 建立一份文字檔 readme.txt,內容為 "這是第一份文件"

D:\git_repo>cd project
D:\git_repo\project>notepad readme.txt
D:\git_repo\project>type readme.txt
這是第一份文件

4) commint 文件內容

D:\git_repo\project>git commit (這說明應該是:git 測試,但它變成了 git 晴)

git_vim_windows_commit.png  
[master (root-commit) 9ccc88e] git 晴
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

Warning: Your console font probably doesn't support Unicode. If you experience s
trange characters in the output, consider switching to a TrueType font such as L
ucida Console!

5) 將文件上載到 git server on linux

D:\git_repo\project>git push origin master
polin.wei@oradb12clinux's password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 232 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To polin.wei@oradb12clinux:/opt/git_root/project.git
 * [new branch]      master -> master

6) 使用 git gui 工具上傳,操作順序為:
  a. Rescan 查看有沒有文件被修改
  b. Stage Changed 設定文件內容為已被修改
  c. Commit 文件內容確認
  d. Push 到 Linux 主機上 git repository:project.git

git_gui_modify.png  

7) 再一次在 windows 平台用流覽器查看

gitweb_view_summary.png  

 

參考:

http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server

http://blog.xuite.net/yctseng/notes/35220134-gitweb

http://phpbb-tw.net/phpbb/viewtopic.php?t=53959

http://www.linuxso.com/linuxrumen/40000.html

http://www.linuxso.com/linuxrumen/40005.html

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

程式碼的版本控制除了之前介紹的 CVS Server in Linux & Jdeveloper OAF in Window 開發環境的整合設定 ,還有功能較為強大的 SVN Server ( Subversion ),相信這兩個程式版本控制服務應該可以符合大部份開發人員對於版本控制的要求了。若是想架設在 Windows 平台的話,可以參考 Apache/2.0.59 (Win32) 與 SVN/1.4.3 的安裝 & Apache/2.0.59 (Win32) 與 SVN/1.4.3 對 AD 的認證  。

環境:

Oracle Linux:Oracle Linux Release 6 Update 5 for x86_64 (64 Bit)
    host: oradb12clinux
    ip: 192.168.3.50

SVN Server ( Subversion ):subversion-svn2cl-1.6.11-9.el6_4.noarch

Apache Server:1.6.11-9:httpd-2.2.15-26.0.1.el6.x86_64

認證套件:mod_dav_svn-1.6.11-9.el6_4.x86_64

Windows AD:Windows Server 2003    host: adserver.wei.com
    ip: 192.168.2.1

 Windows Client :TortoiseSVN

一、安裝相關套件

 svn_package  

# rpm -qa | grep httpd
httpd-tools-2.2.15-26.0.1.el6.x86_64
httpd-2.2.15-26.0.1.el6.x86_64
httpd-manual-2.2.15-26.0.1.el6.noarch

# rpm -qa | grep svn
mod_dav_svn-1.6.11-9.el6_4.x86_64
git-svn-1.7.1-3.el6_4.1.noarch
ltrace-0.5-23.45svn.el6.x86_64
subversion-svn2cl-1.6.11-9.el6_4.noarch

二、建立 SVN Server ( Subversion ) 的 repository 與權限設定

1) 執行 # svnadmin create /opt/svn_root/ebs_source , 這是為了要建立 SVN Server 的 repository

# svnadmin create /opt/svn_root/ebs_source
# ls -al ebs_source/
total 32
drwxr-xr-x. 6 root root 4096 Jan 17 11:08 .
drwxr-xr-x. 3 root root 4096 Jan 17 11:08 ..
drwxr-xr-x. 2 root root 4096 Jan 17 11:08 conf
drwxr-sr-x. 6 root root 4096 Jan 17 11:08 db
-r--r--r--. 1 root root    2 Jan 17 11:08 format
drwxr-xr-x. 2 root root 4096 Jan 17 11:08 hooks
drwxr-xr-x. 2 root root 4096 Jan 17 11:08 locks
-rw-r--r--. 1 root root  229 Jan 17 11:08 README.txt

 

2) 執行 htpasswd 建立檔案型認證檔:passwd ,新增使用者 polinwei & u01
# htpasswd -c /opt/svn_root/ebs_source/conf/passwd polinwei ==> passwd 檔案不在時, htpasswd 參數要下 -c
New password:
Re-type new password:
Adding password for user polinwei

# htpasswd /opt/svn_root/ebs_source/conf/passwd u01 ==> passwd 檔案己存在時, htpasswd 參數不要下 -c
New password:
Re-type new password:
Adding password for user u01

# cat /opt/svn_root/ebs_source/conf/passwd
polinwei:rOocF4eiWllRQ
u01:VHkwsuykRzVlM

3) 維護 Repository:ebs_source 的存取權限

# vi /opt/svn_root/ebs_source/conf/authz
[groups]
admins = polinwei
users  = u01
oracle_ebs_group = polinwei

[ebs_source:/] ==> 這就是 repository 的根目錄
* = r
@admins = rw
@oracle_ebs_group = rw
@users = r

#可以對每個 repository 下的目錄再作權限管理

[ebs_source:/wei]
@oracle_ebs_group = rw

[ebs_source:/test]
@admins = rw
@users = r

 4) svnserve.conf 設定檔原則上是可以不需修改,使用預設值即可

 

二、設定 apache 對 SVN Server ( Subversion ) 的存取權限

1)  編輯 Apache 的 httpd.conf

因檔案 /etc/httpd/conf/httpd.conf 中有  Include conf.d/*.conf 

# vi /etc/httpd/conf/httpd.conf
#
# Load config files from the config directory "/etc/httpd/conf.d".
#
Include conf.d/*.conf

所以只要編輯  /etc/httpd/conf.d/subversion.conf

# vi /etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

# 對 SVN Respository : ebs_source 作設定
<Location /ebs_source>
   DAV svn
   SVNPath /opt/svn_root/ebs_source
   AuthType Basic
   AuthName "Subversion repository"
   AuthzSVNAccessFile /opt/svn_root/ebs_source/conf/authz
   AuthUserFile /opt/svn_root/ebs_source/conf/passwd
   Require valid-user
</Location>

2) 變更 SVN Respository : ebs_source 實體目錄權限

# chown -R apache.apache ebs_source
# chcon -R -t httpd_sys_content_t ebs_source

3) 重啟 Apache 服務,與測試;網址應為 http://oradb12clinux/ebs_source/

# service httpd restart


svn_jdeveloper_client.png  

三、SVN Server ( Subversion ) 的存取權限與 Windows AD 帳號/密碼作整合

1) 將檔案型:認證密碼檔 passwd 前加 #,並設定對 Windows AD 以 LDAP 加 SSL 作認證

# vi /etc/httpd/conf.d/subversion.conf

<Location /ebs_source>
   DAV svn
   SVNPath /opt/svn_root/ebs_source
   AuthType Basic
   AuthName "Subversion repository"
   AuthzSVNAccessFile /opt/svn_root/ebs_source/conf/authz
#   AuthUserFile /opt/svn_root/ebs_source/conf/passwd
   Require valid-user

   SSLRequireSSL
   AuthzLDAPAuthoritative Off
   AuthLDAPURL ldap://adserver.wei.com:389/o=wei?cn?sub
   AuthBasicProvider ldap
</Location>

2) 維護 Repository:ebs_source 的存取權限

# vi /opt/svn_root/ebs_source/conf/authz
[groups]
admins = polinwei
users  = u01
oracle_ebs_group = polinwei,polin.wei

[ebs_source:/] ==> 這就是 repository 的根目錄
* = r
@admins = rw
@oracle_ebs_group = rw

#可以對每個 repository 下的目錄再作權限管理,注意:若目錄下權限群組名:oracle_ebs_group 沒定對時,會造成所有人沒有權限進入repository 的根目錄

[ebs_source:/wei]
@oracle_ebs_group = rw

[ebs_source:/test]
@admins = rw
@users = r

 

3) 重啟 Apache 服務,與測試;注意網址變為 https (port:443 SSL協定) https://oradb12clinux/ebs_source/ ;認證則為 windows AD 裡的帳號/密碼

# service httpd restart

 svn_ad_user_auth.png  

 

 

文章標籤

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

為了在Windows主機間達到資源共享的目的,微軟發展出 SMB(Server Message Block)通訊協定,利用其網路芳鄰共享檔案系統及印表機等資源;而Samba在Linux主機上實現SMB通訊協定的系統,達成Windows與 Linux主機的資源共享,再搭配 Winbind 模組解決 Samba 中統一登入問題。因為 Linux Server 愈來愈多,為了可以達到統一單一帳號來達到管理,因此; 接下來我們要利用 samba、winbind 來整合 AD 帳號,這樣我們就可以在 AD 管理帳號就可以了。

環境:

Windows Server 2003 AD Server: ADSERVER.WEI.COM (192.168.2.1)

Oracle Linux R6.5 for x86_64 (64 Bit) :cvs.wei.com (192.168.2.69)

一、Linux 相關套件安裝與設定

1) 在安裝 Linux 主機時,可以選取相關的套件

samba_krb5_package.png samba_winbind_package.png  

2) 檢查/驗證一下相關的套件是否有裝

[root@cvs ~]# rpm -qa | grep samba
samba-common-3.6.9-164.el6.x86_64
samba-client-3.6.9-164.el6.x86_64
samba4-libs-4.0.0-58.el6.rc4.x86_64
samba-winbind-3.6.9-164.el6.x86_64
samba-3.6.9-164.el6.x86_64
samba-winbind-clients-3.6.9-164.el6.x86_64


[root@cvs ~]# rpm -qa | grep winbind
samba-winbind-3.6.9-164.el6.x86_64
samba-winbind-clients-3.6.9-164.el6.x86_64


[root@cvs ~]# rpm -qa | grep krb5
krb5-workstation-1.10.3-10.el6_4.6.x86_64
krb5-server-1.10.3-10.el6_4.6.x86_64
pam_krb5-2.3.11-9.el6.x86_64
krb5-libs-1.10.3-10.el6_4.6.x86_64

3) 使用 UI 工具來作設定

winbind_auth.png

 

winbind_auth_adv.png  

設定好後 Apply,然後記得要在 Identity & Authentication 按下 Join Domain,在 AD 的 Computers 中應該可以看到此 Linux : cvs 主機

winbind_join_domain.png winbind_join_domain_win.png  

 

4) 啟動 Samba & Winbind Services

winbind_smb_enable_service.png  

5) 最後使用 AD Domain User 來作登入測試,應該就可以成功了。

winbind_domainUser_login.png  

6) 若有目錄要給 AD Domain Users 群組可以使用, 可以用指令 # chown -R root:"WEI\Domain Users" /opt/cvs_root/ 來賦予.

Oracle Linux 在使用 samba、winbind 來整合 AD 帳號的 UI 畫面已經整合的非常好,/etc/samba/smb.conf & /etc/krb5.conf 都不需去多作編輯:只有 /var/kerberos/krb5kdc/kdc.conf 檔案內容中的 EXAMPLE.COM 要改成您的 AD 網域(如:WEI.COM),以及將 master_key_type 前的 # 去除即可。相關檔案如下:

[root@cvs samba]# cat /etc/samba/smb.conf
#======================= Global Settings =====================================

[global]
#--authconfig--start-line--

# Generated by authconfig on 2014/01/15 15:41:06
# DO NOT EDIT THIS SECTION (delimited by --start-line--/--end-line--)
# Any modification may be deleted or altered by authconfig in future

   workgroup = WEI
   password server = ADSERVER.WEI.COM
   realm = WEI.COM
   security = ads
   idmap config * : range = 16777216-33554431
   template shell = /bin/bash
   winbind use default domain = false
   winbind offline logon = true

#--authconfig--end-line--

 

[root@cvs samba]# cat /etc/krb5.conf
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = WEI.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 EXAMPLE.COM = {
  kdc = kerberos.example.com
  admin_server = kerberos.example.com
 }

 WEI.COM = {
  kdc = ADSERVER.WEI.COM
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

 

# vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 WEI.COM = {
  master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

 

二、Samba 3.x 伺服器設定說明

設定Samba最基礎的項目就是指定工作群組名稱(workgroup)及網域名稱,編輯 Samba設定檔smb.conf,以下設定都在該檔案內[global]標籤下同一段落完成。
/etc/samba/smb.conf

workgroup = WEI
realm = WEI.COM

 

避免分享資源時出現亂碼,分別設定Windows、Linux的字集。

display charset = Big5
dos charset = CP950

 

使用AD網域認證必須修改Samba的安全層級,並指定認證主機及增加Windows網路相關設定。

security = ads
password server = ADSERVER.WEI.COM
wins server = ADSERVER.WEI.COM
encrypt passwords = yes

 

Linux預設的使用者家目錄為/home/使用者名稱,針對AD網域使用者 必須另行設定其家目錄位置,主要參數為:%D代表網域名稱、%U代表使用者名稱。以下設定目的為讓網域使用者的家目錄集中在/home/網域名稱/目錄下 並以使用者帳號命名,同時讓使用者帳號自動套用網域名稱及不允許使用者離線登入。

template homedir = /home/%D/%U
winbind use default domain = false
winbind offline logon = true

 

設定AD網域使用者帳號對應到Linux使用者帳號及群組的範圍。

idmap config * : range = 16777216-33554431

 

預設Winbind快取時間為300秒,使用指令# getent passwd或# getent group時,會將NT/AD網域的使用者與群組一併列出。當使用者、群組數量太多,Winbind會無法正常傳回資料,開啟此功能可以避免這個狀況。

winbind enum users = yes
winbind enum groups = yes
winbind cache time = 300

 

若允許AD網域使用者以終端機方式登入系統,可指定AD帳號的Shell。

template shell = /bin/bash

 

視需要開啟對NT ACLs(Access Control List) 的支援。

nt acl support = yes

 

三、整合Windows AD網域帳號資訊說明

當系統查詢使用者帳號與群組時,預設由檔案尋找(/etc/passwd、/etc/group),為了使其搜尋不到相關資訊時,轉而使用Winbind向AD網域查詢,必須設定認證來源和順序。
/etc/nsswitch.conf

passwd: files winbind
shadow: files winbind
group: files winbind

 

設定本機 UID 與 GID 發放範圍,避免 AD 帳號與 Linux 本機帳號衝突,限制本機分配給新使用者的uid、gid不要超過9999。
/etc/login.defs

UID_MIN 500
UID_MAX 9999
GID_MIN 500
GID_MAX 9999
CREATE_HOME yes

 

四、Linux Server加入AD網域

在將主機加入網域之前,需先確認AD主機及Linux主機時間不得相差超過5分鐘,建議設定同一網路校時服務(Network Time Protocol),並設定DNS或host使Linux主機得知AD網域伺服器的IP位址,任修改其中一種能查詢到網域即可。
/etc/resolv.conf

Nameserver 192.168.2.1

/etc/hosts

192.168.2.1        adserver.wei.com

 

由於Windows Server 2003的AD是採用Kerberos的認證機制,因此必須設定Kerberos相關設定檔以便和AD溝通。
/etc/krb5.conf

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = WEI.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

 WEI.COM = {
  kdc = ADSERVER.WEI.COM
 }

/var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 WEI.COM = {
  master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

 

完成以上設定後重新啟動Samba及Winbind並加入設開機啟動。

# service smb restart
# service winbind restart
# chkconfig smb on
# chkconfig winbind on

 

文字模式下指令加入wei.com 網域,aduser為AD網域之使用者,只需一般權限即可。

# net ads join -U aduser
aduser's password:

 

設定與AD伺服器溝通時的使用者(經測試是不需要作此動作的)。

# wbinfo --set-auth-user=aduser
Password:

 

一般Windows使用者在加入網域後存取不會有太大的問題,但Linux Clients使用者需要向Kerberos要求憑證(ticket)。可下指定測試取得Kerberos核發的憑證,取得後使用者不需要再輸入帳號密碼 存取資源,注意網域名稱要大寫,若密碼正確會跳回命令提示字元。

# kinit 網域帳號@WEI.COM

 

取得Kerberos核發的憑證後,可以看Kerberos核發的Kicket狀態。

# klist

 

測試讀取AD帳號資訊和取得系統帳號資訊。

# wbinfo -u | -g 取得網域帳號 | 群組
# getent passwd

 

參考文件:

http://michaeljoking.myip.org/modules/tad_book3/page.php?tbdsn=18

http://blog.yam.com/gavint/article/2590383

文章標籤

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

整合環境:

JDeveloper OAF in Windows 8:
Patch 17888411 for Oracle EBS R12.2.3
PC IP: 192.168.3.116

CVS Server in Oracle Linux:
R6.4 Kernel: 2.6.39-400.17.eluek.x86_64
Server IP: 192.168.3.50
HostName: oradb12clinux

一、安裝CVS

一般 Oracle Linux 已經內含 CVS 的套件[ cvs-1.11.xx(x86_64) & cvs-inetd-1.11.x(noarch) ],在安裝時記得勾選即可,若忘記勾選,等系統安裝完再從光碟安裝也可以。

csv_install  
  

1.先查看是否安裝 cvs,一般安裝在 /usr/bin/cvs

# which cvs
/usr/bin/cvs

# rpm -qa | grep cvs
cvs-1.11.23-15.el6.x86_64
cvs-inetd-1.11.23-16.el6.noarch

二、建立 Users and Groups

1. 建立cvs user group,便於管理cvs User
#groupadd cvs

2. 建立cvsroot User,屬於 cvs 群組,根目錄為/opt/cvs,不允許 login
# useradd -M -g cvs -s /sbin/nologin cvs <- 建立 cvs 的帳戶, 不建立 User Home: /home/cvs

3. 若需要建立 anonymous 帳號
# useradd -M -s /sbin/nologin anonymous

4. 將系統內其他會使用到 cvs 的 User 加入到 cvs 的 Group 中
# vi /etc/group
cvs:x:501:polinwei,anonymous,cvs

三、設定環境變數
# vi /etc/profile.d/cvs.sh 
export CVSROOT=/opt/cvs_root
export CVS_RSH=ssh (為了在 Windows 平台上的 JDeveloper 連入, 使用 SSH 連結較安全)

立即生效此環境變數
1) 重新登入
2) # export CVSROOT=/opt/cvs_root

四、建立目錄,改變/opt/cvs_root 的目錄屬性
# mkdir /opt/cvs_root
# chmod 775 /opt/cvs_root

五、初始化 Repository
# cvs init ( 或 # cvs -d /opt/cvs_root init ) <- 此指令會呼叫 $CVSROOT 環境變數,並在目錄 /opt/cvs_root 下建立目錄 CVSROOT
# chown -R root:cvs /opt/cvs_root
 
若是沒有指定 $CVSROOT 環境變數則使用下列參數
# cvs -d :localhost:/opt/cvs_root init

因為用 local 的模式在用 cvs,所以不用登入(login)
-d 是指定 CVSROOT 路徑,如果沒設環境變數就要使用此參數
init 代表要初始化 /opt/cvs 這個目錄

六、設定 xinetd
1) 在 /etc/xinetd.d/ 內已有 cvs 的設定檔
# vi /etc/xinetd.d/cvs
service cvspserver
{
        disable = no
        port                    = 2401
        socket_type       = stream
        protocol              = tcp
        wait                    = no
        user                    = root
        passenv              = PATH
        server                 = /usr/bin/cvs
        env                     = HOME=/opt/cvs_root
        server_args        = -f --allow-root=/opt/cvs_root pserver
        bind                    = 192.168.3.50
}
紅色的部份要注意,env 參數必須跟你所放置 CVS 目錄的位置一樣,server_args為登入時會用到的目錄名,bind 的 IP 改成您 Linux Server 的 IP。

2) 重新啟動 xinetd 並啟動 CVS Server
# service xinetd restart
# chkconfig cvs on

3) 檢查cvspserver服務是否已經啟動
# netstat -l |grep cvspserver

其結果如下:
tcp   0  0 oradb12clinux:cvspserver  *:*    LISTEN 

七、登入
若要使用其它使用者的話,指令: cvs -d :pserver:user_name@ip_address:/opt/cvs login

# cvs -d :pserver:polinwei@localhost:/opt/cvs_root login
Logging in to :pserver:cvs@localhost:2401/opt/cvs
CVS password:
cvs [login aborted]: connect to [localhost]:2401 failed: Connection refused

# cvs -d:pserver:polinwei@oradb12clinux:/opt/cvs_root login
Logging in to :pserver:polinwei@oradb12clinux:2401/opt/cvs_root
CVS password:
[root@oradb12clinux CVSROOT]#
若正確則會直接回到 # 提示符號,表示 CVS Server 已正常運作

八、Windows Client 程式端 JDeveloper 的設定

1) 設定CVS連結

01_cvs_conn02_cvs_ssh

注意: Repository Path 是設定 Linux 主機端上的目錄,為 /opt/cvs_root

03_cvs_root04_cvs_test  

 

2) 將 oracle 的 workplace 當作 CVS 的 module 滙入 (import) 及 匯出 (Checkout)

cvs_import_01.png

cvs_import_02.png

cvs_import_03.png

CVS 的匯入其實是將整個目錄下的資料 import 進來

cvs_import_04.png

選擇那些檔案不要匯入

cvs_import_05.png

滙入完後是否執行 checkout

cvs_import_06.png

cvs_import_07.png

輸入Linux主機上此帳號的密碼

cvs_import_08.png  

因在 import 後有執行 Checkout,發現在 JDevloper 上的 程式架構都亂七八糟了。沒關係,先將這些都移除

cvs_checkout_remove.png  
  

3) 將 CVS 的 Module: toolbox 滙出至 %JDEV_USER_HOME% 目錄下

 cvs_checkout_01.png

cvs_checkout_02.png  

將這些再從 JDeveloper 中再移除一次, 將檔仍會留在 %JDEV_USER_HOME%/toolbox 目錄下

cvs_checkout_remove.png

從目錄 %JDEV_USER_HOME%/toolbox 再將 toolbox.jws 加入

cvs_checkout_03.png

就可以看到已有 CVS 程式序號控制了.

cvs_checkout_04.png  

可以發現為何 test_fwktutorial.jsp 沒有序號控制呢? 那是因為這些共用程式是放在 %JDEV_USER_HOME%/myhtml 下的.


A. 額外進階設定:pserver (Password Server) 帳號/密碼設定

1) 為避免其它人經由 cvs 來 try password,建議可以 cvs 帳號和系統帳號分開。
# vi /opt/cvs/CVSROOT/passwd <- 該檔原本並不存在
格式為:帳號:密碼:系統帳號
ex: jdev_user:xxxxxx:usercvs

a. jdev_user 為登入 cvs 的帳號,/etc/passwd 內不需要有這個帳號
b. xxxxxx 為登入的密碼,經由 md5 編碼過,由此密碼可以建立 /opt/cvs/passwdgen.pl 來產生,如果需要密碼為:123456,則敲入# /opt/cvs/CVSROOT/passwdgen.pl "123456" ,回傳即可得到加密密碼,用其替換 passwd 檔中的 xxxxxx
c. cvs 登入後對應到 /etc/passwd 內這個帳號的權限

/opt/cvs/passwdgen.pl 檔案建立:

# su - cvs
> vi /opt/cvs/passwdgen.pl
#!/usr/bin/perl
srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);
print "${crypttext}\n";

改變權限及owner
#chmod 755 passwdgen.pl
#chown cvs:cvs passwdgen.pl

2) 編輯 /opt/cvs/CVSROOT/config
將 #SystemAuth=no 前的注解拿掉,該行的意思是登入的帳號不在 cvs 的 passwd 裡時,是否要對應到系統帳號。

設定 CVS 執行時所需的 lock 的目錄:LockDir=/opt/cvs_root/lock,並建立及改變此目錄權限
# pwd
/opt/cvs_root
# mkdir lock
# chmod -R 775 lock
# chown -R root:cvs lock
# service xinetd restart

3) 增加 anonymous 登入
新增 anonymous:md5密碼:nobody 至 /opt/cvs/CVSROOT/passwd 中
表示 anonymous 登入的權限是 nobody
若新增此行則 /cvs 需修改權限
#chmod o+rx /cvs

4) 設定 anonymous 權限為唯讀
# vi /opt/cvs/CVSROOT/readers
anonymous <- 新增 anonymous,該檔列表內所有帳號都只有唯讀權限,格式為一行一個帳號。

B. 指令模式
 cvs -d "CVSROOT" command
 若有用環境變數指定 CVSROOT,則可省略 -d "CVSROOT" 的參數
 CVSROOT 通常為 ":pserver:user_name@ip_address:cvs_path" 的格式,如:# export CVSROOT=:pserver:jdev_user@localhost:/opt/cvs

 cvs -d "CVSROOT" login:登入
 cvs -d "CVSROOT" import profile:將 profile 這個專案新增到 server 上
 cvs -d "CVSROOT" checkout profile:將 server 上 profile 專案整個抓下來
 cvs -d "CVSROOT" logout:登出
 cvs status <project>:列出該 project 內每個檔案的記錄
 cvs history <project>:列出該 project 內每個檔案的修改歷史記錄
 cvs annotate <pooject>:列出該 project 內每個檔案最後一次修改的記錄 

參考:

http://hsinichi.pixnet.net/blog/post/4524770-cvs-server-for-linux-%E5%AE%89%E8%A3%9D%E6%AD%A5%E9%A9%9F

http://blog.yam.com/gavint/article/2590383

http://forums.gentoo.org/viewtopic-t-55659-start-0.html

http://www.chedong.com/tech/cvs_card.html

http://www.crazysquirrel.com/computing/debian/servers/cvs.jspx

文章標籤

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

環境:

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) 人氣()