有關Oracle透明網關的若干使用方法介紹

 

 


  Oracle 數據庫的透明網關( transparent gateway )是這樣的一個接口:通過它,我們可以 sqlplus 操縱其他數據庫,如 ms sqlserver 、 sybase 、 infomix 等,實現數據庫的異構服務。我一直在找 8i 的透明網關,但是沒有; 9i 就有了, 9 i 連接 sqlserver 的透明網關在 9i for nt/2000 的安裝盤上。
  
  本文以 oracle 連接 sqlserver 爲例,敘述一下配置的主要步驟。
  
  網絡 結構
  服務器 一: sqlserver , ip 爲 147.25.8.1 , port 爲 1433 ;
  
  服務器二: oracle 9i server 和透明網關, ip 爲 147.25.8.11 , port 爲 1521 ;
  
  服務器三: oracle server , ip 爲 147.25.8.111 , port 爲 1521 ;
  
  客戶機: sqlnet + sqlplus ,或其他客戶端軟件
  
  安裝 / 配置 oracle 9i server 和透明網關
  
  安裝: 在服務器二上安裝 9i server for nt/2000 ,必須選擇透明網關( transparent gateway for ms sqlsvr )。
  
  在服務器二上安裝 sqlsvr 的客戶端程序。
  
  配置: 在服務器二上正常配置 listener , port 口爲 1521 ;
  
  在服務器二上配置 listener.ora ,在 SID_LIST 中加入:
  
  ( SID_NAME = SID_NAME ) --------- 自己修改
  
  ( ORACLE_HOME = 《 ORACLE_HOME 》)
  
  ( PROGRAM = tg4msql ) ---------- 這是透明網關的目錄
  
  在服務器二上配置透明網關的配置文件(《 ORACLE_HOME 》 tg4msqladmininitSID_NAME.ora ),明確:
  
  HS_FDS_CONNECT_INFO = “SERVER = 147.25.8.1;DATABASE = pubs”
  
  在服務器二上配置 sqlsvr 的客戶連接:
  
  SERVER NAME = SERVER NAME -------- 自己修改
  
  SERVER = 147.25.8.1
  
  PORT = 1433
  
  PROTOCOL = TCP/IP SOCKET
  
  在服務器三上配置 tnsnames.ora ,加入一個 tns :
  
  MSSQL =
  
  (DESCRIPTION =
  
  (ADDRESS_LIST =
  
  (ADDRESS =
  
  (PROTOCOL = TCP)
  
  (HOST = 147.25.8.11)
  
  (PORT = 1521)))
  
  (CONNECT_DATA =
  
  (SID = SID_NAME)) --------SID 自己修改(與上文一致)
  
  (HS = OK)
  
  )
  
  測試
  服務器一: 啓動 sqlserver ,確認用戶 sa 及其密碼(或另外建用戶、建表)。
  
  服務器二: 啓動 listener 。 oracle 數據庫不需要啓動。
  
  服務器三: sqlplus scott/tiger
  
  create database link mssql connect to sa identified by password using ‘mssql';
  
  select * from sales@mssql;
  
  如果無誤,配置透明網關成功。
  
  其他
  使用透明網關只可以用標準的 DML ;
  
  服務器一二三還可以是一個服務器,也可以任意組合成兩個服務器;但是服務器二所在的服務器必須是 windows nt/2000 server 平臺;
  
  透明網關可以同時連接多個 sqlsvr ,方法是加入多個 SID_LIST 和相應的 initSID_NAME.ora 配置文件;
  
  可能會遇到中文字符顯示成亂碼的情況,這可能是由於 sqlsvr 的服務器和客戶端的程序不是一個版本引起的。我正在測試。
    vnc server配置
1。使用root用戶啓動系統的vncserver服務;
#service vncserver start
2。然後切換到登陸用戶下面,我這裏假設要使用oracle系統帳戶進行遠程登陸
#su - oracle
3。使用oracle用戶輸入以下命令:
$vncserver
如果是第一次運行,則系統會出現提示信息,提示你輸入密碼,這是通過終端進行登陸時需要輸入的;
另外,還有一個數字信息,這個也是需要在終端登陸時輸入的,即冒號後面跟着的一個數字,如:1  ,:2等等,需要記住;
4。在windows客戶端使用vncviewer,輸入如下:xxx.xxx.xxx.xxx:1 或者xxx.xxx.xxx.xxx:2等,後面的數字需要和服務器端的對應才行;xxx是你服務器的ip地址了;
[linux as 5]
 軟件要求
其他所需程序包的版本(或更高版本):
        gcc-2.96-124
        make-3.79
        binutils-2.11
        openmotif-2.1.30-11
        glibc-2.2.4-31
要查看系統上安裝了這些程序包的哪些版本,運行以下命令:
rpm -q gcc make binutils openmotif glibc setarch
p4198954_21_linux.zip 在運行 runInstaller 之前打.
rpm -ivh compat-oracle-rhel4-1.0-5.i386.rpm     (p4198954_21_linux.zip)
 (不打PATH也可以)
安裝 libaio-0.3.102-1.i386.rpm 和libaio-devel0.3.102-1.i386.rpm
  在Red Hat Enterprise Linux 介質的第三張 CD
  以 root 用戶身份運行以下命令:
rpm -ivh /mnt/cdrom/RedHat/RPMS/ libaio-0.3.102-1.i386.rpm

創建數據庫安裝的準備工作:
1,創建user/group;
groupadd dba
groupadd oinstall
useradd oracle -g oinstall -G dba
passwd oracle
如果nobody用戶不存在(id nobody命令查看),則創建:
useradd nobody
2,建立oracle安裝文件夾(sample);
mkdir -p /opt/oracle/10.2.0.1 /opt/oracle/oradata /opt/oracle/archivelog
chown -R oracle.oinstall  /opt/oracle
chmod 755 -R /opt/oracle
2, 配置環境變量;
要使用 Oracle 產品,應該或必須設置幾個環境變量。
如果您在同一服務器上安裝了多個 Oracle 產品或數據庫,則 ORACLE_HOME、ORACLE_SID 和 PATH 變量可能會更改。
ORACLE_BASE 變量不應更改,並可以在需要時在您的登錄配置文件中設置它。Oracle 提供了一個稱作 oraenv 的實用程序來設置其他變量。
對於數據庫服務器,建議設置以下環境變量:
使用root用戶:
 
vi /home/oracle/.bash_profile
以下是配置文件的內容
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/10.2.0.1
ORACLE_SID=ge01
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH     
TNS_ADMIN=$ORACLE_HOME/network/admin
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID  TNS_ADMIN NLS_LANG LANG
   
4, 設置系統參數;
 Oracle 數據庫 10g 需要以下所示的內核參數設置。
 一般情況下可以設置最大共享內存 爲物理內存的一半,如果物理內存是 2G,則可以設置最大共享內存爲 1073741824,
如上;如物理內存是 1G,則可以設置最大共享內存爲 512 * 1024 * 1024 = 536870912;以此類推。在redhat上最大共享內存不建議超過
  4*1024*1024*1024-1=4294967295
切換到root用戶:
su root
 修改vi /etc/sysctl.conf, 添加:
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144
修改後運行"/sbin/sysctl -p"命令使得內核改變立即生效;
B) 設置oracle對文件的要求:
編輯文件:vi /etc/security/limits.conf 加入以下語句:
oracle           soft    nproc           2047
oracle           hard    nproc           16384
oracle           soft    nofile          1024
oracle           hard    nofile          65536
編輯文件:vi /etc/pam.d/login 加入以下語句(可能應該加在最後一條規則之前): session    required     /lib/security/pam_limits.so 設置oraInst.loc文件:
[root@enterprice64 ~]#vi /etc/oraInst.loc 
inventory_loc=/opt/oracle/oraInventory
inst_group=oinstall
[root@enterprice64 ~]#chown oracle.oinstall /etc/oraInst.loc
確保/etc/oraInst.loc中包含上面的信息,且Oracle包含訪問權限。
5.解壓縮Oracle10G的安裝文件 :
 使用Oracle用戶登陸:
su - oracle
在/home/oracle 上傳和解壓縮10201_database_linux32.zip:
unzip 10201_database_linux32
6.開始安裝oracle
L i n u x 命令行環境下安裝(也可以在圖形界面下安裝)
使用Oracle用戶登陸:
su - oracle
根據希望安裝的數據庫版本類型選擇Silent安裝模式的response_file文件的類似,比如:enterprise.rsp、standard.rsp還是custom.rsp。
這裏選擇enterpise.rsp類型,安裝盤中的database/response目錄下對應的response文件拷貝出來,根據文件裏面的提示對輸入值進行修改。
比如這個例子中對如下的參數進行設置:
UNIX_GROUP_NAME="oinstall"
FROM_LOCATION="/home/oracle/database/stage/products.xml"
ORACLE_BASE="/opt/oracle"
ORACLE_HOME="/opt/oracle/10.2.0.1"
ORACLE_HOME_NAME="OraDbHome1"
SHOW_INSTALL_PROGRESS_PAGE= true
SHOW_END_OF_INSTALL_MSGS= true
COMPONENT_LANGUAGES=
s_nameForDBAGrp= "dba"
s_nameForOPERGrp="dba"
INSTALL_TYPE="EE"
n_configurationOption=3
RESTART_SYSTEM=false
RESTART_REMOTE_SYSTEM=false
注意,所有的字符串需要放在雙引號中,注意大小寫。數字和布爾變量直接寫就可以。
由於這裏沒有選擇建立數據庫而只安裝軟件,因此沒有設置數據庫相關的配置參數。
[oracle@enterprice64 data]$ chmod 700 enterprise.rsp
面可以開始SILENT安裝了:
注意,響應文件需要使用絕對路徑。
cd /home/oracle/database
[oracle@enterprice64 database]$ ./runInstaller -silent -responseFile /home/oracle/enterprise.rsp
用root執行如下腳本:
/opt/oracle/10.2.0.1/oraInventory/orainstRoot.sh
/opt/oracle/10.2.0.1/root.sh
不過這裏Oracle存在一個bug,在root.sh腳本中,自動將OUI_SILENT參數設置爲TRUE,而後的檢查中,
如果發現這個值爲TRUE,那麼這個腳本運行會自動退出了。這裏需要手工將其修改爲false,
最後使用root執行一下$ORACLE_HOME/root.sh腳本就可以了。
根據提示按 Enter 就可以了。
這樣就在字符下成功安裝了。
通過SILENT模式安裝數據庫之後,下面繼續使用SILENT模式進行數據庫的建立,
仍然是拷貝安裝目錄下的/home/oracle/database/response/dbca.rsp到安裝目錄,並進行編譯,
根據數據庫建立方式的不同編輯不同的數據庫庫選項。
比如在本次安裝過程中設置了下列參數:
RESPONSEFILE_VERSION = "10.0.0"
OPERATION_TYPE = "createDatabase"
GDBNAME = "ge01"
SID = "ge01"
TEMPLATENAME = "New_Database.dbt"
SYSPASSWORD = "georacle"
SYSTEMPASSWORD = "georacle"
DATAFILEDESTINATION ="/opt/oracle/oradata/"
RECOVERYAREADESTINATION="/opt/oracle/flash_recovery_area"
STORAGETYPE=FS
CHARACTERSET = "ZHS16GBK"
MEMORYPERCENTAGE = "40"
SCRIPTDESTINATION ="/opt/oracle/admin/ora10g/scripts"
EMCONFIGURATION=”LOCAL”
SYSMANPASSWORD = "georacle"
DBSNMPPASSWORD = "georacle"
其中最後1項不是必須的,這個的目的是在建立數據庫的同時生成腳本。
下面就可以開始SILENT模式的數據庫創建了:
[oracle@enterprice64 database]$ dbca -silent -responseFile /home/oracle/dbca.rsp
用root執行如下腳本:
/opt/oracle/10.2.0.1/oraInventory/orainstRoot.sh
最後可以利用netca來SILENT方式設置網絡部分,同樣的方法設置netca.rsp:
RESPONSEFILE_VERSION="11.1"
CREATE_TYPE= "CUSTOM"
SHOW_GUI=false
LOG_FILE=""/opt/oracle/10.2.0.1/network/tools/log/netca.log""
INSTALLED_COMPONENTS=
INSTALL_TYPE=""typical""
LISTENER_NUMBER=1
LISTENER_NAMES=
LISTENER_PROTOCOLS=
LISTENER_START=""LISTENER""
NAMING_METHODS=
設置的參數包括上面的部分,然後就可以使用netca啓動silent配置:
[oracle@enterprice64 database]$ netca /silent /responsefile  /home/oracle/netca.rsp
---------------------------------------------------------------- 靜默卸載Oracle數據庫ge01
dbca -silent -deleteDatabase -sourceDB    <source database sid> [-sysDBAUserName     <user name  with SYSDBA privileges> -sysDBAPassword <password for sysDBAUserName user name>]
例如:dbca -silent -deleteDatabase -sourceDB ge01 -sysDBAUserName sys -sysDBAPassword georacle
靜默卸載Oracle數據庫軟件
 
執行以下命令靜默卸載Oracle數據庫軟件
$./runInstaller -silent -deinstall -removeallfiles -removeAllPatches "REMOVE_HOMES=" -responseFile ~/enterprise.rsp
--------------------------------------------------------------------------------------- (一)圖形界面開始安裝:
1.以oracle用戶登錄X-WINDOWS系統,進行Oracle的安裝(遠程安裝需打開XDM):
[ linux 5}
export DISPLAY=
cd /opt/database (或者你解壓縮安裝程序包的目錄)
./runInstaller 或者./runInstaller   -ignoreSysPrereqs
過一會兒就會出現Oracle的X安裝界面
注意:
1、選擇advance install
2、數據庫home設置爲/opt/oracle/10.2.0.1
3、數據庫全局名稱設置爲ge01
4、數據庫字符集選Simplified Chinese ZHS16GBK
2.其他用默認設置!
注意:安裝過程中會提示以root用戶登陸執行一些腳本 ,執行後再按“ok”按鈕繼續安裝。

3、登陸並啓動數據庫的操作。
su - oracle
[oracle@oracle oracle]$ lsnrctl start
[oracle@oracle oracle]$ sqlplus /nolog
SQL*Plus: Release 9.2.0.0 - Production on Sat Mar 12 22:58:53 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> startup; 啓動數據庫
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size 451684 bytes
Variable Size 201326592 bytes
Database Buffers 33554432 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SQL> shutdown immediate ;關閉數據庫 (OR "dbshut" command)
Database closed.
Database dismounted.
ORACLE instance shut down.
4, dbstart腳本修改
數據庫創建完成後,修改vi /etc/oratab,把ge01:/opt/oracle/10.2.0.1:N那一行最後的N改成Y,
修改vi /opt/oracle/10.2.0.1/bin/dbstart中ORACLE_HOME_LISTNER=/opt/oracle/10.2.0.1
然後執行dbstart啓動數據庫數據庫可能無法啓動,報告Can’t find init file …的錯誤,需要複製一個初始化文件:
cp /opt/oracle/admin/ge01/pfile/init.ora.* /opt/oracle/10.2.0.1/dbs/initge01.ora
重新執行dbstart就可以了。
可以執行dbshut 停止ORACLE vi /etc/rc.local 加入下面一行 起動ORACLE ON system boot
su - oracle -c "lsnrctl start"
su - oracle -c "dbstart"
5. 爲了root方便管理,可以寫一個啓動腳本
vi /etc/init.d/ora10g
 
#!/bin/bash
#
# chkconfig: 2345 91 19
# description: starts the oracle listener and instance
status() {
    pid=`ps -ef | grep ora_pmon | grep -v grep | awk '{print $8}'`
    if [ "X$pid" = "X" ]
    then
        echo "oracle10g is not running."
        exit 1
    else
        echo "oracle10g is running."
        exit 0
    fi
}
case "$1" in
    start)
        #startup the listener and instance
        echo -n "oracle begin to startup: "
        su - oracle -c "lsnrctl start"
        su - oracle -c dbstart
        echo "oracle10g started"
        ;;
    stop)
        # stop listener, apache and database
        echo -n "oracle begin to shutdown:"
        su - oracle -c "lsnrctl stop"
        su - oracle -c dbshut
        echo "oracle10g shutdowned"
        ;;
    reload|restart)
        $0 stop
        $0 start
        ;;
    'status')
        status
        ;;
     *)
        echo "Usage: ora10g [start|stop|reload|restart]"
        exit 1
esac
exit 0
存爲ora10g後,然後
chmod a+x /etc/init.d/ora10g
即可在以後以root身份運行/etc/rc.d/init.d/ora10g start |stop 來管oracle的啓動和停止了。
如果要將這個腳本加入到系統中使其可開機運行,那麼要運行以下命令:
chkconfig --level 35 ora10g on
 
6, 關於數據庫刪除重新安裝的問題:
1 . 去除 /usr/local/bin 目錄 下的 coraenv dbhome oraenv
2 . 去除 /etc/oratab , /etc/oracle
3 . 去掉安裝 目錄 /opt/oracle 目錄下的 product admin oradata oralnventor 目錄 。
# userdel -r oracle
# groupdel dba oinstall
rm -rf /tmp/ora*
rm -rf /opt/oracle/*
rm -rf /opt/ORCLfmap
rm -f /etc/ora*
rm -f /usr/local/bin/oraenv
rm -f /usr/local/bin/coraenv
rm -f /usr/local/bin/dbhome

7.修改Oracle10g數據庫字符集
SQL> connect sys/oracle as sysdba
SQL> startup mount
SQL> alter session set sql_trace=true;
Session altered. SQL> alter system enable restricted session; System altered. SQL> alter system set job_queue_processes=0; System altered. SQL> alter system set aq_tm_processes=0; System altered. SQL> alter database open; Database altered. SQL> set linesize 120;
SQL> alter database character set zhs16gbk;
alter database character set zhs16gbk
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
SQL> ALTER DATABASE character set INTERNAL_USE zhs16gbk; # 使用INTERNAL_USE可以跳過超集的檢查,ALTER DATABASE character set INTERNAL_USE Database altered. SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP
SQL> select name,value$ from props$ where name like '%NLS%';
NLS_CHARACTERSET
ZHS16GBK
8. oracle database異機備份腳本
su - oracle
mkdir /home/oracle/dbbackup
(1)vi /home/oracle/dbbackup/bachupdb.sh
#!/bin/bash
#As oracle user, chmod 744 /home/oracle/dbbackup/DBbackuprecover.sh
#crontab -e 35 1 * * * /home/oracle/dbbackup/DBbackuprecover.sh >/dev/null 2>&1
#@tip : modify local database's home directory
#@tip <ip> is remote database ip address
export ORACLE_HOME=/opt/oracle/10.2.0.1
export PATH=$ORACLE_HOME/bin:$PATH:
export NLS_LANG=AMERICAN_AMERICA.zhs16gbk
export LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_SID=ge01
dmpfile=gedb_`date +%F`.dmp
logfile=gedb_`date +%F`.log
restoredblog=restoredb_`date +%F`.log
WORK_DIR=~/dbbackup
cd $WORK_DIR
exp USERID=gedb/gegedb@<ip>/ge01 file=$dmpfile log=$logfile  owner=gedb
if [ 0 -eq "$?" ]
     then
         sqlplus / as sysdba @user.sql 
         imp USERID=gedb/gegedb file=$dmpfile log=./$restoredblog fromuser=gedb  touser=gedb
         find  ./*.dmp -type f -mtime +7 -exec rm {} ;
         find  ./*.log -type f -mtime +30 -exec rm {} ;
         exit 0
      else
         echo "backup error,quit!" > $logfile
         exit 1
fi
 
#@tip ip地址修改爲要備份的oracle的主機地址
exp USERID=gedb/[email protected]/ge01 file=$dmpfile log=$logfile  owner=gedb direct=y
  (2)更改腳本權限:
     chown oracle.oinstall backupdb.sh
     chmod 744 backupdb.sh   
    
 
 (3)以oracle user role
    crontab -e
    35 2 * * * /home/oracle/dbbackup/backupdb.sh
9. restore oracle backup
(1) 先創建gedb用戶和授權:
  su - oracle
  sqlplus / as sysdba @createUser.sql 
(2)imp USERID=gedb/gegedb file=110.dmp fromuser=gedb touser=gedb
  如果要第二次IMP操作要先刪除用戶gedb,再新建用戶gedb,這樣imp纔不會出錯.
  DROP USER gedb CASCADE;
  CREATE USER gedb  IDENTIFIE D BY gegedb;
  GRANT UNLIMITED TABLESPACE TO gedb;
  GRANT CONNECT TO gedb;
  GRANT RESOURCE TO gedb;
  GRANT DBA TO gedb;
 
10. oracle優化
SQL> alter system set "_kgl_large_heap_warning_threshold"=8388608 scope=spfile ; (ONLY FOR 10.2.0.1.0 )
SQL> shutdown immediate
SQL> startup
 
  
11.BUG FIX
(1)10g EM亂碼之快速解決
[oracle@danaly ~]$ cd $ORACLE_HOME/jdk/jre/lib
[oracle@danaly lib]$ ls font*zh_CN*
font.properties.zh_CN.Redhat font.properties.zh_CN.Redhat2.1
font.properties.zh_CN.Sun font.properties.zh_CN_UTF8.Sun
[oracle@danaly lib]$ cd $ORACLE_HOME/jre/1.4.2/lib/
[oracle@danaly lib]$ ls font*zh_CN*
font.properties.zh_CN.Redhat font.properties.zh_CN.Redhat2.1
font.properties.zh_CN.Sun font.properties.zh_CN_UTF8.Sun
我們只要用合適的中文字符集文件替換缺省文件即可,我選擇使用font.properties.zh_CN.Redhat來替換缺省字體定義文件: [oracle@danaly lib]$ cp font.properties.zh_CN.Redhat font.properties 替換之後需要清理一下Cache,重啓EM即可. Cache路徑通常位於: $ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs 清除所有gif文件即可.然後重新啓動EM (2)10201上一個嚴重的BUG
環境 10201,AIX53
但據ORACLE解釋,在任何操作系統 版本都有此問題。
現象:監聽器啓動後,隔一段時間(長短不定),就會出現無法
連接: 若是用10201版本的SQLPLUS,則會出現 NO LISTENER。
9207 版本的SQLPLUS,則會出現:沒反應,HANG住。
原因:10201 版本上的一個BUG:4518443。其會自動創建一個子
監聽器,當出現此情況時,監聽器將會掛起。
/opt/oracle/product/10g/network/log/listener.log有如下語句:
WARNING: Subscription for node down event still pending
檢查是否真因爲此BUG造成此現象:
$ ps -ef | grep tnslsnr
ora10g 8909 1 0 Sep 15 ? 902:44 /u05/10GHOME/DBHOME/bin/tnslsnr sales -inherit
ora10g 22685 8909 0 14:19:23 ? 0:00 /u05/10GHOME/DBHOME/bin/tnslsnr sales –inherit
正常情況只有一個監聽器,而此BUG則會出現兩個監聽器。
解決方法:
打補丁4518443
或者在listener.ora 文件里加入:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF
其中,<listener_name> 是數據庫的監聽器的名稱。如:
默認情況下,監聽器名爲:LISTENER 。則語句就是:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
同時:
cd $ORACLE_HOME/opmn/conf
mv ons.config ons.config.orig
重啓監聽程序:
lsnrctl stop
lncrctl start

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章