當前位置:首頁 » 數據倉庫 » 公共oracle資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

公共oracle資料庫

發布時間: 2022-12-28 16:39:57

㈠ 如何連接oracle資料庫

如何配置才能使客戶端連到資料庫:x0dx0ax0dx0a要使一個客戶端機器能連接oracle資料庫,需要在客戶端機器上安裝oracle的客戶端軟體,唯一的例外就是java連接資料庫的時候,可以用 x0dx0ajdbc x0dx0athin模式,不用裝oracle的客戶端軟體。加入你在機器上裝了oracle資料庫,就不需要在單獨在該機器上安裝oracle客戶端了,因為裝 x0dx0aoracle資料庫的時候會自動安裝oracle客戶端。x0dx0a 用過sql x0dx0aserver資料庫然後又用oracle的新手可能會有這樣的疑問:問什麼我用sql server的時候不用裝sql x0dx0aserver的客戶端呢?原因很簡單,sql server也是microsoft的,它在操作系統中集成了sql x0dx0aserver客戶端,如果microsoft與oracle有協議,將oracle客戶端也集成到操作系統中,那我們也就不用在客戶端機器裝oraclex0dx0a 客戶端軟機就可訪問資料庫了,不過,這好像是不可能實現的事情。x0dx0a 也有的人會問:為什麼在sql x0dx0aserver中沒有偵聽埠一說,而在oracle中要配置偵聽埠?其實sql x0dx0aserver中也有偵聽埠,只不過microsoft將偵聽埠固定為1433,不允許你隨便改動,這樣給你一個錯覺感覺sql x0dx0aserver中沒有偵聽埠,咳,microsoft把太多的東西都封裝到黑盒子里,方便使用的同時也帶來的需要副作用。而oracle中的偵聽埠直接x0dx0a 在配置文件中,允許隨便改動,只不過無論怎樣改動,要與oracle伺服器端設置的偵聽埠一致。x0dx0a好,言歸正傳,我們如何做才能使客戶端機器連接到oracle資料庫呢?x0dx0aA. 安裝相關軟體x0dx0aB. 進行適當的配置x0dx0ax0dx0aA.在適當的位置安裝適當的軟體:x0dx0a在客戶端機器:x0dx0a1.在客戶端機器上安裝ORACLE的Oracle Net通訊軟體,它包含在oracle的客戶端軟體中。x0dx0a2.正確配置了sqlnet.ora文件:x0dx0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)x0dx0aNAMES.DEFAULT_DOMAIN=DB_DOMAINx0dx0a一般情況下我們不用NAMES.DEFAULT_DOMAIN參數。如果想不用該參數用#注釋掉或將該參數刪除即可,對於NAMES.DIRECTORY_PATH參數採用預設值即可,對於NAMES.DEFAULT_DOMAIN參數有時需要注釋掉,在下面有詳細解釋。x0dx0a3.正確配置了tnsname.ora文件x0dx0ax0dx0a在伺服器端機器:x0dx0a1.保證listener已經啟動x0dx0a2.保證資料庫已經啟動。x0dx0a如果資料庫沒有啟動,用:x0dx0aOracle 9i:x0dx0ados>sqlplus 「/ as sysdba」x0dx0asqlplus> startupx0dx0aOracle 8i:x0dx0ados>svrmgrlx0dx0asvrmgrl>connect internalx0dx0asvrmgrl>startupx0dx0a命令啟動資料庫x0dx0a如果listener沒有啟動,用:x0dx0alsnrctl start [listener name]x0dx0alsnrctl status [listener name]x0dx0a命令啟動listenerx0dx0aB.進行適當的配置x0dx0a如何正確配置tnsname.ora文件:x0dx0ax0dx0a可x0dx0a 以在客戶端機器上使用oracle Net Configuration Assistant或oracle Net x0dx0aManager圖形配置工具對客戶端進行配置,該配置工具實際上修改tnsnames.ora文件。所以我們可以直接修改tnsnames.ora文件,x0dx0a 下面以直接修改tnsnames.ora文件為例:x0dx0a該文件的位置為: ?\network\admin\tnsnames.ora (for windows)x0dx0a?/network/admin/tnsnames.ora (for unix)x0dx0a此處,假設伺服器名為testserver,服務名為orcl.testserver.com,使用的偵聽埠為1521,則tnsnams.ora文件中的一個test網路服務名(資料庫別名)為:x0dx0atest =x0dx0a(DESCRIPTION=x0dx0a(ADDRESS_LIST=x0dx0a(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))x0dx0a)x0dx0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)x0dx0a)x0dx0a)x0dx0a此處的笑臉為)。x0dx0a 紅色的內容為需要根據實際情況修改的內容,現解釋如下:x0dx0a PROTOCOL:客戶端與伺服器端通訊的協議,一般為TCP,該內容一般不用改。x0dx0ax0dx0aHOST:資料庫偵聽所在的機器的機器名或IP地址,資料庫偵聽一般與資料庫在同一個機器上,所以當我說資料庫偵聽所在的機器一般也是指資料庫所在的機 x0dx0a x0dx0a器。在UNIX或WINDOWS下,可以通過在資料庫偵聽所在的機器的命令提示符下使用hostname命令得到機器名,或通過ipconfig(forx0dx0a WINDOWS) or ifconfig(for x0dx0aUNIX)命令得到IP地址。需要注意的是,不管用機器名或IP地址,在客戶端一定要用ping命令ping通資料庫偵聽所在的機器的機器名,否則需要在x0dx0a hosts文件中加入資料庫偵聽所在的機器的機器名的解析。x0dx0ax0dx0aPORT:資料庫偵聽正在偵聽的埠,可以察看伺服器端的listener.ora文件或在資料庫偵聽所在的機器的命令提示符下通過lnsrctl status [listener name]命令察看。此處Port的值一定要與資料庫偵聽正在偵聽的埠一樣。x0dx0a SERVICE_NAME:在伺服器端,用system用戶登陸後,sqlplus> show parameter service_name命令察看。x0dx0a 如何利用配置的網路服務名連接到資料庫:x0dx0a 用sqlplus程序通過test網路服務名進行測試,如sqlplus system/manager@test。x0dx0a 如果不能連接到資料庫,則在tnsname.ora文件中的test網路服務名(net x0dx0aservice)後面加上sqlnet.ora文件中NAMES.DEFAULT_DOMAIN參數的值,此處我的參數值為 x0dx0atestserver.com,將其加到網路服務名後面,修改後的tnsname.ora中關於該網路服務名的內容為:x0dx0ax0dx0a 什麼情況下會引起oracle自動設置NAMES.DEFAULT_DOMAIN參數?x0dx0a x0dx0a 出現這種情況的典型環境為windows的客戶端的『我得電腦à屬性à計算機名à更改à其它?à此計算機的主DNS後綴』中設置了『primary x0dx0a dns x0dx0asuffix』,因為在這種情況下安裝客戶端時,會在sqlnet.ora文件中自動設置NAMES.DEFAULT_DOMAIN參數,或許當把計算機x0dx0a 加入域中安裝oracle客戶端時也會出現這種情況,有條件的話大家可以試一下。x0dx0ax0dx0a我在設置oracle的客戶端時一般手工修改tnsnames.ora文件,但是還有許多人喜歡用圖形工具配置,該圖形工具最終還是修改tnsnames.ora文件,但是它有時會引起其它的問題:x0dx0ax0dx0a在用oracle的圖形配置軟體'net assistant'或『Net Configuration x0dx0aAssistant』配置網路服務名時,假如已經設置了『primary dns x0dx0asuffix』,但是在圖形配置軟體中寫的網路服務名的名字中沒有『primary dns x0dx0asuffix』,如只是寫了test,則圖形配置軟體會自動在後面加上『primary dns x0dx0asuffix』,使之變為test.testserver.com,並存在tnsnames.ora中,而不管你的sqlnet.ora文件中是否有 x0dx0aNAMES.DEFAULT_DOMAIN參數。此時,用圖形工具進行測試連接是通過的,但是假如此時sqlnet.ora文件中沒有 x0dx0aNAMES.DEFAULT_DOMAIN參數,則你在使用網路服務名時應該使用在tnsnames.ora中的 x0dx0atest.testserver.com,而不是你在圖形配置軟體中鍵入的test。解決的辦法為:x0dx0a<1>可以在sqlnet.ora文件中設置NAMES.DEFAULT_DOMAIN= testserver.com,這時你可以用test或test.testserver.com連接資料庫x0dx0a<2>在sqlnet.ora文件中不設置NAMES.DEFAULT_DOMAIN參數,在tnsnames.ora文件中將test.testserver.com中的.testserver.com去掉,這時你可以用test連接資料庫。x0dx0ax0dx0a關於為什們在網路服務名後面加db_domain參數,需要了解sql*plus連接資料庫的原理,我在後面解決12154常見故障中給出了詳細的說明。x0dx0ax0dx0a如果上面的招數還不奏效的話,只好用一下乾坤大挪移了。x0dx0a將客戶端的網路服務名部分x0dx0atest.testserver.com =x0dx0a(DESCRIPTION=x0dx0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))x0dx0a)x0dx0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)x0dx0a)x0dx0a)x0dx0a此處的笑臉為)。x0dx0a拷貝到伺服器的tnsnames.ora文件中。然後再伺服器端用sqlplus system/[email protected]連接到資料庫。x0dx0a 如果能連接成功,說明你的客戶端與伺服器端的網路有問題。x0dx0a 如果連接不成功,用前面的部分檢查網路服務名部分部分是否正確,如果確信網路服務名部分正確而且所有的客戶端都連不上資料庫則可能為系統TCP/IP或Oracle系統有問題,建議重新安裝資料庫。x0dx0a該錯誤表示用於連接的網路服務名在tnsnames.ora文件中不存在,如上面的tnsnames.ora中的網路服務名只有test,假如用戶在連接時用sqlplus system/manager@test1則就會給出TNS-12154錯誤。x0dx0a要注意的是,有時即使在tnsnames.ora文件中有相應的網路服務名,可是用該網路服務名連接時還會出錯,出現這種情況的典型配置如下(在客戶端的機器上):x0dx0asqlnet.ora文件:x0dx0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)x0dx0aNAMES.DEFAULT_DOMAIN = server.comx0dx0atnsnames.ora文件:x0dx0atest =x0dx0a(DESCRIPTION=x0dx0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))x0dx0a)x0dx0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)x0dx0a)x0dx0a)x0dx0a此處的笑臉為)。x0dx0asql*plus運行基本機理:x0dx0a 在用戶輸入sqlplus system/manager@test後,sqlplus程序會自動到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN參數,假 如該參數存在,則將該參數中的值取出,加到網路服務名的後面, x0dx0ax0dx0a即此例中你的輸入由sqlplus system/manager@test自動變為sqlplus system/[email protected] x0dx0a,然後再到tnsnames.ora文件中找test.server.com網路服務名,這當然找不到了,因為該文件中只有test網路服務名,所以報 x0dx0a 錯。解決的辦法就是將sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN參數注釋掉即可,如 x0dx0a#NAMES.DEFAULT_DOMAIN = x0dx0aserver.com。假如NAMES.DEFAULT_DOMAIN參數不存在,則sqlplus程序會直接到tnsnames.ora文件中找 x0dx0atest網路服務名,然後取出其中的host,port,tcp,service_name,利用這些信息將連接請求發送到正確的資料庫伺服器上。x0dx0a 另外原則上tnsnames.ora中的配置不區分大小寫,但是我的確遇到區分大小寫的情況,所以最好將使用的網路服務與tnsnames.ora中配置的完全一樣。x0dx0aORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect Descriptor.x0dx0a該錯誤表示能在tnsnames.ora中找到網路服務名,但是在tnsnames.ora中指定的SERVICE_NAME與伺服器端的SERVICE_NAME不一致。解決的辦法是修改tnsnames.ora中的SERVICE_NAME。x0dx0ax0dx0a 易混淆術語介紹:x0dx0a x0dx0a Db_name:對一個資料庫(Oracle database)的唯一標識,該資料庫為第一章講到的Oracle x0dx0adatabase。這種表示對於單個資料庫是足夠的,但是隨著由多個資料庫構成的分布式資料庫的普及,這種命令資料庫的方法給資料庫的管理造成一定的負 x0dx0a 擔,因為各個資料庫的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了Db_domain參數,這樣在資料庫的標識是由Db_name和 x0dx0aDb_domain兩個參數共同決定的,避免了因為資料庫重名而造成管理上的混亂。這類似於互連網上的機器名的管理。我們將Db_name和 x0dx0aDb_domain兩個參數用』.』連接起來,表示一個資料庫,並將該資料庫的名稱稱為Global_name,即它擴展了Db_name。 x0dx0aDb_name參數只能由字母、數字、』_』、』#』、』$』組成,而且最多8個字元。x0dx0ax0dx0a Db_domain:定義一個資料庫所在的域,該域的命名同互聯網的』域』沒有任何關系,只是資料庫管理員為了更好的管理分布式資料庫而根據實際情況決定的。當然為了管理方便,可以將其等於互聯網的域。x0dx0ax0dx0aGlobal_name:對一個資料庫(Oracle x0dx0adatabase)的唯一標識,oracle建議用此種方法命令資料庫。該值是在創建資料庫是決定的,預設值為Db_name. x0dx0aDb_domain。在以後對參數文件中Db_name與Db_domain參數的任何修改不影響Global_name的值,如果要修改 x0dx0aGlobal_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO x0dx0a命令進行修改,然後修改相應參數。x0dx0ax0dx0aService_name:該參數是oracle8i新引進的。在8i以前,我們用SID來表示標識資料庫的一個實例,但是在Oracle的並行環境中,x0dx0a x0dx0a一個資料庫對應多個實例,這樣就需要多個網路服務名,設置繁瑣。為了方便並行環境中的設置,引進了Service_name參數,該參數對應一個資料庫,x0dx0a 而不是一個實例,而且該參數有許多其它的好處。該參數的預設值為Db_name. x0dx0aDb_domain,即等於Global_name。一個資料庫可以對應多個Service_name,以便實現更靈活的配置。該參數與SID沒有直接關x0dx0a 系,即不必Service name 必須與SID一樣。x0dx0aNet service name:網路服務名,又可以稱為資料庫別名(database alias)。是客戶端程序訪問資料庫時所需要,屏蔽了客戶端如何連接到伺服器端的細節,實現了資料庫的位置透明的特性。

㈡ 通常我們說oracle資料庫

通常我們說oracle資料庫就是指用來存儲數據的資料庫,不是指資料庫管理系統。
資料庫管理系統(database management system)是一種操縱和管理資料庫的大型軟體,用於建立、使用和維護資料庫,簡稱dbms。它對資料庫進行統一的管理和控制,以保證資料庫的安全性和完整性。用戶通過dbms訪問資料庫中的數據,資料庫管理員也通過dbms進行資料庫的維護工作。
伺服器一般是指通過網路給其他用戶提供服務的主機設備(配置較高的電腦)。安裝有資料庫的機器可以稱之為資料庫伺服器,安裝有web應用程序的機器可以稱之為應用伺服器。
例如,你可以在本機安裝oracle資料庫,用來存儲數據(這就是一個資料庫);然後安裝 toad for oracle 用來管理這個資料庫(這就是一個資料庫管理系統);當你的這個資料庫允許別的機器通過網路訪問並為他們提供服務的時候,你的這台機器就是資料庫伺服器了。
另外需要說明的是 ,oracle資料庫的安裝程序裡面自帶了一套資料庫管理系統的,可以通過它來管理oracle資料庫,不另外安裝資料庫管理系統也行的。

㈢ oracle 資料庫備份詳細步驟是什麼

oracle 資料庫備份的步驟是:

直接通過exp命令備份需要內容就可以了。可以參考下以下導出備份的方法:

1、將資料庫TEST完全導出,用戶名system 密碼manager 導出到D:chu.dmp中

exp system/manager@TEST file=d:chu.dmp full=y

2、將資料庫中system用戶與sys用戶的表導出

exp system/manager@TEST file=d:chu.dmp owner=(system,sys)

3、將資料庫中的表table1 、table2導出

exp system/manager@TEST file=d:chu.dmp tables=(table1,table2)

4、將資料庫中的表table1中的欄位filed1以"00"打頭的數據導出

exp system/manager@TEST file=d:chu.dmp tables=(table1) query=" where filed1 like '00%'"

㈣ 在Oracle中實現資料庫的復制

在Internet上運作資料庫經常會有這樣的需求 把遍布全國各城市相似的資料庫應用統一起來 一個節點的數據改變不僅體現在本地 還反映到遠端 復制技術給用戶提供了一種快速訪問共享數據的辦法 一 實現資料庫復制的前提條件 資料庫支持高級復制功能 您可以用system身份登錄資料庫 查看v$option視圖 如果其中Advanced replication為TRUE 則支持高級復制功能 否則不支持 資料庫初始化參數要求 ① db_domain = 指明資料庫的域名(默認的是WORLD) 這里可以用您公司的域名 ② global_names = true 它要求資料庫鏈接(database link)和被連接的資料庫名稱一致 現在全局資料庫名 db_name+ +db_domain ③ 有跟資料庫job執行有關的參數 job_queue_processes = job_queue_interval = distributed_transactions = open_links = 第一行定義SNP進程的啟動個數為n 系統預設值為 正常定義范圍為 ~ 根據任務的多少 可以配置不同的數值 第二行定義系統每隔N秒喚醒該進程一次 系統預設值為 秒 正常范圍為 ~ 秒 事實上 該進程執行完當前任務後 就進入睡眠狀態 睡眠一段時間後 由系統的總控負責將其喚醒 如果修改了以上這幾個參數 需要重新啟動資料庫以使參數生效 二 實現資料庫同步復制的步驟 假設在Internet上我們有兩個資料庫 一個叫深圳(shenzhen) 一個叫北京(beijing) 具體配置見下表 確認兩台資料庫之間可以互相訪問 在tnsnames ora里設置資料庫連接字元串 ① 例如 深圳這邊的資料庫連接字元串是以下的格式 beijing = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = )) ) (CONNECT_DATA = (SERVICE_NAME = beijing) ) )運行$tnsping beijing出現以下提示符 Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST= )(PORT= )) OK(n毫秒)表明深圳資料庫可以訪問北京資料庫 ② 在北京那邊也同樣配置 確認$tnsping shenzhen 是通的 改資料庫全局名稱 建公共的資料庫鏈接 ① 用system身份登錄shenzhen資料庫 SQL>alter database rename global_name to cn; 用system身份登錄beijing資料庫 SQL>alter database rename global_name to ; ② 用system身份登錄shenzhen資料庫 SQL>create public database link using beijing ; 測試資料庫全局名稱和公共的資料庫鏈接 SQL>select * from global_n cn; 返回結果為就對了 用system身份登錄beijing資料庫 SQL>create public database link cn using shenzhen ; 測試資料庫全局名稱和公共的資料庫鏈接 SQL>select * from global_na cn; 返回結果為 cn就對了 建立管理資料庫復制的用戶repadmin 並賦權 ① 用system身份登錄shenzhen資料庫 SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp; SQL>execute dbms_defer_sys register_propagator( repadmin ); SQL>grant execute any procere to repadmin; SQL>execute dbms_repcat_admin grant_admin_any_repgroup( repadmin ); SQL>grant ment any table to repadmin; SQL>grant lock any table to repadmin; ② 同樣用system身份登錄beijing資料庫 運行以上的命令 管理資料庫復制的用戶repadmin 並賦權 說明 repadmin用戶名和密碼可以根據用戶的需求自由命名 在資料庫復制的用戶repadmin下創建私有的資料庫鏈接 ① 用repadmin身份登錄shenzhen資料庫 SQL>create database link connect to repadmin identified by repadmin; 測試這個私有的資料庫鏈接 SQL>select * from global_n cn; 返回結果為就對了 ② 用repadmin身份登錄beijing資料庫 SQL>create database link cn connect to repadmin identified by repadmin; 測試這個私有的資料庫鏈接 SQL>select * from global_na cn; 返回結果為 cn就對了 創建或選擇實現資料庫復制的用戶和對象 給用戶賦權 資料庫對象必須有主關鍵字 假設我們用ORACLE里舉例用的scott用戶 dept表 ① 用internal身份登錄shenzhen資料庫 創建scott用戶並賦權 SQL>create user scott identified by tiger default tablespace users temporary tablespace temp; SQL>grant connect resource to scott; SQL>grant execute on sys dbms_defer to scott; ② 用scott身份登錄shenzhen資料庫 創建表dept SQL>create table dept (deptno number( ) primary key dname varchar ( ) loc varchar ( ) ); ③ 如果資料庫對象沒有主關鍵字 可以運行以下SQL命令添加 SQL>alter table dept add (constraint dept_deptno_pk primary key (deptno)); ④ 在shenzhen資料庫scott用戶下創建主關鍵字的序列號 范圍避免和beijing的沖突 SQL> create sequence dept_no increment by start with maxvalue cycle nocache; (說明 maxvalue 可以根據應用程序及表結構主關鍵字定義的位數需要而定) ⑤ 在shenzhen資料庫scott用戶下插入初始化數據 SQL>insert into dept values (dept_no nextval accounting new york ); SQL>insert into dept values (dept_no nextval research dallas ); SQL>mit; ⑥ 在beijing資料庫那邊同樣運行以上① ② ③ ⑦ 在beijing資料庫scott用戶下創建主關鍵字的序列號 范圍避免和shenzhen的沖突 SQL> create sequence dept_no increment by start with maxvalue cycle nocache; ⑧ 在beijing資料庫scott用戶下插入初始化數據 SQL>insert into dept values (dept_no nextval sales chicago ); SQL>insert into dept values (dept_no nextval operations boston ); SQL>mit; 創建要復制的組scott_mg 加入資料庫對象 產生對象的復制支持 ① 用repadmin身份登錄shenzhen資料庫 創建主復制組scott_mg SQL> execute dbms_repcat create_master_repgroup( scott_mg ); 說明 scott_mg組名可以根據用戶的需求自由命名 ② 在復制組scott_mg里加入資料庫對象 SQL>execute dbms_repcat create_master_repobject(sname=> scott oname=> dept type=> table use_existing_object=>true gname=> scott_mg ); 參數說明 sname 實現資料庫復制的用戶名稱 oname 實現資料庫復制的資料庫對象名稱 (表名長度在 個位元組內 程序包名長度在 個位元組內) type 實現資料庫復制的資料庫對象類別 (支持的類別 表 索引 同義詞 觸發器 視圖 過程 函數 程序包 程序包體) use_existing_object true表示用主復制節點已經存在的資料庫對象 gname 主復制組名 ③ 對資料庫對象產生復制支持 SQL>execute dbms_repcat generate_replication_support( scott dept table ); (說明 產生支持scott用戶下dept表復制的資料庫觸發器和程序包) ④ 確認復制的組和對象已經加入資料庫的數據字典 SQL>select gname master status from dba_repgroup;SQL>select * from dba_repobject; 創建主復制節點 ① 用repadmin身份登錄shenzhen資料庫 創建主復制節點 SQL>execute dbms_repcat add_master_database(gname=> scott_mg master=> use_existing_objects=>true _rows=>false propagation_mode => asynchronous ); 參數說明 gname 主復制組名 master 加入主復制節點的另一個資料庫 use_existing_object true表示用主復制節點已經存在的資料庫對象 _rows false表示第一次開始復制時不用和主復制節點保持一致 propagation_mode 非同步地執行 ② 確認復制的任務隊列已經加入資料庫的數據字典 SQL>select * from user_jobs; 使同步組的狀態由停頓(quiesced )改為正常(normal) ① 用repadmin身份登錄shenzhen資料庫 運行以下命令 SQL> execute dbms_repcat resume_master_activity( scott_mg false); ② 確認同步組的狀態為正常(normal) SQL> select gname master status from dba_repgroup; ③ 如果這個①命令不能使同步組的狀態為正常(normal) 可能有一些停頓的復制 運行以下 lishixin/Article/program/Oracle/201311/16816

㈤ Oracle進行資料庫查詢的小技巧

數據查詢 是資料庫操作中最主要的功能之一;有時候資料庫查詢性能的好壞 直接關繫到資料庫的運行效率 關繫到資料庫的選型 下面筆者不談大道理 只是對其中對一些平時大家容易忽略的查詢小技巧做一些總結 或許大家可能正在為此犯愁呢?

第一個技巧 利用連接符連接多個欄位

如在員工基本信息表中 有員工姓名 員工職位 出身日期等等 如果現在視圖中這三個欄位顯示在同一個欄位中 並且中間有分割符 如我現在想顯示的結果為 經理Victor出身於 年 月 日 這該如何處理呢?其實 這是比較簡單的 我們可以在Select查詢語句中 利用連接符把這些欄位連接起來

如可以這么寫查詢語句

SELECT員工職位 || ||員工姓名|| 出身於 ||出身日期 as 員工出身信息 FROM 員工基本信息表;

通過這條語句就可以實現如上的需求 也就是說 我們在平時查詢中 可以利用||連接符把一些相關的欄位連接起來 這在報表視圖中非常的有用 如筆者以前在設計圖書館管理系統的時候 在書的基本信息處有圖書的出版社 出版序列號等等內容 但是 有時會在列印報表的時候 需要把這些欄位合並成一個欄位列印 為此 就需要利用這個連接符把這些欄位連接起來 而且 利用連接符還可以在欄位中間加入一些說明性的文字 以方便大家閱讀 如上面我在員工職位與員工姓名之間加入了空格;並且在員工姓名與出身日期之間加入了出身於幾個注釋性的文字 這些功能看起來比較小 但是卻可以大大的提高內容的可讀性 這也是我們在資料庫設計過程中需要關注的一個內容

總之 令後採用連接符 可以提高我們報表的可讀性於靈活性

第二個技巧 取消重復的行

如在人事管理系統中 有員工基本信息基本表 在這張表中 可能會有部門 職位 員工姓名 身份證件號碼等欄位 若查詢這些內容 可能不會有重復的行 但是 我若想知道 在公司內部設置了哪些部門與職位的時候 並且這些部門與職位配置了相關人員 此時 又該如何查詢呢?

若我現在直接查詢部門表 其可以知道系統中具體設置了哪些部門與職位 但是 很有可能這些部門或者職位由於人事變動的關系 現在已經沒有人了 所以 這里查詢出來的是所有的部門與職位信息 而不能夠保證這個部門或者職位一定有職員存在 也就是說 這不能夠滿足於我們上面的要求

若我現在直接從員工信息表中查詢 雖然可以保證所查詢出來的部門與職位信息 一定有員工信息的存在 但是 此時查詢出來的部門與職位信息會有重復的行 如采購部門分工合作 可能會有采購采購小組長 此時 在查詢出來的部門與職位的信息中 就會有三條重復的記錄

所以 以上兩種處理方式 都不能夠百分之百的滿足企業用戶的需求 此時 我們其實可以利用一個DISTINCT函數 來消除其中查詢出來的重復行

如我們可以利用SELECT DISTINCT 部門信息 職位信息 FROM 員工基本信息表 通過這條加了DISTINCT約束的查詢語句 不但可以查詢出所有有員工的職位與部門信息 而且 會把重復的記錄過濾掉 從而提高可閱讀性

所以 在資料庫設計過程中 特別是在查詢語句的使用中 這個函數特別有用

第三個技巧 勤用WHERE語句

我們都知道 資料庫查詢效率高不高 是我們評價資料庫設計好壞的一個重要標准 毋庸置疑 在資料庫查詢中勤用Where條件語句 是提高資料庫查詢性能的一個很重要的手段之一 特別是在設計到比較大的表中查詢符合條件的記錄過程中 利用WHERE條件語句加以限制 可以大幅度的提高查詢的響應速度

如在圖書館管理系統中 現在有人想查詢 注冊會計師 輔導用書的時候 雖然不在書的類別或者名稱中輸入 注冊會計師 先查詢出全部的紀錄 然後再一條條的看是否有相關的書籍信息 也是可行的 但是 這么處理的話 一方面系統響應的速度會非常的慢 因為裡面記錄很多 另一方面 查詢的結果看起來也會非常的頭疼

其實 我們只需要在查詢中加入一些查詢的參數 利用Where條件語句加以限制 則即可以提高資料庫響應的速度 也可以找出最符合用戶需求的數據

另外 我也接觸過一些在Oracle資料庫上設計的平台型管理軟體 他們可以自定義相關的報表 在報表設計中 只要用戶在前台設計平台中 選中 大表查詢 的話 則這個平台會在生成報表的時候 自動應用Where條件語句 以提高前台系統從資料庫查詢數據的效率

所以 筆者認為在Oracle資料庫系統設計中 要勤於使用Where語句 利用Where語句來提高資料庫查詢的效率

第四個技巧 靈活使用COUNT函數

在查詢處理的時候 COUNT函數可以說是我們應用的比較多的函數之一 如我們有時候需要統計員工的人數 統計圖書的種類數的時候 都需要使用到這個函數 不過 這個函數很多人可能會用 但是到靈活應用的地步 還是有一點差距

下面筆者就COUNT函數的一些應用技巧談談自己的心得

一是要靈活放置COUNT函數的位置 因為利用COUNT函數統計記錄數的時候 是會考慮空行的記錄的 如在數據表中一般有序列欄位與其它的有意義欄位兩類 有時候可能序列欄位中有內容而其它欄位中沒有內容 則在利用COUNT函數統計記錄數量的時候 會把這個空記錄也考慮進去 很明顯 則就會發生統計的錯誤 所以 這個COUNT函數該放在哪個位置上 還是比較講究的 一般的話 筆者試建議不要放在序列號欄位上 而要放在一些關鍵的實體欄位中 如統計員工人數的時候 則就可以放在員工姓名或者編號上等等

二是靈活跟其它函數搭配使用 如在上面的例子中 筆者談到有時候用戶需要知道現在有員工編制的部門與職位有哪一些 我們可以利用DISTINCT函數來找出具體的部門 但是 我現在只想知道有編制的部門與職位具體有多少 此時 我們也可以利用COUNT 與DISTINCT函數結合應用 找出我們所需要的數據 在COUNT函數中 可以指定ALL與DISTINCT選項 默認的情況下 是ALL選項 表示統計所有的行 其中也包括重復的行 而DISTINCT就表示只統計不重復的行 可見 COUNT函數跟其它函數搭配使用的話 可以簡化我們的查詢語句 提高查詢效率

第五個技巧 只查詢時必須的欄位

有時候 用戶不同的查詢需求都要用到同一張表 如在員工信息表中包含了很多內容 有時候用戶想要知道正式員工有多少;管理層員工有多少;生產線員工又有哪些;或者想知道合同即將到期的員工有哪些 為此 就遇到一個問題 因為這些內容基本上都是在同一張表中 那是在同一個視圖中實現 而是根據需求不同 設計不同的視圖呢?

若單從技術上考慮 兩這都是可以實現的 不會有多大的難度 但是 若是從資料庫性能上考慮在 則還是採用不同的視圖來實現不同的需求為好

一方面 若從安全方面講 則可以根據不同的視圖來控制相關的訪問許可權 可見 把視圖細化 在許可權控制上則會更加的靈活

lishixin/Article/program/Oracle/201311/17049

㈥ python用管理員身份連接oracle資料庫時報錯:

給你一個連接Oracle的公共庫:

#-*-coding:utf-8-*-
#!/usr/bin/envpython
'''
Createdon2014年8月4日

@author:188007

連接Oracle資料庫的class
'''
importos
os.environ['NLS_LANG']='SIMPLIFIEDCHINESE_CHINA.ZHS16GBK'
importcx_Oracle
importsys

classOracle:
'''

'''

def__init__(self,ip,port,db,user,pwd):
self.ip=ip
self.port=port
self.db=db
self.user=user
self.pwd=pwd

def__GetConnect(self):
"""得到連接信息返回:conn.cursor()"""
ifnotself.db:
raise(NameError,"沒有設置資料庫信息")
dsn=cx_Oracle.makedsn(self.ip,self.port,self.db)
self.conn=cx_Oracle.connect(self.user,self.pwd,dsn)
cur=self.conn.cursor()
ifnotcur:
raise(NameError,"連接資料庫失敗")
else:
returncur

defExecQuery(self,sql):
"""執行查詢語句返回的是一個包含tuple的list,list的元素是記錄行,tuple的元素是每行記錄的欄位
調用示例:
oracle=Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
resList=oracle.ExecQuery("SELECTOBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARKFROMGFDMS.THZONEORDERBYNUMCODE")
for(AREANAME)inresList:
printstr(AREANAME).decode('gb2312')
"""
try:
cur=self.__GetConnect()
cur.execute(sql)
resList=cur.fetchall()

#查詢完畢後必須關閉連接
self.conn.close()
exceptException,err:
sys.exit(1)

returnresList

defExecNonQuery(self,sql):
"""執行非查詢語句
調用示例:
oracle.ExecNonQuery("insertintoTHZONEvalues('x','y')")
"""
try:
cur=self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
exceptException,err:
sys.exit(1)

#defmain():
##oracle=Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
###返回的是一個包含tuple的list,list的元素是記錄行,tuple的元素是每行記錄的欄位
##oracle.ExecNonQuery("insertintoTHZONEvalues('x','y')")
#oracle=Oracle('10.27.95.253','1561','GTEST','GTAPPS','GTAPPS')
#resList=oracle.ExecQuery("SELECTOBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARKFROMGTEST.THZONEORDERBYNUMCODE")
#for(AREANAME)inresList:
#printstr(AREANAME).decode('utf-8')
#
#if__name__=='__main__':
#main()

㈦ 資料庫是什麼Oracle又是啥玩意

經常會有人問我資料庫是幹啥的,其實一開始我是拒絕回答的,因為我也不能做到通俗易懂的表達出來,畢竟我接觸這個概念也沒有多長時間,但隨著問的人多了,我覺得是時候腦補一下我的第一堂課了,萬一哪天冒出來個貨跟你掰扯這事兒,你沒分分鍾給他說清,最後弄個丟里兒丟面兒,好尷尬呀。

資料庫,說白了就是按照數據結構來組織、存儲和管理數據的倉庫,這些數據是結構化的,並可為多種應用服務。也就是說,資料庫是使用計算機伺服器來存儲數據的,專門用來提供各種數據服務。可以這樣想像,過去一個公司的所有財務數據都是放在保險櫃裡面,而現在我們就可以針對這些財務數據搭建一個資料庫放在某台計算機或伺服器上面;再比如,企業或事業單位的人事部門常常要把本單位職工的基本情況(職工號、姓名、年齡、性別、籍貫、工資、簡歷等)存放在表中,這張表就可以看成是一個資料庫。有了這個"數據倉庫"我們就可以根據需要隨時查詢某職工的基本情況,也可以查詢工資在某個范圍內的職工人數等等。這些工作如果都能在計算機上自動進行,那我們的人事管理就可以達到極高的水平。此外,在財務管理、倉庫管理、生產管理中也需要建立眾多的這種"資料庫",使其可以利用計算機實現財務、倉庫、生產的自動化管理。最常見的資料庫有:銀行儲蓄系統、手機話費系統、美容美發會員系統、超市會員積分系統、水電費系統、機票或火車票系統等,這些都需要後台資料庫基礎設施的支撐。舉了這么多例子,應該是把資料庫說明白了,至少能在大腦裡面有個概念,知道這個東西是幹啥的。

現在大數據被炒的紅得發紫,而大數據的基礎也是數據,由此可見,數據是一個企業的核心資源,說它是企業的立身之本、發展之基都不為過,因此,維護資料庫的資料庫管理員(DBA)是企業不可或缺的。

目前市面上的資料庫產品有很多,單從規模上分可分為大型、中型、小型幾種,典型的資料庫產品如下:

大型資料庫:Oracle、DB2、Sybase;

中型資料庫:MySQL、SQLServer、Infomix;

小型資料庫:Access、VisualFoxpro。在眾多的資料庫產品中,Oracle資料庫一直處於行業領導先地位,也是當今最流行的關系型資料庫。Oracle可翻譯成"甲骨文",它是一家以資料庫為主業的全球化公司,是全球第二大軟體公司(第一名是微軟公司),目前Oracle在資料庫軟體市場已經排名第一,資料庫軟體市場份額達到48.6%,遙遙領先於第二名佔有率僅為20.7%的IBM公司的DB2。在中國市場上的計算機專業系統後台所使用的資料庫尤以Oracle資料庫居多。但是購買Oracle資料庫需要很大一筆費用,一般的大型企業使用,需要有專業人員進行管理和維護,中小企業承擔不起。中小企業為了節省成本,一般使用MySQL、PostgreSQL這類免費開源的資料庫,所以Oracle資料庫相關的工作崗位一般是在大型企業中。

對於為什麼選擇Oracle資料庫,而不是其他的資料庫?

第一,是因為Oracle資料庫占據最大的市場份額,並且越來越大,市場需要很多Oracle資料庫方面的人才,中國有句老話說"做對事,選對人",是同樣的道理;第二,是很多非Oracle資料庫的老系統正往Oracle資料庫遷移,其他資料庫市場佔有率在減少,其他資料庫工作者有面臨失業的風險;第三,Oracle有大量的官方學習文檔,還有部分中文文檔,可以有效地進行學習;第四,Oracle有大量的從業人員,有共同方向的朋友可以互相幫助,不再是孤膽英雄;第五,是可以很容易地從Oracle官方網站下載功能齊全的資料庫最新版本進行學習,可以讓你了解資料庫方面的最新發展趨勢等。

在此說明,以後的所有內容都是基於Oracle11g資料庫產品的,下面我們就簡單介紹一下Oracle11g的系列產品:

企業版(EnterpriseEdition)此版本包含了資料庫的所有組件,並且能夠通過購買選項和程序包來進一步對其增強。

能支持例如大業務量的在線事務處理OLTP(On-LineTransactionProcessing聯機事務處理系統)環境、查詢密集的數據倉庫和要求苛刻的互聯網應用程序。

標准版1(StandardEditionOne)此版本為工作組、部門級和互聯網、內聯網應用程序提供了前所未有的易用性和性價比。從針對小型商務的單伺服器環境到大型的分布式部門環境,該版本包含了構建重要商務應用程序所必需的全部工具。它僅許可在最高容量為2個處理器的伺服器上使用,支持Windows/Linux/UNIX操作系統,並支持64位平台操作系統。

標准版(StandardEdition)此版本提供了StandardEditionOne所不具有的易用性、能力和性能,並且利用真正的應用集群(RAC)提供了對更大型計算機和服務集群的支持。它可以在最高容量為4個處理器的單台伺服器上、或者在一個支持最多4個處理器的集群上使用,可支持Windows、Linux和UNIX操作系統,並支持64位平台操作系統。

簡化版此版本支持與標准版1、標准版和企業版完全兼容的單用戶開發和部署。通過將Oracle資料庫獲獎的功能引入到個人工作站中,該版本提供了結合世界上最流行的資料庫功能的資料庫,並且該資料庫具有桌面產品通常具有的易用性和簡單性,可支持Linux和Windows操作系統。

從存儲結構上來說,目前流行的資料庫主要包含以下兩種:

RDBMS:關系型資料庫,是指採用了關系模型來組織數據的資料庫;

NoSQL資料庫,是指那些非關系型的、分布式的資料庫。簡單來說,關系模型指的就是二維表格模型,而一個關系型資料庫就是由二維表及其之間的聯系所組成的一個數據組織。

關系型資料庫優點:

1、容易理解

二維表結構是非常貼近邏輯世界的一個概念,關系模型相對網狀、層次等其他模型來說更容易理解。

2、使用方便

通用的SQL語言使得操作關系型資料庫非常方便。

3、易於維護

豐富的完整性大大減低了數據冗餘和數據部移植的概率。

4、事務安全

所有關系型資料庫都不同程度的遵守事物的四個基本屬性,因此對於銀行、電信、證券等交易型業務是不可或缺的。

關系型資料庫的瓶頸:

1、高並發讀寫需求

網站的用戶並發性非常高,往往達到每秒上萬次讀寫請求,對於傳統型資料庫來說,硬碟I/O是一個很大的瓶頸。

2、海量數據的高效率讀寫

互聯網上每天產生的數據量是巨大的,對於關系型資料庫來說,在一張包含海量數據的表中查詢,效率是非常低的。

3、高擴展性和可用性

在基於WEB的結構中,資料庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,資料庫卻沒有辦法像WEBServer和APPLICATIONServer那樣簡單的通過添加更多的硬體和服務節點來擴展性能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對資料庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移。

NoSQL資料庫

NoSQL一詞首先是CarloStrozzi在1998年提出的。2009年再次提出了NoSQL一詞,用於指那些非關系型的、分布式的,且一般不保證遵循ACID原則的數據存儲系統。

NoSQL具有以下特點:

1、可以彌補關系型資料庫的不足

2、針對某些特定的需求而設計,可以具有極高的性能

3、大部分都是開源的,由於成熟度不夠,存在潛在的穩定性和維護性問題。

關系型資料庫適用於結構化數據,而非關系型資料庫適用於非結構化數據,二者優勢互補,相得益彰。

Oracle資料庫未來的發展方向是提供結構化、非結構化、半結構化的解決方案,實現關系型資料庫和NoSQL共存互補。值得強調的是,目前關系型資料庫仍是主流資料庫。

雖然NoSQL資料庫打破了關系型資料庫存儲的觀念,可以很好地滿足WEB2.0時代數據的存儲要求,但NoSQL資料庫也有自己的缺陷。在現階段的情況下,可以將關系型資料庫和NoSQL資料庫結合使用,相互彌補各自的不足。

關於資料庫及其代表產品Oracle今天就介紹這么多,有興趣的可以繼續深挖,希望我的介紹能讓你對資料庫有一個更深入的認識。如果有志於在這方面發展的話,就讓我們一起跟往事乾杯從頭再來。

㈧ c# 連接oracle資料庫的公共類

using System;
using System.Collections.Generic;
using System.Text;

using System.Configuration;
using System.Data.OracleClient;
using System.Data;
using System.Windows.Forms;
using System.Collections;
using Microsoft.VisualBasic.Devices;
using System.Security.Cryptography;
using System.IO;

namespace mydbproc
{
class Encrypt
{
public string MD5(string P_EncryptStr)
{
int num;
byte[] buffer = new byte[P_EncryptStr.Length];
for (num = 0; num < P_EncryptStr.Length; num++)
{
buffer[num] = (byte) P_EncryptStr[num];
}
byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash(buffer);
string str = "";
for (num = 0; num < buffer2.Length; num++)
{
str = str + buffer2[num].ToString();
}
return str;
}

public string TripleDES(string Value, string password)
{
string s = "";
string str2 = "qcDY6X+aPLw=";
SymmetricAlgorithm algorithm = new ();
algorithm.Key = Convert.FromBase64String(s);
algorithm.IV = Convert.FromBase64String(str2);
algorithm.Mode = CipherMode.ECB;
algorithm.Padding = PaddingMode.PKCS7;
ICryptoTransform transform = algorithm.CreateEncryptor(algorithm.Key, algorithm.IV);
byte[] bytes = Encoding.UTF8.GetBytes(Value);
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Write);
stream2.Write(bytes, 0, bytes.Length);
stream2.FlushFinalBlock();
stream2.Close();
return Convert.ToBase64String(stream.ToArray());
}

}
class DBProc
{

const string GET_SID = "WMSCONN";

protected string _connStr = string.Empty

public DBProc()
{
//以下自己填寫
string _dataSouce = "";
string _user ="";
string _pw="";
//這你自己填寫

_connStr = "Data Source=" + _dataSouce + ";Persist Security Info=True;User ID=" + _user + ";Password=" + _pw + ";Unicode=True";
}

public string GetConnectionstring()
{
return _connStr;
//ConnectionStringsSection _connectionStringsSection = WebConfigurationManager.GetSection("connectionStrings") as ConnectionStringsSection;
//return _connectionStringsSection.ConnectionStrings[GET_SID].ToString();
}

public DataTable OraExeFill(string cmdStr)
{
DataTable _returnTable = new DataTable();
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
OracleCommand _command = _connection.CreateCommand();
_command.CommandText = cmdStr;
OracleDataAdapter _adapter = new OracleDataAdapter(cmdStr, _connection);
_adapter.Fill(_returnTable);
}
catch (Exception)
{
}
return _returnTable;
}

public bool OraExeSP_UserAuth(string user, string pw, ref string msg)
{
bool _ret = false;
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
try
{
OracleCommand _command = _connection.CreateCommand();
_command.CommandType = CommandType.StoredProcere;
_command.CommandText = "TP.PKG_HR.SP_HR_USER_AUTH_1";
_command.Parameters.Add("P_USER", OracleType.VarChar, 20).Value = user;
_command.Parameters.Add("P_PW", OracleType.VarChar, 50).Value = pw;
_command.Parameters.Add("P_TYPE", OracleType.VarChar, 500).Direction = ParameterDirection.Output;
_command.Parameters.Add("P_RET", OracleType.Number, 1).Direction = ParameterDirection.Output;
_command.Parameters.Add("P_MSG", OracleType.VarChar, 500).Direction = ParameterDirection.Output;
_connection.Open();
_command.ExecuteNonQuery();
_ret = (_command.Parameters["P_RET"].Value != DBNull.Value) ? (Convert.ToInt32(_command.Parameters["P_RET"].Value) > 0) : false;
msg = (_command.Parameters["P_MSG"].Value != DBNull.Value) ? _command.Parameters["P_MSG"].Value.ToString() : "";
}
catch (Exception ex)
{
msg = ex.Message.ToString();
}
}
finally
{
_connection.Close();
}
return _ret;
}

public bool OraExeFill(string cmdStr,ref DataTable _dt,ref string _msg)
{
bool _ret=false;
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
OracleCommand _command = _connection.CreateCommand();
_command.CommandText = cmdStr;
OracleDataAdapter _adapter = new OracleDataAdapter(cmdStr, _connection);
_adapter.Fill(_dt);
_ret=true;
}
catch (Exception e)
{
_msg=e.Message;
}
return _ret;
}

public string OraExeScalar(string cmdStr, ref string msg)
{
string _scalarValue = "";
DataTable _returnTable = new DataTable();
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
_connection.Open();
OracleCommand _command = _connection.CreateCommand();
_command.CommandText = cmdStr;
_scalarValue = _command.ExecuteScalar().ToString();
}
catch (Exception ex)
{
msg = ex.Message.ToString();
return "";
}
finally
{
_connection.Close();
}
return _scalarValue;
}

public bool OraExeNonQuery(string cmdStr, ref string msg)
{
bool _ret = false;
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
_connection.Open();
OracleTransaction _trans = _connection.BeginTransaction();
OracleCommand _command = _connection.CreateCommand();
_command.Transaction = _trans;
try
{
_command.CommandText = cmdStr;
_command.ExecuteNonQuery();
_trans.Commit();
_ret = true;
}
catch (Exception ex1)
{
_trans.Rollback();
msg = ex1.Message.ToString();
}
}
catch (Exception ex)
{
msg = ex.Message.ToString();
}
finally
{
_connection.Close();
}
return _ret;
}

public bool OraExeNonQuery(ArrayList cmdStr, ref string msg)
{
bool _ret = false;
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
_connection.Open();
OracleTransaction _trans = _connection.BeginTransaction();
OracleCommand _command = _connection.CreateCommand();
_command.Transaction = _trans;
try
{
for (int i = 0; i < cmdStr.Count; i++)
{
_command.CommandText = cmdStr[i].ToString();
_command.ExecuteNonQuery();
}
_trans.Commit();
_ret = true;
}
catch (Exception ex1)
{
_trans.Rollback();
msg = ex1.Message.ToString();
}
}
catch (Exception ex)
{
msg = ex.Message.ToString();
}
finally
{
_connection.Close();
}
return _ret;
}
}
}

㈨ Oracle9i不僅僅是資料庫

我們大家都知道Oracle i是資料庫產品 可能會由此而推斷Oracle i 是 i 的新版本 其實Oracle i 並非單一的資料庫產品 它是將Oracle i資料庫 Oracle i 應用伺服器(Oracle iAS)和Oracle i Developer Suite集成在一起的用於Internet的新一代智能化的 協同各種應用的軟體基礎架構 Oracle認為 目前企業用戶在IT方面投資結構中最大部分是基礎環境建設 其次是標准業務系統 二者合起來能夠佔到IT總投資的 % 而對於最有競爭力的業務增值系統投資往往最少 只能佔到 % 在基礎結構上投資過多導致企業採用了多個廠商的產品 而這些產品之間往往缺乏兼容性 Oracle的目標是使用戶將 %的投資用於真正對業務提供高增值的部分 在這種情況下 Oracle看到了軟體正在從產品轉變為服務 Oracle i正是集成了Oracle 的各項先進技術 將提供高的服務質量和優良的服務類型作為目標的套件平台 Oracle i資料庫 作為長達 年的軟體技術研發成果 Oracle i資料庫在全面繼承Oracle i資料庫Internet技術基礎上 進一步增強了Oracle i 資料庫在可伸縮性 可用性 Java與XML支持能力等方面的性能 與Oracle i資料庫相比 Oracle i資料庫藉助突破性的真正應用集群技術(Real Application Clusters)提供了無限的可伸縮性和總體可用性 具有集成的先進數據分析與數據挖掘功能以及更自動化的系統管理功能 是能夠跨越多個計算機集群系統 運行SAP PeopleSoft Siebel Oracle電子商務套件等主流應用軟體的資料庫平台 最經濟的計算體系——集群計算體系 近年來 企業用戶在構建信息應用系統時只能在兩種計算體系中進行選擇 一是基於主機的計算體系 另一就是基於客戶機/伺服器的計算體系 基於主機的計算體系具有良好的系統可伸縮性 可靠性和高性能 但它昂貴的價格迫使用戶在系統建設之初就在硬體系統上投入巨大資源 而用戶花費巨額資金購買的主機系統也許包含了不少並不需要的功能 造成資源浪費 基於客戶機/伺服器的計算體系雖然允許用戶根據實際需要逐步增加硬體系統 但這種體系的系統在應用升級和管理方面都需要用戶付出巨大的代價 藉助Oracle i資料庫 Oracle提供了新的最經濟的計算模式 這就是集群計算模式 其核心技術是Oracle真正應用集群技術 允許用戶把運行了Oracle i真正應用集群系統的普通硬體系統組成集群 並根據需要隨時在集群系統中增加新的硬體 提高系統的伸縮性和可用性 從而能夠在價格相對低廉的中低端平台上享用過去只有高端系統才具備的高可伸縮性和高可用性 既提高了系統的性能 同時也降低了成本 實現了更多的計算機=更快速度的目標 無限的可伸縮性和可用性 Oracle i真正應用集群是Oracle新一代群集技術 包括 項專利和 項待批專利技術 藉助Oracle獲得專利的Cache Fusion(高速緩存融合)體系結構 Oracle i真正應用集群系統能夠迅速有效地在集群的所有計算機上共享那些經常被訪問的數據 從而能夠提供透明的應用可伸縮性和超過四個節點幾乎線性的總體可用性 這意味著在計算機數量和用戶數量都增加 倍時 系統的響應速度不會受到任何影響 為了充分發揮Oracle i真正應用集群系統的功能 Oracle與康柏 EMC HP Sun等領先的硬體廠商緊密合作 共同開發能夠與這一新集群技術無縫工作的硬體伺服器和網路存儲系統 藉助Oracle i實時應用集群 Oracle i資料庫在集群系統上能夠真正作為一個單一的資料庫系統 不需要把數據分離在多個計算機中 因此 如果用戶在集群系統中增加計算機 Oracle i資料庫能夠自動地檢索出新的計算資源並充分利用 使用戶能夠容易地在集群系統中增加計算能力 同時有效地改進應用的可伸縮性和可用性 完整的資料庫功能 Oracle i資料庫提供了 多個新功能 在集群技術 高可用性 商業智能 安全性 系統管理等方面都實現了新的突破 在商業智能方面 Oracle i資料庫能夠提供具有強勁聯機分析處理(OLAP)和數據挖掘技術的先進分析服務 使用戶能夠容易地開發個性化的解決方案 對包括歷史信息和當前Web網站交互信息在內的所有數據進行分析 Oracle i資料庫大幅度提高了核心數據管理能力 能夠支持更大的數據量 更多的用戶 更快的響應時間和更有效的數據抽取 轉換和載入(ETL)功能 在安全性方面 Oracle i資料庫提供了完善的端到端安全體系結構 包括強壯的三層安全體系 託管環境的安全體系 支持基於標準的PKI 改進的用戶和安全管理策略 提供數據加密和標簽安全(Label Security)等等 進一步改進的可管理性是Oracle i資料庫的主要優勢之一 主要體現在以下幾個方面 在一些關鍵領域實現資料庫自助管理 流線化並改進了操作管理過程 提供有效的管理工具和技巧減少管理資料庫所需要的任務和時間 提供能夠管理整個Oracle堆棧而不僅僅是資料庫的端到端系統管理解決方案 在可用性方面 Oracle i資料庫提供了總控鑰匙式零數據丟失保護環境 通過對更多聯機操作的支持減少離線維護的要求 提供快速而准確的資料庫修復工具 提供自助錯誤更正功能使最終用戶容易識別並更正自己引起的錯誤 Oracle i資料庫還提供了大量的配置 以便使資料庫能夠在預定維修 甚至意外災難期間提供一致的性能 藉助這些強大的可用性保障體系 Oracle i資料庫實現了高可用性 Oracle i Application Server(Oracle iAS) 同Oracle i 和 Oracle i Developer Suite工具集結合在一起 Oracle iAS為創建 提交和管理Internet應用提供了高度可伸縮的 基於標準的基礎結構和優良的數據集成特性 它適於運行任何Internet應用包括J EE和基於模型的應用 Oracle iAS提供了由 Apache所支持的Oracle iAS 高速緩存等新特性 可大幅提高網站性能和規模可調性 無需增加更多的昂貴硬體就可以以更豐富的動態頁面內容支持更多的用戶 Oracle iAS 使用戶可以通過企業門戶提供統一風格的服務 以Web界面為先 將瀏覽器作為標准訪問界面 同時還有很多可用的現成Portlet(網頁模塊)存儲在Oracle i 資料庫中 這樣用戶只需要通過裝配組合就可以快速構造出企業電子商務門戶 Oracle iAS 還支持基於角色的個性化處理 能夠構建一次登錄門戶 Oracle iAS Wireless支持任何訪問設備 並能夠根據訪問設備的不同進行個性化處理 Oracle i Developer Suite 該套件是一套完整集成的開發工具包 開發人員可利用它簡便快捷地創建下一代的具有個性化的門戶以及託管軟體服務功能的Internet應用 該產品包具有公共的IDE以及用於建模 Java程序設計 組件開發和生成報表的工具 所有工具共享一個公用數據字典 允許開發者相互共享開發項目 通過集成的Java XML和SQL開發 使開發人員可以靈活使用多種開發策略 ■ lishixin/Article/program/Oracle/201311/17089

㈩ oracle 資料庫的外模式,內模式,模式。

引用:http://blog.csdn.net/zhaowenzhong/article/details/6076373
我覺得這里說得還是比較靠譜:

在ORACLE資料庫中,
模式對應整個資料庫中的表、索引、序列;
外模式對應某個用戶的表、索引、序列、視圖、同義詞,也稱為「方案對象」;
內模式對應存儲結構,比如邏輯存儲結構(表空間、區、段、塊等)、物理存儲結構(數據文件、控制文件、重做日誌文件、初始化參數文件、配置文件等)。

其他資料庫類似。
我用了DB2,其中就有模式SCHMEA關鍵詞,但這個概念比較虛,更多人願意使用OWNER這個關鍵詞。
最大的問題在於電腦不是中國人發明的,資料庫概念也不是,模式的詞彙是硬翻譯過來的。
個人認為模式,就是架構層次的意思,
模式:總體架構及設計方式
外模式:用戶層,所有與使用者程序或用戶打交道的一系列概念
內模式:存儲層,所有與數據存儲方式打交道的一系列概念

如果要以視圖訪問來看,就更典型:
SELECT * FROM 資料庫.A視圖
A視圖純粹用於用戶層
而視圖->表->表空間的整體架構就是資料庫模式
A視圖基於 B,C,D表
B,C,D表又位於b,c,d表空間
那麼 A->B,C,D就是外模式到模式的對應, B,C,D=>到b,c,d就是模式到內模式的對應
內模式不僅包含表如何存放到表空間,表空間如何在文件上存儲,還要關心表空間如何分頁、分段、分區等。