ORACLE 001

oraclehy發表於2007-02-28
1、不安裝Oracle客戶連線Oracle 8的方法

請將以下檔案複製到執行檔案所在目錄

一、ODBC動態庫 :

ctl3d32.dll msvcrt40.dll odbc16gt.dll odbc32.dll odbc32gt.dll odbccp32.dll odbccr32.dll odbcint.dll

二、建立EXTRA子目錄,將MSVCRT.DLL檔案複製到該子目錄下

EXTRAMSVCRT.DLL

三、ORACLE動態庫及配置檔案

Tnsnames.ora CORE35O.DLL NASNSNT.DLL NAUNTSNT.DLL NCRNT.DLL Nlnt.dll NLSRTL32.DLL Nnfdnt.dll NNFNNT.DLL NSNT.DLL NTNT.DLL NTTNT.DLL CIW32.DLL Ora73.dll OTRACE73.DLL Sqlnet.ora Sqltnsnt.dll CORE35.DLL

四、PB動態庫

pbvm70.dll pbdwe70.dll Pbo7370.dll PBO8470.DLL pbodb70.dll libjcc.dll


Oracle的客戶端不安裝讓pb連上,我記得以前有帖子的,你可以搜尋一下。
具體步驟。
(1).先在某機器上安裝好客戶端(最好安裝在c盤);
(2).複製此客戶端oracle目錄下的所有檔案作為獨立的oracle安裝檔案;
(3).搜尋登錄檔,找到 HKey_Local_machinesoftwareoracle,把此專案及分支全部匯出。
(4).打包好你的pb程式,並獨立打包好oracle客戶端和登錄檔匯出檔案。
(5).到乾淨的客戶端,解開兩個包,匯入登錄檔檔案,然後加入路徑支援:
path=%path%;"c:Ora817bin"
這樣處理,應該沒有問題,因為我就是這樣快速處理了幾十個機器。

若不想搞登錄檔,你可以在程式中自己寫登錄檔,構成Oracle客戶端必要的登錄檔支援,至於路徑,手工新增應該不難。

至於Oracle客戶端那些檔案不需要,這個不好說,你可以把那些bin目錄下的所有exe刪除,Oracle Document刪除(7x兆)

至於定義Oracle服務,找到 Ora817net80adminTnsName.ora,參照格式,程式中生成一個也不麻煩。

=======================================================
2、在ORACLE中返回遊標結果集

你需要寫到一個包中:
create or replace package pag_cs_power as

type c_Type is ref cursor;

FUNCTION FUN_CS_GETDICTLIST(
v_DictIndex in varchar2) return c_Type;

end pag_cs_power;

函式程式碼:

FUNCTION FUN_CS_GETDICTLIST(
v_DictIndex in varchar2) return c_Type
as
c_cursor c_Type;
begin
open c_cursor for
select DICTID,DICTNAME FROM SYS_DICT WHERE DICTINDEX = v_DictIndex;
return c_cursor;
end FUN_CS_GETDICTLIST;
----------------------------------------------------------------------
3、P4機器安裝ORACLE

(1)、將ORACLE安裝軟體複製到硬碟。
(2)、將 硬碟目錄檔案stageComponentsoracle.swd.jre1.1.7.30/1
DataFilesExpandedjrewin32binsymcjit.dll的檔案改名為symcjit.old
(3).再執行SETUP.exe 檔案進行安裝。


-----------------------------------------------------------------------
4、單引號的插入問題

SQL> insert into a values('i''m good');       --兩個''可以表示一個'

SQL> insert into a values('i'||chr(39)||'m good'); --chr(39)代表字元'

SQL> insert into a values('a'||'&'||'b');     

-----------------------------------------------------------------------
5、全資料庫的匯入與匯出

exp username/password full=y file=yourdata.dmp grants=y rows=y
imp username/password full=y ignore=y file=yourdata.dmp grants=y

6、exp與imp的具體用法

exp full=y file=yourdata.dmp grants=y rows=y
imp username/password full=y ignore=y file=yourdata.dmp grants=y

exp file = c:zzzzzzz.dmp grants = y rows = y
imp file = c:zzzzzzz.dmp grants = y ignore=y FULL=Y


(1)

exp引數:
關鍵字 說明(預設)
----------------------------------------------
USERID 使用者名稱/口令
FULL 匯出整個檔案 (N)
BUFFER 資料緩衝區的大小
OWNER 所有者使用者名稱列表
FILE 輸出檔案 (EXPDAT.DMP)
TABLES 表名列表
COMPRESS 匯入一個範圍 (Y)
RECORDLENGTH IO 記錄的長度
GRANTS 匯出許可權 (Y)
INCTYPE 增量匯出型別
INDEXES 匯出索引 (Y)
RECORD 跟蹤增量匯出 (Y)
ROWS 匯出資料行 (Y)
PARFILE 引數檔名
CONSTRAINTS 匯出限制 (Y)
CONSISTENT 交叉表一致性
LOG 螢幕輸出的日誌檔案
STATISTICS 分析物件 (ESTIMATE)
DIRECT 直接路徑 (N)
TRIGGERS 匯出觸發器 (Y)
FEEDBACK 顯示每 x 行 (0) 的進度
FILESIZE 各轉儲檔案的最大尺寸
QUERY 選定匯出表子集的子句

imp引數:
關鍵字 說明(預設)
----------------------------------------------
USERID 使用者名稱/口令
FULL 匯入整個檔案 (N)
BUFFER 資料緩衝區大小
FROMUSER 所有人使用者名稱列表
FILE 輸入檔案 (EXPDAT.DMP)
TOUSER 使用者名稱列表
SHOW 只列出檔案內容 (N)
TABLES 表名列表
IGNORE 忽略建立錯誤 (N)
RECORDLENGTH IO 記錄的長度
GRANTS 匯入許可權 (Y)
INCTYPE 增量匯入型別
INDEXES 匯入索引 (Y)
COMMIT 提交陣列插入 (N)
ROWS 匯入資料行 (Y)
PARFILE 引數檔名
LOG 螢幕輸出的日誌檔案
CONSTRAINTS 匯入限制 (Y)
DESTROY 覆蓋表空間資料檔案 (N)
INDEXFILE 將表/索引資訊寫入指定的檔案
SKIP_UNUSABLE_INDEXES 跳過不可用索引的維護 (N)
ANALYZE 執行轉儲檔案中的 ANALYZE 語句 (Y)
FEEDBACK 顯示每 x 行 (0) 的進度
TOID_NOVALIDATE 跳過指定型別 id 的校驗
FILESIZE 各轉儲檔案的最大尺寸
RECALCULATE_STATISTICS 重新計算統計值 (N)

(2)

一、建立一個expdata.sql檔案

USERID=RMTAFIS/3 這裡寫你的使用者名稱和密碼
BUFFER=32768
OWNER=RMTAFIS 這裡寫匯出的使用者
FILE=E:ExpRMTAFIS.DMP 匯出的檔案,可以是相對路徑
ROWs=Y
GRANTS=Y
COMPRESS=Y
CONSISTENT=Y

二、建立一個expdata.bat
exp parfile=expdata.sql
如果是805
exp80 parfile=expdata.sql
雙擊expdata.bat就匯出資料了


7、如果在like的變數中,是以‘%’開頭的話,是不會使用index的。反之,不是以‘%‘開頭,而又有相應的index,是會使用index的。具體可以用plain plan來看一下。

8、複製空表結構
create table new_table
as select * from old_table where 1=2;
複製表(含記錄)
create table new_table
as select * from old_table ;

9、把一個使用者下的表匯入到另一個使用者下,但需要改名

先用exp匯出所有的表;
用imp將匯出的表匯入到新使用者;
在新使用者下,執行
select 'RENAME TABLE '||tname||' TO NEW_'||tname||';'
from tab
where tabtype='TABLE';
將上面的查詢結果儲存到一個sql檔案中,處理後執行就可以了。


10、審計步驟

修改引數檔案init.ora,引數audit_trail值為true;
重新啟動資料庫;
開啟審計audit session; (audit session by username)
執行登入操作;
察看審計結果:
select * from dba_audit_session;
select * from sys.aud$;
select * from dba_audit_trail;
select * from dba_audit_exists;
關於審計:

為了使oracle8i的審計功能可用,必須在資料庫引數檔案中修改audit_trail初始引數,而這個修改並不支配oracle8i把生成的審計記錄記入審計痕跡中,
由於狀態,特權和模式物件已被修改,因而審計的預設值不可用,其引數應設定為none.下面列出了audit_trail 可用的引數

db_使資料庫審計和全部直屬審計記錄到資料庫審計的痕跡中
os_是資料庫審計依據直屬審計記入到作業系統的審計很集中
none_不可用

11、BFILE的用法

(1)、create or replace directory
BFILE_TEST
as
'/oracle/oradata/bfiles';

(2)、grant read on directory BFILE_TEST to SCOTT;

(3)、host ls -l /oracle/oradata/bfiles/1.TXT

(4)、connect SCOTT/TIGER
create table BFILES (ID number, TEXT bfile );

(5)、insert into BFILES values ( 1,
bfilename ( 'BFILE_TEST', '1.TXT' ) );


12、如何在Windows 2000下將Oracle完全解除安裝?

一、系統環境:
(1)、作業系統:Windows 2000 Server,機器記憶體128M
(2)、資料庫: Oracle 8i R2 (8.1.6) for NT 企業版
(3)、安裝路徑:D:ORACLE

二、解除安裝步驟:
(1)、開始->設定->控制皮膚->管理工具->服務
停止所有Oracle服務。

(2)、開始->程式->Oracle - OraHome81->Oracle Installation Products->Universal Installer
卸裝所有Oracle產品

(3)、執行regedit,選擇HKEY_LOCAL_MACHINESOFTWAREORACLE,按del鍵刪除這個入口。

(4)、執行regedit,選擇HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices,滾動這個列表,刪除所有Oracle入口

(5)、從桌面上、STARTUP(啟動)組、程式選單中,刪除所有有關Oracle的組和圖示

(6)、重新啟動計算機,重起後才能完全刪除Oracle所在目錄

(7)、刪除與Oracle有關的檔案,選擇Oracle所在的預設目錄C:Oracle,刪除這個入口目錄及所有子目錄,

  並從Windows 2000目錄(一般為C:WINNT)下刪除以下檔案

  ORACLE.INI、oradim80.INI

(8)、WIN.INI檔案中若有[ORACLE]的標記段,刪除該段

--------------------------------------------------------------------
13、如何使用SQLPLUS和SVRMGRL執行指令碼

(1)、用sqlplus呼叫:

c:script.txt的內容
startup;

命令列:sqlplus internal/oracle @c:script.txt

(2)、用svrmgrl呼叫:
c:script.txt的內容

connect internal/oracle;
startup;

命令列:svrmgrl @c:script.txt

--------------------------------------------------------------------
14、ORACLE的臨時表

CREATE GLOBAL TEMPORARY TABLE TABLENAME (
COL1 VARCHAR2(10),
COL2 NUMBER
) ON COMMIT PRESERVE(DELETE) ROWS ;
這種臨時表不佔用表空間,而且不同的SESSION之間互相看不到對方的資料
在會話結束後表中的資料自動清空,如果選了DELETE ROWS,則在提交的時候即清空資料,PRESERVE則一直到會話結束

----------------

在Oracle8i中,可以建立以下兩種臨時表:
(1)會話特有的臨時表
CREATE GLOBAL TEMPORARY ()
ON COMMIT PRESERVE ROWS;

(2)事務特有的臨時表
CREATE GLOBAL TEMPORARY ()
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的臨時表雖然是存在的,但是你試一下insert 一條記錄然後用別的連線登上去select,記錄是空的,明白了吧,我把下面兩句話再貼一下:
--ON COMMIT DELETE ROWS 說明臨時表是事務指定,每次提交後ORACLE將截斷表(刪除全部行)
--ON COMMIT PRESERVE ROWS 說明臨時表是會話指定,當中斷會話時ORACLE將截斷表。
衝突的問題更本不用考慮.

臨時表只是儲存當前會話(session)用到的資料,資料只在事務或會話期間存在。

透過CREATE GLOBAL TEMPORARY TABLE命令建立一個臨時表,對於事務型別的臨時表,
資料只是在事務期間存在,對於會話型別的臨時表,資料在會話期間存在。

會話的資料對於當前會話私有。每個會話只能看到並修改自己的資料。DML鎖不會加到
臨時表的資料上。下面的語句控制行的存在性。

● ON COMMIT DELETE ROWS 表名行只是在事務期間可見
● ON COMMIT PRESERVE ROWS 表名行在整個會話期間可見

可以對臨時表建立索引,檢視,出發器,可以用export和import工具匯入匯出表的
定義,但是不能匯出資料。表的定義對所有的會話可見。

例如:
CREATE GLOBAL TEMPORARY TABLE TEMP_TAB1(
table_name VARCHAR2(20),
primary_key VARCHAR2(100),
field VARCHAR2(1000))
ON COMMIT PRESERVE ROWS;

CREATE GLOBAL TEMPORARY TABLE TEMP_TAB2(
table_name VARCHAR2(20),
primary_key VARCHAR2(100),
field VARCHAR2(1000))
ON COMMIT DELETE ROWS;

15、如何使用OEM
先啟資料庫服務,再啟oracle manager服務。
否則重建檔案資料庫
如果還不行就把ORACLEHOMENETWORKsqlnet.ora檔案的內容
sqlnet.authentication_services=(NTS)
改成sqlnet.authentication_services=(NONE)

登入 sysman/oem_temp

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8650069/viewspace-900933/,如需轉載,請註明出處,否則將追究法律責任。

相關文章