[Q]如何修改默認的XDB監聽端口 [A]Oracle9i默認的xml DB把HTTP的默認端口設為8080,這是一個太常用的端口了,很多別的WebServer都會使用這個端口,                                                                                             假如我們安裝了它,最好修改一下,避免沖突,假如不使用呢,就最好不要安裝 提供三種修改的方法 1.dbca,選擇你的數據庫,然后Standard Database Features->Customize->Oracle XML DB option,進入這個畫面你應該就知道怎么改了。 2.OEM console,在XML Database 的配置里面修改 3.用oracle提供的包: -- 把HTTP/WEBDAV端口從8080改到8081 SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/PRotocolconfig/httpconfig/http-port/text()',8081)) / -- 把FTP端口從2100改到2111 SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111)) / SQL> commit; SQL> exec dbms_xdb.cfg_refresh; -- 檢查修改是否已經成功 SQL> select dbms_xdb.cfg_get from dual;
[Q]怎么捕捉用戶登錄信息,如SID,ip地址等 [A]可以利用登錄觸發器,如 CREATE OR REPLACE TRIGGER tr_login_recordAFTER logon ON DATABASEDECLAREmiUserSid NUMBER;mtsession v$session%ROWTYPE;CURSOR cSession(iiUserSid IN NUMBER) ISSELECT * FROM v$sessionWHERE sid=iiUserSid;BEGINSELECT sid INTO miUserSid FROM v$mystat WHERE rownum<=1;OPEN cSession(miUserSid);FETCH cSession INTO mtSession;--if user exists then insert dataIF cSession%FOUND THENINSERT INTO log$information(login_user,login_time,ip_adress,ausid,terminal, osuser,machine,program,sid,serial#)VALUES(ora_login_user,SYSDATE,SYS_CONTEXT ('USERENV','IP_ADDRESS'), userenv('SESSIONID'),mtSession.Terminal,mtSession.Osuser,mtSession.Machine,mtSession.Program,mtSession.Sid,mtSession.Serial#);ELSE--if user don't exists then return errorsp_write_log('Session Information Error:'SQLERRM);CLOSE cSession;raise_application_error(-20099,'Login Exception',FALSE);END IF;CLOSE cSession;EXCEPTIONWHEN OTHERS THENsp_write_log('Login Trigger Error:'SQLERRM);END tr_login_record;在以上觸發器中需要注重以下幾點 1、該用戶有v_$session與v_$mystat的對象查詢權限,可以在sys下對該擁護顯式授權。 2、sp_write_log原本是一個寫日志的過程,可以置換為自己的需要,如null跳過。 3、必須在創建該觸發器之前創建一個log$information的表記錄登錄信息。 
[Q]怎么捕捉整個數據庫的DDL語句或者是說對象結構變化與修改 [A]可以采用DDL觸發器,如 CREATE OR REPLACE TRIGGER tr_trace_ddlAFTER DDL ON DATABASE DECLARE
                         sql_text ora_name_list_t;state_sql ddl$trace.ddl_sql%TYPE;BEGINFOR i IN 1..ora_sql_txt(sql_text) LOOPstate_sql := state_sqlsql_text(i);END LOOP;INSERT INTO ddl$trace(login_user,ddl_time,ip_address,audsid,schema_user,schema_object,ddl_sql)VALUES(ora_login_user,SYSDATE,userenv('SESSIONID'),sys_context('USERENV','IP_ADDRESS'),ora_dict_obj_owner,ora_dict_obj_name,state_sql);EXCEPTION WHEN OTHERS THEN sp_write_log('Capture DDL Excption:'SQLERRM);END tr_trace_ddl;在創建以上觸發器時要注重幾點 1、必須創建一個ddl$trace的表,用來記錄ddl的記錄 2、sp_write_log原本是一個寫日志的過程,可以置換為自己的需要,如null跳過。   [Q]怎么捕捉表上的DML語句(不包括select)語句) [A]可以采用dml觸發器,如 
CREATE OR REPLACE TRIGGER tr_capt_sqlBEFORE DELETE OR INSERT OR UPDATE ON manager.testDECLAREsql_text ora_name_list_t;state_sql capt$sql.sql_text%TYPE;BEGINFOR i IN 1..ora_sql_txt(sql_text) LOOPstate_sql := state_sql  sql_text(i);END LOOP;INSERT INTO capt$sql(login_user,capt_time,ip_address,audsid,owner,table_name,sql_text)VALUES(ora_login_user,sysdate,sys_context('USERENV','IP_ADDRESS'),userenv('SESSIONID'),'MANAGER','TEST',state_sql);EXCEPTION WHEN OTHERS THENsp_write_log('Capture DML Exception:'SQLERRM);END tr_capt_sql;在創建以上觸發器時要注重幾點 1、必須創建一個capt$sql的表,用來記錄ddl的記錄 2、sp_write_log原本是一個寫日志的過程,可以置換為自己的需要,如null跳過。 
[Q]怎么樣生成日期格式的文件 [A]在linux/UNIX上,使用`date +%y%m%d` (`這個是鍵盤上~所在的那個鍵) 或$(date +%y%m%d),如: toUCh eXP_table_name_`date +%y%m%d`.dmpDATE=$(date +%y%m%d)或者DATE=$(date +%Y%m%d --date '1 days ago') #獲取昨天或多天前的日期Windows上,使用%date:~4,10%,其中4是開始字符,10是提取長度,表示從date生成的日期中,提取從4開始長度是10的串。你可以改成其它你需要的數字,如: Echo %date:~4,10% 假如想得到更精確的時間,win上面還可以使用time 
[Q]測試磁盤與陣列性能 [A]用類似如下的方法測試寫能力 time dd if=/dev/zero of=/oradata/biddb/testind/testfile.dbf bs=1024000 count=1000期間系統IO 使用可以用(unix): iostat -xnp 2 顯示Busy程度   [Q]怎么配置SSH密匙 [A]可以防止"中間人"的進攻方式 1、ssh-keygen 或ssh-keygen -d(ssh 2.x)生成鑰匙 2、然后拷貝公匙到你想登錄的服務器,改名為authorized_keys,假如是3.0以下版本,需要改為authorized_keys2 3、還可以利用config文件進一步簡化操作 如 Host *bjHostName 機器名或IPUser 用戶名有了這個配置文件,你就可以利用ssh bj來訪問指定的機器了,也就可以利用scp與sftp來傳送文件了。 
                         
[Q]FTP怎么在腳本中自動上傳/下載 [A]可以把FTP寫到shell腳本中,如 ftp -n -i 主機IP <user username passcd 目標目錄put fileget file#查詢文件ls #退出byeEOF