跳至內容

RAC 攻擊 - Oracle 叢集資料庫實戰/RAC 攻擊自動化

來自華夏公益教科書,開放的書籍,開放的世界

無論您是已經做過早期實驗室幾十次的參與者,還是專注於後期實驗室的課程的講師,跳過早期實驗室並專注於 RAC 攻擊課程中的後期實驗室通常很有用。目前正在開發和測試用於自動化 RAC 攻擊實驗室的程式碼。


此頁面將包含有關自動構建標準 RAC 攻擊環境的說明。

快速入門

[編輯 | 編輯原始碼]

目前,我們正在努力自動化第三和第四個實驗室 - 安裝 Linux建立叢集

  1. 完成前三個實驗室:硬體要求軟體元件準備主機。不要下載 Oracle Linux;只需下載資料庫和叢集軟體。
  2. 下載並安裝 Vagrant 1.5.1
  3. 下載並解壓縮 http://racattack.org/vagrantfile.zip(請注意,此檔案經常更改,因為我們正在對其進行處理)
  4. 開啟命令提示符並更改為解壓縮 vagrantfile.zip 的目錄
  5. cd vagrantfile-master\OracleLinux\racattack12cR1
  6. vagrant up
  7. vagrant ssh collabn1
  8. sudo su - oracle -c vncserver
  9. 執行您選擇的 vnc 客戶端並連線到 vnc://192.168.78.51:1
  10. http://racattack.org/listhttps://github.com/racattack/vagrantfile/issues 上討論問題

您現在可以跳到 連線到虛擬機器

此專案由 RAC 攻擊團隊 提供給您


初始版本:Alvaro Miranda 14/04


對於此實現,我們將使用 Vagrant 來管理 VirtualBox 並自動執行部署。

此實現中使用的軟體

[編輯 | 編輯原始碼]

除了 RAC_Attack_12c/軟體元件 中列出的用於 SSH、VNC、網格和資料庫元件的軟體外,以下軟體已在此實現中使用和測試。

已知可用的作業系統

[編輯 | 編輯原始碼]

此實現已使用以下作業系統進行測試

  • Windows 7 Professional 64 位
  • OracleLinux 6.5 64 位
  • Apple Mac OS X 10.9.2

客戶機中使用的作業系統

[編輯 | 編輯原始碼]

客戶機中使用的作業系統是 Oracle Linux 6.5 + 更新。

使用的映象版本反映了建立和更新映象的日期

alvaros-mini:oracle65 alvarom$ vagrant box outdated --global

* 'racattack/oracle65' (v14.03.29) is up to date

alvaros-mini:oracle65 alvarom$

此版本的 racattack/oracle65 已建立並更新至 14.03.29


硬體要求

[編輯 | 編輯原始碼]
  1. 請檢視 RAC_Attack_12c/硬體要求 並檢查您是否滿足最低硬體要求。

軟體元件

[編輯 | 編輯原始碼]
  1. 轉到 RAC_Attack_12c/Software_Components 並確保您擁有其中列出的所有軟體元件。



對於本實驗,您需要 vagrant,請訪問 www.vagrantup.com/downloads.html,下載並安裝 vagrant 軟體。

Vagrant 簡介 - Vagrant 101

[編輯 | 編輯原始碼]

在本實驗中,我們將使用 vagrant,但是讀者可以訪問 Vagrant 文件 以瞭解在本實驗之外哪些其他功能可能有用。


why-vagrant 頁面

Vagrant 提供易於配置、可重複使用且可移植的工作環境,這些環境構建在行業標準技術之上,並由一個一致的工作流程控制,以幫助最大限度地提高您和您的團隊的生產力和靈活性。


軟體安裝完成後,正常的部署過程如下


  1. 下載一個 vagrant 盒子
  2. 建立一個 Vagrantfile



讓我們使用 vagrant 執行一些命令


alvaros-mini:~ alvarom$ vagrant --help
 Usage: vagrant [options] <command> [<args>]
 -v, --version Print the version and exit.
 -h, --help Print this help.

alvaros-mini:~ alvarom$ vagrant --version
Vagrant 1.5.1

alvaros-mini:~ alvarom$ vagrant box list

alvaros-mini:~ alvarom$


vagrant box

[編輯 | 編輯原始碼]

一個 vagrant 盒子是一個虛擬機器模板,其中包含專門為 vagrant 制定的配置。為了建立一個盒子,您需要按照 基本盒子文件 中列出的步驟進行操作。

本實驗中使用的盒子是使用 packer 版本 0.5.2 建立的。

從 vagrant 1.5.x 開始,您可以使用一個簡單的命令從網際網路下載盒子。

vagrant box add racattack/oracle65

這將下載本實驗使用的基本盒子。

此時,盒子 racattack/oracle65 位於您的系統中,您可以使用它。

Vagrantfile

[編輯 | 編輯原始碼]

Vagrant 檔案是自動化開始的地方,它將包含有關使用哪個盒子、從哪裡獲取盒子以及在 Vagrantfile 中列出的自定義操作的資訊。

根據 vagrantfile 文件,Vagrantfile 是

Vagrantfile 的主要功能是描述專案所需的機器型別,以及如何配置和配置這些機器。Vagrantfile 被稱為 Vagrantfile 是因為檔案的實際文字檔名是 Vagrantfile(大小寫無關)。

Vagrant 旨在每個專案執行一個 Vagrantfile,並且 Vagrantfile 應該被提交到版本控制。這允許參與專案的其他開發人員簽出程式碼,執行 vagrant up,然後開始工作。Vagrantfile 在 Vagrant 支援的每個平臺上都是可移植的。

Vagrantfile 的語法是 Ruby,但無需瞭解 Ruby 程式語言即可修改 Vagrantfile,因為它主要只是簡單的變數賦值。事實上,Ruby 甚至不是 Vagrant 使用最廣泛的社群,這應該向您表明,即使沒有 Ruby 知識,人們也能在 Vagrant 上取得成功。

要建立一個新的 Vagrantfile,您可以


vagrant init racattack/oracle65


這將在我們執行此命令的目錄中建立一個簡單的 Vagrantfile。


讓我們列舉一下我們到目前為止學到的知識


要下載一個 vagrant 盒子

  • vagrant box add racattack/oracle65


要列出我們系統中的盒子

  • vagrant box list


要建立一個初始 Vagrantfile

  • vagrant init racattack/oracle65


我們將使用的其他命令是


要啟動/建立一個新的虛擬機器

  • vagrant up

要連線到虛擬機器

  • vagrant ssh

要重啟虛擬機器

  • vagrant reload


要停止虛擬機器

  • vagrant halt

要檢查虛擬機器的狀態

  • vagrant status



要刪除虛擬機器

  • vagrant destroy

實驗室:建立 test1 虛擬機器

[編輯 | 編輯原始碼]

在本實驗中,我們將建立一個簡單的 test1 虛擬機器。


  • vagrant box add racattack/oracle65
  • vagrant box list
  • mkdir test1
  • cd test1
  • vagrant init racattack/oracle65
  • vagrant up
  • vagrant reload
  • vagrant halt
  • vagrant destroy

以下是我測試機器上的輸出

alvaros-mini:~ alvarom$ vagrant box add racattack/oracle65
==> box: Loading metadata for box 'racattack/oracle65'
    box: URL: https://vagrantcloud.com/racattack/oracle65                                                                                                                                     
==> box: Adding box 'racattack/oracle65' (v14.03.29) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/racattack/oracle65/version/1/provider/virtualbox.box                                                                                           
==> box: Successfully added box 'racattack/oracle65' (v14.03.29) for 'virtualbox'!
alvaros-mini:~ alvarom$ 

alvaros-mini:~ alvarom$ vagrant box list
racattack/oracle65 (virtualbox)
alvaros-mini:~ alvarom$ 

alvaros-mini:~ alvarom$ mkdir test1
alvaros-mini:~ alvarom$ cd test1
alvaros-mini:test1 alvarom$ vagrant init racattack/oracle65
A `Vagrantfile` has been placed in this directory. 
You are now ready to `vagrant up` your first virtual environment! 
alvaros-mini:test1 alvarom$ 


alvaros-mini:test1 alvarom$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'racattack/oracle65'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'racattack/oracle65' is up to date...
==> default: Setting the name of the VM: test1_default_1396308377657_73917
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Error: Connection timout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/alvarom/test1
alvaros-mini:test1 alvarom$ 


alvaros-mini:test1 alvarom$ vagrant ssh
[vagrant@oracle65-racattack ~]$ id
uid=500(vagrant) gid=500(vagrant) groups=500(vagrant)
[vagrant@oracle65-racattack ~]$ hostname
oracle65-racattack
[vagrant@oracle65-racattack ~]$ sudo su -
[root@oracle65-racattack ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@oracle65-racattack ~]# exit
logout 
[vagrant@oracle65-racattack ~]$ exit
logout
Connection to 127.0.0.1 closed.
alvaros-mini:test1 alvarom$ 


alvaros-mini:test1 alvarom$ vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'racattack/oracle65' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Error: Connection timout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/alvarom/test1
==> default: VM already provisioned. Run `vagrant provision` or use `--provision` to force it
alvaros-mini:test1 alvarom$ 

alvaros-mini:test1 alvarom$ vagrant halt
==> default: Attempting graceful shutdown of VM...
alvaros-mini:test1 alvarom$

alvaros-mini:test1 alvarom$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Destroying VM and associated drives...
alvaros-mini:test1 alvarom$


恭喜,您已使用 Vagrant 建立並銷燬了您的第一個虛擬機器。

RAC 攻擊自動化

[編輯 | 編輯原始碼]

此時,在 RAC 攻擊架構 中,我們處於第一步。

RAC Attack 12c architecture

我們的架構圖如下所示


程式碼

[編輯 | 編輯原始碼]

此自動化實現的程式碼可以在 [racattack.org/code] 找到。

從程式碼中,我們感興趣的是 racattack/vagrantfile 倉庫。

有兩種方法可以下載程式碼

  1. 下載 zip 檔案
  2. 使用 git

下載 zip 檔案

[編輯 | 編輯原始碼]

一個包含本專案所需所有檔案的 zip 檔案可以下載為:https://github.com/racattack/vagrantfile/archive/master.zip

下載,解壓縮

您完成了。

使用 git

[編輯 | 編輯原始碼]

如果您熟悉 git,您可以下載此倉庫的副本,如下所示

git clone https://github.com/racattack/vagrantfile

如果您安裝了 github 軟體,那麼您可以 點選此連結

檢視 racattack/vagrantfile

[編輯 | 編輯原始碼]

在將倉庫下載到您的計算機本地後,您將得到類似於以下結構的內容

.
|-- OracleLinux
| |-- README.md
| `-- racattack12cR1

轉到 OracleLinux/racattack12cR1 目錄

cd OracleLinux/racattack12cR1

結構將類似於以下內容

.
|-- 12cR1
| |-- <scripts>
| `-- readme.txt
|-- Vagrantfile
`-- stagefiles
| |-- <scripts>
` `-- readme.txt

在我們建立第一個叢集之前

[編輯 | 編輯原始碼]

現在一切都已就緒,我們可以檢查叢集的狀態


alvaros-mini:racattack12cR1 alvarom$ vagrant status

collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52
collabn2 dns server role is slave
on first boot shared disks will be created, this will take some time

collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51
collabn1 dns server role is master
Current machine states:
collabn2 not created (virtualbox)
collabn1 not created (virtualbox)
This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
alvaros-mini:racattack12cR1 alvarom$

此輸出告訴我們什麼?

它顯示了 2 個節點

collabn2 not created (virtualbox)
collabn1 not created (virtualbox)

它顯示了我們可以透過以下網路詳細資訊訪問它們

collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52
collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51

這意味著我們將從單個節點遷移到 2 個節點。

這也意味著我們離 RAC 攻擊架構又近了一步。

RAC attack architecture step2

stagefiles/*.sh 中提供的指令碼將完成 Oracle RAC 叢集所需的所有配置。

racattack12cR1
`-- stagefiles
| `-- <scripts>

如果我們檢視 vagrant status 的輸出,我們還有

collabn2 dns server role is slave
collabn1 dns server role is master

這意味著當我們配置我們的實驗室時,collabn1 將是 DNS 伺服器主節點,而 collabn2 將是 DNS 伺服器從節點。

其他資訊是

on first boot shared disks will be created, this will take some time

也就是說,在首次執行 vagrant up 時,Vagrant 使用我們的 Vagrantfile 將為正確安裝 Oracle RAC 12cR1 設定我們所需的一切。

此時,您可以執行 vagrant up 來建立您的第一個使用此專案的 2 節點 RAC 叢集。

vagrant up

[edit | edit source]

vagrant up 命令將讀取 Vagrantfile 並建立該檔案中的內容。

此專案的 Vagrantfile 已經過測試和改進,並完成了 Oracle RAC 12cR1 安裝所需的所有作業系統要求,沒有任何問題。

順序很重要

[edit | edit source]

Vagrant 從上到下執行指令碼並建立機器,因此對於高階使用,我們可能最終會在配置完成後安裝軟體或執行一些任務,因此,我們需要所有節點都啟動並執行,因此我們將首先執行 collabn2,然後執行 collabn1。這樣一來,一旦 collabn1 啟動並執行,我們就可以確保一切都啟動並準備就緒。

檢視 vagrant up 輸出

[edit | edit source]

讓我們檢視輸出。

可以在專案頁面上的 https://github.com/racattack/vagrantfile/blob/master/OracleLinux/vagrant-up.log 找到 示例 vagrant up 日誌,以便在執行自己的執行之前進行檢視。

在此階段,基本框已匯入。

==> collabn2: Importing base box 'kikitux/oracle65-racattack'...


在此階段,該框將從模板中重新命名為適合我們的名稱。

==> collabn2: Setting the name of the VM: collabn2.1404011431

Vagrant 魔術

==> collabn2: Clearing any previously set network interfaces...
==> collabn2: Preparing network interfaces based on configuration...

pre-boot 部分,將建立共享磁碟。我們將在後面回顧這一點。

==> collabn2: Running 'pre-boot' VM customizations...

啟動虛擬機器並設定主機名

==> collabn2: Booting VM...
==> collabn2: Waiting for machine to boot. This may take a few minutes...
==> collabn2: Setting hostname...

掛載共享資料夾

==> collabn2: Mounting shared folders...
collabn2: /vagrant => /Users/alvarom/racattack12cR1
collabn2: /media/sf_12cR1 => /Users/alvarom/racattack12cR1/12cR1
collabn2: /media/stagefiles => /Users/alvarom/racattack12cR1/stagefiles

執行指令碼

==> collabn2: Running provisioner: shell...

共享磁碟

[edit | edit source]

為了更接近 RAC Attack 12cR1 架構,我們需要有共享磁碟。


此實現將在首次啟動時自動執行 RacAttack Create_Virtualbox_Shared_Storage 步驟

讓我們檢查 collabn1

alvaros-mini:racattack12cR1 alvarom$ vagrant status
collabn2 running (virtualbox)
collabn1 running (virtualbox)

讓我們連線到 collabn1 併成為 root 使用者

alvaros-mini:racattack12cR1 alvarom$ vagrant ssh collabn1 
[vagrant@collabn1 ~]$ sudo su -  
[root@collabn1 ~]#

讓我們檢查磁碟。

  • udev 磁碟
[root@collabn1 ~]# ls -al /dev/asm* /dev/sd*
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk1 -> sdc1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk2 -> sdd1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk3 -> sde1
lrwxrwxrwx 1 root root 4 Apr 1 01:35 /dev/asmdisk4 -> sdf1
brw-rw---- 1 root disk 8, 0 Apr 1 01:35 /dev/sda
brw-rw---- 1 root disk 8, 1 Apr 1 01:35 /dev/sda1
brw-rw---- 1 root disk 8, 2 Apr 1 01:35 /dev/sda2
brw-rw---- 1 root disk 8, 3 Apr 1 01:35 /dev/sda3
brw-rw---- 1 root disk 8, 16 Apr 1 01:35 /dev/sdb
brw-rw---- 1 root disk 8, 32 Apr 1 01:35 /dev/sdc
brw-rw---- 1 grid asmadmin 8, 33 Apr 1 01:35 /dev/sdc1
brw-rw---- 1 root disk 8, 48 Apr 1 01:35 /dev/sdd
brw-rw---- 1 grid asmadmin 8, 49 Apr 1 01:35 /dev/sdd1
brw-rw---- 1 root disk 8, 64 Apr 1 01:35 /dev/sde
brw-rw---- 1 grid asmadmin 8, 65 Apr 1 01:35 /dev/sde1
brw-rw---- 1 root disk 8, 80 Apr 1 01:35 /dev/sdf
brw-rw---- 1 grid asmadmin 8, 81 Apr 1 01:35 /dev/sdf1
[root@collabn1 ~]#

我們有 4 個共享磁碟:sdc、sdd、sde、sdf。我們有持久別名


  • OracleASM 磁碟
[root@collabn1 ~]# ls -al /dev/oracleasm/disks/
total 0
drwxr-xr-x 1 root root 0 Apr 1 01:35 .
drwxr-xr-x 4 root root 0 Apr 1 01:35 ..
brw-rw---- 1 grid asmadmin 8, 33 Apr 1 01:35 ASMDISK1
brw-rw---- 1 grid asmadmin 8, 49 Apr 1 01:35 ASMDISK2
brw-rw---- 1 grid asmadmin 8, 65 Apr 1 01:35 ASMDISK3
brw-rw---- 1 grid asmadmin 8, 81 Apr 1 01:35 ASMDISK4
[root@collabn1 ~]#

共享磁碟已建立,許可權已設定。準備使用。

再次說明,這意味著我們又向 RAC Attack 12cR1 架構邁進了一步。

RAC_ATTACK Architecture step3

預設情況下包含的內容

[edit | edit source]

除了已經提供的詳細說明之外,此自動化指令碼還執行以下操作

  • 建立所需的組,以根據 Oracle RAC 手冊進行角色分離
  • 建立使用者 grid
  • 更新使用者 oracle 的組
  • 初始化 sdb 磁碟以用於 oracle 二進位制檔案,將其掛載為 /u01
  • 設定主節點 (collabn1) 從節點 (collabn2) 的 DNS 設定
  • 為 grid 使用者設定 ulimit,用於角色分離

預設使用者和密碼

[edit | edit source]
  • 使用者 root,密碼 root
  • 使用者 grid,密碼 grid
  • 使用者 oracle,密碼 oracle

連線到虛擬機器

[edit | edit source]

現在,您可以透過兩種方式連線到虛擬機器。

  • vagrant ssh collabn1,然後 sudo su - 成為 root 使用者。
You can became grid   user as  sudo su - grid from vagrant
You can became oracle user as  sudo su - oracle from vagrant
  • 使用 ssh/putty 連線到 IP 地址。

您的筆記型電腦已連線到兩個網路,LAN 192.168.78 和 priv 172.16.100.51。

因此,您可以直接使用 ssh 連線到機器。

collabn2 eth1 lanip :192.168.78.52
collabn2 eth2 privip :172.16.100.52

collabn1 eth1 lanip :192.168.78.51
collabn1 eth2 privip :172.16.100.51

恭喜

[edit | edit source]

此時,您已擁有一個 2 節點叢集,所有準備就緒。

這意味著我們 100% 符合 RAC Attack 12cR1 架構,恭喜您。

RAC Attack 12c architecture

下一步

[edit | edit source]

將您下載的 oracle 二進位制檔案 zip 檔案放在 racattack12cR1/12cR1 中。


12cR1/linuxamd64_12c_grid_1of2.zip
12cR1/linuxamd64_12c_grid_2of2.zip 
12cR1/linuxamd64_12c_database_1of2.zip
12cR1/linuxamd64_12c_database_2of2.zip

配置 VNC 會話,或使用 X11,方法如下:RAC_Attack_12c/VNC_Server_Setup

使用 oracle 帳戶配置 VNC 伺服器(密碼不會顯示)。

[root@collabn1 ~]# su - oracle
[oracle@collabn1 ~]$ vncserver :1

You will require a password to access your desktops.

Password: racattack
Verify: racattack
xauth:  creating new authority file /home/oracle/.Xauthority

New 'collabn1.racattack:1 (oracle)' desktop is collabn1.racattack:1

Creating default startup script /home/oracle/.vnc/xstartup
Starting applications specified in /home/oracle/.vnc/xstartup
Log file is /home/oracle/.vnc/collabn1.racattack:1.log

在您的筆記型電腦上開啟 vncviewer,並填寫 collabn1 的 IP 地址,後跟  :1


RA-VNCViewer-Connect form

出現提示時輸入密碼 racattack

RA-VNCViewer-Password form

圖形介面已準備好進行網格基礎設施安裝。

RA-VNCViewer-Connected


當您進行到網格基礎設施的介面設定時,請記住,由於 Vagrant 的要求,介面與 12cR1 手冊中的介面不同。

準備好配置網路時,您需要執行以下操作

單擊 識別網路介面...

檢查是否設定了正確的地址

  • eth0 標記為 不使用
  • eth1 標記為 公共
  • eth2 標記為 專用

單擊 確定 關閉 識別網路介面 視窗。

最後,單擊 下一步

現在,您可以參考 RAC Attack 12cR1 手冊,並從 RAC_Attack_12c/Prepare_for_GI_install 開始。

更新基本框

[edit | edit source]

截至今天,racattack/oracle65 的版本為 14.03.29。

這是基本框,用於建立新的來賓機器的框。

當建立新的來賓機器時,即在您首次執行 vagrant up 或在執行 vagrant detroy 後想要重新建立系統時。

為了驗證您是否使用的是最新版本,請使用命令 vagrant box outdated --global

alvaros-mini:racattack12cR1 alvarom$ vagrant box outdated --global
* 'racattack/oracle65' (v14.03.29) is up to date
alvaros-mini:racattack12cR1 alvarom$

這將檢查已安裝的基本框的版本。


當有新版本釋出時,更新基本框的命令為 vagrant box update

示例輸出

alvaros-mini:racattack12cR1 alvarom$ vagrant box update
==> default: Checking for updates to 'racattack/oracle65'
default: Version constraints: >= 0
default: Provider: virtualbox
==> default: Box 'racattack/oracle65' (v14.03.29) is running the latest version.

更新作業系統

[edit | edit source]

如果您需要更新來賓機器的作業系統,這些機器配置為使用 Oracle 的 public-yum

這意味著您可以透過執行 yum update 來更新。

有關 yum 的更多資訊,請訪問 http://docs.oracle.com/cd/E37670_01/E37355/html/ol_about_yum.html

RAC Attack 自動化/高階使用


RAC_Attack_12c

華夏公益教科書