oracle的層次依次是客戶端--服務器內存全局守護進程-服務器-物理文件存儲-全局數據庫-用戶-表空間-數據庫-表-記錄等。不同層次引申出不同的內容,由於大部分計算機使用者接觸的是數據庫的表或記錄,只是熟悉SQL的操作,而對於地理信息使用者而言,大部分則是熟悉arcgis等桌面軟件,對oracle並不熟悉,因此在使用oracle 過程中遇到了很多的問題。
oracle官方文檔:https://www.oracle.com/technetwork/cn/indexes/documentation/index.html
本文包含oracle安裝,客戶端安裝,oracle服務、oracle數據庫操作、arcgis與oracle互操作等內容。其中,arcgis與oracle互操作需要空間數據庫引擎arcsde(Spatial Database Engine)中間件來驅動oracle數據庫。從某種意義上說,arcgis類似於navicat、plsql等oracle數據庫的客戶端,arcsde則類似於oci.dll數據驅動,acrgis連接oracle數據庫同樣使用tcp/ip連接,用於保證arcgis與oracle或者其他關係型數據庫處於暢通狀態。
一、oracle版本下載:
https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
二、oracle服務器安裝:
oracle單機服務器安裝
https://blog.csdn.net/wangl2014/article/details/84030601
https://blog.csdn.net/w15977858408/article/details/104496853
https://blog.csdn.net/KK_bluebule/article/details/83509840 (oracle與arcgis)
oracle集羣服務器安裝
https://www.cnblogs.com/baiboy/p/orc7.html
https://www.cnblogs.com/lijiaman/p/7673795.html
oracle 單機服務器安裝配置信息:
根目錄:..\oracle
數據庫管理軟件:..\oracle\product\11.2.0\dbhome_1
數據存放路徑:..\oracle\oradata
管理員賬戶:sys,system
賬戶狀態:除管理員賬戶sys,system外,皆爲鎖定(鎖定賬戶需要解除鎖定,才能使用)
全局數據庫:orcl(默認)
數據庫標識SID:orcl(默認)
客戶端遠程端口:1521
https網頁版遠程端口:1158
dos-cmd登陸,鍵入sqlplus:
用戶名:sys
密碼:******
oracle網頁版登錄界面:https://localhost:1158/em (localhost也可換成服務器在局域網IP地址,如:192.168.0.108)
oracle集羣服務器配置信息:
根目錄:..\oracle
網格 grid軟件:..\oracle\product\11.2.0\grid app\grid
數據庫管理軟件:..\oracle\product\11.2.0\dbhome_1
數據存放路徑:..\oracle\oradata
集羣名稱:oracle-scan
節點一:rac1,rac1-vip
節點二:rac2,rac2-vip
。。。。。。。。。。。。。。。。。。。。。。。。。
共享磁盤:..\shared_config ...\shared_grid ..\shared_home ..\shared_data
數據存放路徑:..\oracle\oradata
ORC文件:..\shared_config\
表決文件:..\shared_config\
客戶端遠程端口:1521
https網頁版遠程端口:1158
oracle網頁版登錄界面:https://192.168.0.103:1158/em
主從節點IP
rac1:
主機名:rac1.localdomain
IP地址:192.168.0.101(公共地址)
默認網關:192.168.0.1(公共地址)
IP地址:192.168.1.101(私人地址)
rac2:
主機名:rac2.localdomain
IP地址:192.168.0.102(公共地址)
默認網關:192.168.0.1(公共地址)
IP地址:192.168.1.102(私人地址)
.。。。。。。。。。。。。。。。。。。。。。。。
出口IP:192.168.0.108
///////////////////////////////////////////////////////////////////////////////////////////////////////
三、oracle中間件服務器監聽程序Listener和客戶端連接程序tns安裝
oracle一般使用TCP/IP方式連接。服務器監聽程序Listener和客戶機連接程序tns使用Net manager(Net Configuration)或者Net Configuration Assistant安裝,配置配置參見附件一。其中Net Configuration Assistant爲嚮導式安裝,Net manager爲手動安裝,建議使用Net Configuration Assistant安裝。服務器監聽程序Listener安裝在oracle服務器上,tns安裝在客戶機上,安裝完以後,生成sqlnet.ora、listener.ora和tnsnames.ora文件。
sqlnet.ora用於配置網絡連接時所使用的連接方式。
listener.ora用於配置服務器端監聽客戶端的信息。
tnsnames.ora用於配置客戶端連接服務端數據庫連接信息
安裝完服務器監聽程序Listener和客戶機連接程序tns後,才能使用navicat、plsql等遠程可視化客戶端工具進行連接操作。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
四:oracle客戶端navicat、plsql安裝
navicat安裝:https://blog.csdn.net/qq1437715969/article/details/80380031
plsql 安裝:https://blog.csdn.net/qiucheng_198806/article/details/80361944
兩者安裝完成後需要配置讀取oracle遠程服務器的數據驅動oci.dll,將oci.dll指定到軟件的配置位置處。
客戶端連接信息:
oracle遠程服務器IP:172.168.0.8(按照各自服務器的遠程IP而定)
賬戶信息:賬戶分爲管理員賬戶和普通賬戶,按照各自創建數據庫時輸入
密碼:*****
端口:默認爲1521,按照各自創建監聽程序時指定
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
五:oracle客戶端工具navicat、SQL plus、plsql配置
1、服務器端配置:
安裝完oracle數據庫之後,可以使用客戶端工具連接,事先確保相應服務啓動:
保證這兩個服務是啓動狀態的,沒有啓動的話就手動啓動一下
找到......\product\11.2.0\dbhome_1\NETWORK\ADMIN文件夾下的listener.ora這個文件,將IP地址修改爲oracle服務器IP地址192.168.0.108:
修改完IP地址後,重啓Oracle數據庫監聽服務。
2、客戶端登陸
(1)SQL plus客戶端登陸
打開SQL plus
輸入用戶名和密碼:
(2)navicat客戶端登陸
打開工具
配置oci.dll文件,把oracle安裝目錄下bin文件夾裏面的oci.dll文件導入:.....\product\11.2.0\dbhome_1\BIN\oci.dll
新建一個oracle的連接
起名爲oracle,可以按照自己喜好起名,在高級選項裏面,選擇對應賬戶,同時輸入用戶名和密碼,
測試連接,確定
(3)plsql客戶端登陸
打開plsql,找到plsql的 tools 》preferences
添加oracle客戶端路徑
配置tnsnames
tnsnames.ora 文件如下
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.108)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
重新啓動plsql。
配置登錄界面信息:
用戶名:system
密碼:xxxx
遠程服務器:172.168.0.108:1521/orcl (IP地址:端口號/數據庫實例名)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
六、oracle服務介紹
SID指代數據庫標識(SID默認爲orcle),HOME_NAME指代OraDb11g_home1、OraDb12c_home1等
(1)OracleServiceSID(OracleService+數據庫名)
數據庫服務(數據庫實例),是Oracle核心服務該服務,是數據庫啓動的基礎, 只有該服務啓動,Oracle數據庫才能正常啓動。數據庫服務自動地啓動和停止數據庫。如果安裝了一個數據庫,數據庫服務的缺省啓動類型爲自動。服務進程爲ORACLE.EXE,參數文件initSID.ora,日誌文件SIDALRT.log,控制檯SVRMGRL.EXE、SQLPLUS.EXE。(必須啓動)
(2)OracleHOME_NAMETNSListener
監聽器服務,服務只有在數據庫需要遠程訪問時才需要(無論是通過另外一臺主機還是在本地通過 SQL*Net 網絡協議都屬於遠程訪問),不用這個服務就可以訪問本地數據庫,它的缺省啓動類型爲自動。服務進程爲TNSLSNR.EXE,參數文件Listener.ora,日誌文件listener.log,控制檯LSNRCTL.EXE,默認端口1521、1526,使用TCP/IP協議。(非必須啓動)
要是隻用Oracle自帶的sql*plus的話,只要啓動OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的話,OracleHOME_NAMETNSListener服務也要開啓。OracleDBConsoleorcl是進入基於web的EM必須開啓的,其餘服務很少用。注:ORCL是數據庫實例名,默認的數據庫是ORCL,你可以創建其他的,即OracleService+數據庫名。
同時使用客戶端和服務器端,OracleServiceSID和OracleHOME_NAMETNSListener都要啓動。
(3)OracleHOME_NAMEAgent
OEM代理服務,接收和響應來自OEM控制檯的任務和事件請求,只有使用OEM管理數據庫時才需要,它的缺省啓動類型爲自動。服務進程爲DBSNMP.EXE,參數文件snmp_rw.ora,日誌文件nmi.log,控制檯LSNRCTL.EXE,默認端口1748。
(4)OracleHOME_NAMEClientCache
緩存服務,服務緩存用於連接遠程數據庫的Oracle Names 數據。它的缺省啓動類型是手動。然而,除非有一臺Oracle Names 服務器,否則沒有必要運行這個服務。服務進程爲ONRSD.EXE,參數文件NAMES.ORA,日誌文件ONRSD.LOG,控制檯NAMESCTL.EXE。
(5)OracleHOME_NAMECMAdmin
連接管理服務,是構建Connection Manager服務器所用,只有服務器作爲Connection Manager才需要,它的缺省啓動類型是手動。服務進程爲CMADMIN.EXE,參數文件CMAN.ORA,日誌文件CMADM_PID.TRC,控制檯CMCTL.EXE,默認端口1830。
(6)OracleHOME_NAMECMan
連接網關服務,是構建Connection Manager服務器所用,只有服務器作爲Connection Manager才需要,它的缺省啓動類型是手動。服務進程爲CMGW.EXE,參數文件CMAN.ORA,日誌文件CMAN_PID.TRC,控制檯CMCTL.EXE,默認端口1630。
(7)OracleHOME_NAMEDataGatherer
性能包數據採集服務,除非使用Oracle Capacity Planner 和 Oracle Performance Manager,否則不需要啓動,它的缺省啓動類型是手動。服務進程爲VPPDC.EXE,日誌文件alert_dg.log,控制檯vppcntl.exe。
(8)OracleHOME_NAMEHTTPServer
Oracle提供的WEB服務器,一般情況下我們只用它來訪問Oracle Apache 目錄下的Web 頁面,比如說JSP 或者modplsql 頁面。除非你使用它作爲你的HTTP服務,否則不需要啓動(若啓動它會接管IIS的服務),它的缺省啓動類型是手動。服務進程爲APACHE.EXE,參數文件httpd.conf,默認端口1158。即::https://localhost:1158/em
(9)OracleHOME_NAMEPagingServer
通過一個使用調制解調器的數字傳呼機或者電子郵件發出警告(沒試過),它的缺省啓動類型是手動。服務進程PAGNTSRV.EXE,日誌文件paging.log。
(10)OracleHOME_NAMENames
Oracle Names服務,只有服務器作爲Names Server才需要,它的缺省啓動類型是手動。服務進程NAMES.EXE,參數文件NAMES.ORA,日誌文件NAMES.LOG,控制檯NAMESCTL.EXE,默認端口1575。
(11)OracleSNMPPeerMasterAgent
SNMP服務代理,用於支持SNMP的網管軟件對服務器的管理,除非你使用網管工具監控數據庫的情況,否則不需要啓動,它的缺省啓動類型是手動。服務進程爲AGNTSVC.EXE,參數文件MASTER.CFG,默認端口161。
(12)OracleSNMPPeerEncapsulater
SNMP協議封裝服務,用於SNMP協議轉換,除非你使用一個不兼容的SNMP代理服務,否則不需要啓動,它的缺省啓動類型是手動。服務進程爲ENCSVC.EXE,參數文件ENCAPS.CFG,默認端口1161。
(13)OracleHOME_NAMEManagementServer
OEM管理服務,使用OEM時需要,它的缺省啓動類型是手動。服務進程爲OMSNTSVR.EXE,日誌文件oms.nohup。
(14)Oracle ORCL VSS Writer Service
Oracle卷映射拷貝寫入服務,VSS(Volume Shadow Copy Service)能夠讓存儲基礎設備(比如磁盤,陣列等)創建高保真的時間點映像,即映射拷貝(shadow copy)。它可以在多卷或者單個捲上創建映射拷貝,同時不會影響到系統的系統能。(非必須啓動)
(15)OracleDBConsolexx(xx表示實例名稱)
Oracle數據庫控制檯服務,orcl是Oracle的實例標識,默認的實例爲orcl。在運行Enterprise Manager(企業管理器OEM)的時候,需要啓動這個服務。(非必須啓動)
Oracle作業調度(定時器)服務,ORCL是Oracle實例標識。(非必須啓動)
服務端控制。該服務允許數據庫充當一個微軟事務服務器MTS、COM/COM+對象和分佈式環境下的事務的資源管理器。(非必須啓動)
Oracle數據庫.NET擴展服務的一部分。(非必須啓動)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
七、oracle常用命令(數據庫連接、SQL查詢定義操作、事務、索引、運維)
數據庫語言包含幾類:數據定義、操作、查詢和控制語言,
DDL(Data Definition Language)數據定義語言,用來定義數據庫對象:數據庫,表,列等。關鍵字create,drop,alter等
DML(Data Manipulation Language)數據操作語言,用來對數據庫中表的數據進行增刪改。關鍵字:insert。Delete,update
DQL(Data Query Language)數據查詢語言,用來查詢數據庫中表的記錄(數據)。關鍵字:select,where等
DCL(Data Control Language)數據控制語言,用來定義數據庫的訪問權限和安全級別,及創建用戶。關鍵字:GRANT,REVOKE等
以下按照對象進行說明,數據庫語言穿插其中。
1、oracle數據庫連接
三種以系統管理員身份連接數據庫的方式(sqlplus)
1)sqlplus "/ as sysdba" //這是典型的操作系統認證,不需要listener進程,數據庫即使不可用也可以登錄。
2)sqlplus username/password //不需要listener進程,登錄本機數據庫,數據庫實例啓動即可。
3)sqlplus username/password@tnsname //需要listener進程,最常見的遠程登錄模式,需要啓動數據庫實例和listener進程。
SQL> conn a/a //或者是connect a/a 連接到其他用戶
connect username/password //進入。
啓動sqlplus,連接數據庫服務器
sqlplus /nolog://不登錄到數據庫服務器
sqlplus / as sysdba://不需要listener進程(本人最常用的)
listen監聽服務操作
lsnrctl start://啓動監聽
lsnrctl stop://關閉監聽
lsnrctl status://查看監聽狀態
Oralce實例服務操作
startup://啓動實例
shutdown immediate://關閉實例
select * from v$instance://查看實例狀態
2、Oracle數據庫、表空間、用戶和表管理
1)數據庫
查看數據庫版
select version FROM Product_component_version
Where SUBSTR(PRODUCT,1,6)='Oracle';
查看數據庫的創建日期和歸檔方式
select Created, Log_Mode, Log_Mode From V$Database;
查看數據庫庫對象
select owner, object_type, status, count(*) count#
from all_objects group by owner, object_type, status;
改變數據庫文件大小
ALTER DATABASE .... DATAFILE .... ;
///手工改變數據文件的大小,對於原來的 數據文件有沒有損害。
查看ORACLE中運行程序
查看v$session表
查看數據庫中的表空間
select * from dba_tablespaces;
查看數據庫實例
SELECT * FROM V$INSTANCE;
查看控制文件
select name from v$controlfile;
查看日誌文件
select member from v$logfile;
2)表空間
創建表空間
create tablespace oraclespace1 // 新建oraclespace1表空間
logging
datafile '..../oracle/data/data01/rdbms/obak/datafile/oraclespace1.dbf'
// 創建oraclespace1物理文件..../oracle/data/data01/rdbms/obak/datafile/oraclespace1.dbf
size 32m //初始大小1024m,
autoextend on
next 32m maxsize 2048m //表空間超過32m自動增加,每次增加32M,最大容量2048m。
extent management local;
擴展表空間
ALTER tablespace oraclespace1 ADD
DATAFILE '.../oracle/data/data01/rdbms/obak/datafile/oraclespace2.dbf' SIZE 1024M
AUTOEXTEND ON NEXT 32M MAXSIZE 2048m;
//爲oraclespace1追加oraclespace2表空間
將用戶綁定到表空間
alter user 用戶名 quota unlimited on 表空間
create user orcl_user identified by xxx default tablespace oraclespace1
授予用戶操作數據表權限
grant connect,resource to orcl_user;
grant create any sequence orcl_user;
grant create any table to orcl_user;
grant delete any table to orcl_user;
grant insert any table to orcl_user;
grant select any table to orcl_user;
grant unlimited tablespace to orcl_user;
grant execute any procedure to orcl_user;
grant update any table to orcl_user;
grant create any view to orcl_user;
或者授予DBA權限
grant dba to orcl_user;
刪除表空間
drop tablespace oraclespace1 including contents and datafiles
3)用戶
新建用戶並授權
create user username identified by password; create user a identified by a;//創建用戶(默認建在SYSTEM表空間下)
grant connect,resource,dba to username;//授權 grant connect,resource,dba,sysdba to username;
grant connect,resource to a;
修改用戶密碼
alter user a identified by 123456;
授權用戶可以訪問數據庫所有表
grant select any table to a;
授權用戶操作其他用戶的表
grant select,insert,update,delete on student.emp to a;
查看系統擁有哪些用戶
select * from all_users;
顯示當前連接用戶
show user –不能用在sql窗口 只能用在command命令窗口。
查看當前用戶下所有對象
select * from tab; --table或是view
查看用戶連接
select username,sid,serial# from v$session;
查看當前用戶的缺省表空間
select username,default_tablespace from user_users;
查看當前用戶的角色
select * from user_role_privs;
查看當前用戶的系統權限和表級權限
select * from user_sys_privs;
select * from user_tab_privs;
SELECT * FROM dba_sys_privs ; --一個權限對應一條數據,這樣對於同一個用戶就有多條數據了。
查看用戶的SYSDBA、SYSOPER權限
conn sys/change_on_install –登不上去
select * from V_$PWFILE_USERS;
查看序列號
select * from user_sequences;
4)表
新建表
create table a(a number);
修改表名
alter table old_table_name rename to new_table_name;
修改表主鍵
alter table aaa drop constraint aaa_key ;
alter table aaa add constraint aaa_key primary key(a1,b1) ;
清空表
truncate table table_name;
刪除表
DORP TABLE 表名;
例:表刪除將同時刪除表的數據和表的定義
drop table test
查看用戶下的所有表:
select * from all_tables;
查看用戶下的所有表
select distinct table_name from user_tab_columns; //僅顯示一列表名。
查看單個表結構
desc a
查看單個表記錄
select * from a;
查看單個表的創建時間
select object_name,created from user_objects where object_name=upper('&table_name');
查看單個表的大小
select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&table_name');
查看放在ORACLE的內存區裏的表
select table_name,cache from user_tables where instr(cache,'Y')>0;
查看名稱包含log字符的表
select object_name,object_id from user_objects
where instr(object_name,'LOG')>0;
查看錶空間物理文件的名稱及大小
select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
查看錶空間的使用情況
select sum(bytes)/(1024*1024) as free_space,tablespace_name
from dba_free_space
group by tablespace_name;
統計兩個表的記錄總數
select (select count(id) from aa)+(select count(id) from bb) 總數 from dual; --總數那是沒有單引號的,雙引號可以。
3、表記錄的增刪查改操作
(1)增:有2種方法
1)使用insert插入單行數據:
語法:insert [into] <表名> [列名] values <列值>
例:insert into Strdents (姓名,性別,出生日期) values ('王偉華','男','1983/6/15')
insert into a values(1);
注意:如果省略表名,將依次插入所有列
2)使用insert,select語句將現有表中的 數據添加到已有的新表中
語法:insert into <已有的新表> <列名> select <原表列名> from <原表名>
例:insert into addressList ('姓名','地址','電子郵件')select name,address,email
from Strdents
注意:查詢得到的數據個數、順序、數據類型等,必須與插入的項保持一致
(2)刪:有2中方法
1)使用delete刪除數據某些數據
語法:delete from <表名> [where <刪除條件>]
例:delete from a where name='王偉華'(刪除表a中列值爲王偉華的行)
delete from a;
注意:刪除整行不是刪除單個字段,所以在delete後面不能出現字段名
2)使用truncate table 刪除整個表的數據
語法:truncate table <表名>
例:truncate table addressList
注意:刪除表的所有行,但表的結構、列、約束、索引等不會被刪除;不能
用於有外建約束引用的表
(3)改 使用update更新修改數據
語法:update <表名> set <列名=更新值> [where <更新條件>]
例:update addressList set 年齡=18 where 姓名='王偉華'
update a set a=2;
注意:set後面可以緊隨多個數據列的更新值(非數字要引號);where子句是可選的(非數字要引號),用來限制條件,如果不選則整個表的所有行都被更新
(4)查
1)普通查詢
語法:select <列名> from <表名> [where <查詢條件表達試>] [order by <排序的列
名>[asc或desc]]
1).查詢所有數據行和列
例:select * from a
說明:查詢a表中所有行和
2).查詢部分行列--條件查詢
例:select i,j,k from a where f=5
說明:查詢表a中f=5的所有行,並顯示i,j,k3列
3).在查詢中使用AS更改列名
例:select name as 姓名 from a where gender='男'
說明:查詢a表中性別爲男的所有行,顯示name列,並將name列改名爲(姓名)顯示
4).查詢空行
例:select name from a where email is null
說明:查詢表a中email爲空的所有行,並顯示name列;SQL語句中用is null或者is not null
來判斷是否爲空行
5).在查詢中使用常量
例:select name '北京' as 地址 from a
說明:查詢表a,顯示name列,並添加地址列,其列值都爲'北京'
6).查詢返回限制行數(關鍵字:top )
例1:select top 6 name from a
說明:查詢表a,顯示列name的前6行,top爲關鍵字(oracle 中沒有top關鍵字
用rownum替代)
select * from a where rownum<6
7).查詢排序(關鍵字:order by , asc , desc)
例:select name
from a
where grade>=60
order by desc
說明:查詢表中成績大於等於60的所有行,並按降序顯示name列;默認爲ASC升序
2)模糊查詢
1).使用like進行模糊查詢
注意:like運算副只用語字符串,
例:select * from a where name like '趙%'
說明:查詢顯示錶a中,name字段第一個字爲趙的記錄
2).使用between在某個範圍內進行查詢
例:select * from a where age between 18 and 20
說明:查詢顯示錶a中年齡在18到20之間的記錄
3).使用in在列舉值內進行查詢(in後是多個的數據)
例:select name from a where address in ('北京','上海','唐山')
說明:查詢表a中address值爲北京或者上海或者唐山的記錄,顯示name字段
3)分組查詢
1).使用group by進行分組查詢
例:select studentID as 學員編號, AVG(score) as 平均成績 (註釋:這裏的score是列名)
from score (註釋:這裏的score是表名)
group by studentID
2).使用having子句進行分組篩選
例:select studentID as 學員編號, AVG from score
group by studentID
having count(score)>1
說明:接上面例子,顯示分組後count(score)>1的行,由於where只能在沒有分組時使用,分組後只能使用having來限制條件,
4)多表聯接查詢
1).內聯接
①在where子句中指定聯接條件
例:select a.name,b.mark
from a,b
where a.name=b.name
說明:查詢表a和表b中name字段相等的記錄,並顯示錶a中的name字段和表b中的mark字段
查找重複記錄
SELECT * FROM TABLE_NAME WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAMe WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);
刪除重複記錄
DELETE FROM TABLE_NAME WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);
字符串連接
SELECT CONCAT(COL1,COL2) FROM TABLE ;
SELECT COL1||COL2 FROM TABLE ;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
八、oracle視圖
創建視圖
create view 表名 as
select 要基表的列名稱,也可以直接用*代替所有列
from 基表
with read only
//with read only 加上後視圖就變成了只讀模式,只能進行查詢,不能進行修改操作。
查詢視圖
select * from 視圖名
更新視圖
update 視圖名 set 字段 where 字段
刪除視圖
drop view 視圖名
查看當前用戶視圖的名稱
select view_name from user_views;
查看創建視圖的select語句
set view_name,text_length from user_views;
set long 2000; 說明:可以根據視圖的text_length值設定set long 的大小
select text from user_views where view_name=upper('&view_name');
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
九、Oracle索引
創建索引
create index index_name on table_name([column1 [ASC|DESC])
重命名索引
alter index index_re rename to index_name;
刪除索引
drop index ndex_name
查看索引個數和類別
select index_name,index_type,table_name from user_indexes
order by table_name;
查看索引被索引的字段
select * from user_ind_columns
where index_name=upper('&index_name');
查看索引的大小
select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&index_name');
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
十、oracle存儲過程
創建存儲過程
create [or replace] procedure 存儲過程名 [(輸入、輸出參數、in/out模式參數)]
is/as
begin
sentences;
[exception sentences;]
end 存儲過程名
存儲過程調用
execute 存儲過程名;
查看函數和過程的狀態
select object_name,status from user_objects where object_type='FUNCTION';
select object_name,status from user_objects where object_type='PROCEDURE';
查看函數和過程的源代碼
select text from all_source where owner=user and name=upper('&plsql_name');
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
十一、oracle事務:
創建事務
set transaction
設置事務約束模式
Set constrains
事務回滾
roll;
rollback;
事務提交
commit;
查看回滾段名稱及大小
select segment_name, tablespace_name, r.status,
(initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
max_extents, v.curext CurExtent
From dba_rollback_segs r, v$rollstat v
Where r.segment_id = v.usn(+)
order by segment_name ;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
十二、oracle數據的導入導出操作(數據備份與恢復)
執行腳本SQL文件
@PATH/filename.sql;
select結果導到文本文件
SQL>SPOOL C:\ABCD.TXT;
SQL>select * from table;
SQL >spool off;
數據庫的導出(exp):
將數據庫orcl完全導出,用戶名scott密碼tiger導出到
exp scott/tiger@orclfile=d:\ABCD.dmp full=y
將數據庫中system用戶與sys用戶的表導出
exp scott/tiger@orcl file=d:\ABCD.dmpowner=(system,sys)
將數據庫中的表table1、table2導出
exp scott/tiger@orclfile=d:\ABCD.dmptables=(table1,table2)
數據導入:
imp scott/tiger@orcl file=D:\ABCD.dmp;
exp –> 表示 執行BIN目錄下的exp.exe可運行程序
scott/tiger –> 分別表示導出數據的用戶名和密碼
orcl –> 表示 oracle數據庫的實例名稱
file –> 用於去指定我們導出的數據的存放位置。
執行完成之後就可以完成數據的導出需求。
測試SQL語句執行所用的時間
set timing on ;
select * from tablename;
複製表結構及其數據:
create table table_name_new as select * from table_name_old
只複製表結構:
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old
只複製表數據:
如果兩個表結構一樣:
insert into table_name_new select * from table_name_old
如果兩個表結構不一樣:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old
創建帶主鍵的表:
create table stuInfo(stuID int primary key,stuName varchar2(20),age int);
或是不直接增加主鍵
alter table stuInfo add constraint stuInfo _PK primary key (stuID)
十三、arcgis連接oracle數據庫
1、安裝oracle客戶端的連接程序tns,參見:三、oracle中間件服務器監聽程序Listener和客戶端連接程序tns安裝
注:oracle客戶端以arcgis版本或或者產品而定:倘若使用的是arcgis destop,該程序爲32位,oracle客戶端安裝32位版本;倘若使用的是arcserver ,該程序爲64位,oracle客戶端安裝64位版本.
2、配置oracle環境變量
path條目中增加 C:\Program Files\Oracle或者C:\Program Files (x86)\Oracle路徑。
3、建立企業級地理數據庫
配置信息:
數據庫平臺:Oracle;
數據庫實例:orcl; //oracle默認實例爲orcl,遠程服務器IP+端口號+實例名稱,如:192.168.0.8:1521/orcl或者192.168.0.8/orcl
數據庫:orcl;//已有數據庫名稱,可選
數據庫管理員賬戶:sa;//arcgis默認賬戶sa,如果數據庫實例爲Oracle已有數據庫,如默認數據庫orcl,請使用安裝orcl數據庫時的管理員賬戶,如:sys,system或者當時創建的賬戶orcl
數據庫管理員密碼:*****;//使用sys,system或者當時創建的賬戶orcl對應的密碼
sde擁有的方案://建議勾選;
地理數據庫用戶:sde;//默認賬戶sde,可以自行創建地理數據庫用戶
地理數據庫密碼:*****//自行創建地理數據庫密碼
地理數據庫表空間://默認表空間sde,如果使用Oracle已有數據庫,選擇對應表空間,也可以自行創建表空間
授權文件:,//arcgis server的破解文件server.ecp。
4、連接地理數據庫
數據庫平臺:orcl
實例:遠程服務器IP+端口號+實例名稱,如:192.168.0.8:1521/orcl或者192.168.0.8/orcl
地理數據庫用戶名:sde
地理數據庫密碼:*****
5、導入座標系
數據集名稱:spatialdatabase; //自行創建數據集名稱
數據集座標系:CGCS2000;//根據數據集所在座標系選擇
6、將數據導入oracle數據庫
7、注意事項
(1)確保oracle監聽服務端口1521可以穿過服務器與客戶端防火牆,將1521加入入站、出站規則
(2)擁有arcsde的.ecp權限文件
(3)擁有oracle空間數據庫驅動,安裝arcsde,將oralce支持空間數據庫的動態庫st_shapelib.dll配置到extproc.ora文件。
使用地理數據庫用戶sde登錄oralce數據庫,更新驅動
CREATE OR REPLACE LIBRARY ST_SHAPELIB AS ‘<st_shapelib.dll路徑>’
select * from dba_libraries where library_name='ST_SHAPELIB';
(4)確保oracle服務器中的空間數據庫監聽服務處於開啓狀態,確保客戶端arcgis的tns配置信息正確。
(5)無論是使用oracle數據庫或者postgres數據庫,建議使用gis桌面端編輯數據,然後再保存到數據庫中,在數據庫中操作數據並不方便。
https://blog.csdn.net/u010371710/article/details/74909146
https://blog.csdn.net/linghe301/article/details/19110539
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
附件一:Net manager(Net Configuration)和Net Configuration Assistant配置
一、Net manager(Net Configuration)和Net Configuration Assistant
1、Net Configuration Assistant是嚮導式(網上說是傻瓜式安裝,傻瓜麼?大部分剛剛接觸這個軟件的人看着這些參數都很懵)的安裝界面,而Net manager是手動配置界面。
2、Net Configuration Assistant在配置完監聽程序和本地網絡服務(TNS)後會重啓當前的服務,而Net Configuration只是修改配置文件的參數和手動修改配置文件的效果是一樣的,但是它並不會重啓服務,修改完之後,你需要手工啓動監聽程序。
注:如果初次安裝Oracle,建議使用Net Configuration Assistant配置監聽程序和網絡服務,使用Net Configuration會讓你指定網絡配置文件的位置,手動重啓監聽服務。
二、Net manager配置
1、Net manager 配置服務名
第一步
找到Net Manager,如圖所示:
第二步
打開後找到中間的Oracle Net配置下有一個服務命名,鼠標點擊“服務命名”後,點擊左側的綠色加號,如圖所示:
第三步
輸入“網絡服務名”,網絡服務名是自己命名的,沒有硬性限制,如圖3所示,然後點擊下一步。
第四步
點擊TCP/IP協議,如圖所示,點擊下一步。
第五步
輸入主機名和端口號,主機名是指你需要連接的數據庫所在的電腦的名稱,也可以是IP地址,如圖5所示。
第六步
點擊“下一步”就會顯示“測試”界面,代表你之前的設置已經完成,如圖6所示:
第七步
更改登錄進行測試,如圖7所示:
第八步
然後彈出測試成功頁面,然後點擊關閉,最後點擊完成即可,如圖8所示:
第九步
服務命名欄即出現剛剛配置的服務,然後點擊右上角的關閉按鈕,彈出窗口,選擇保存,如圖9所示,完成!!!
(此時一定不要忘了選擇菜單“文件”——“保存網絡配置”以使所做的更改生效。)
2、Net manager配置監聽
1)選中‘監聽程序’,點擊左側加號‘+’,會彈出填寫名稱框,默認即可,點擊 確定
2)右側點擊‘添加地址按鈕’,主機:如果是準備配置本地數據庫監聽的話就填寫localhost/127.0.0.1,端口:如無改動默認是1521
第二大步,就是建立監聽。點監聽程序,再點加號。輸入監聽名,和你剛建立的服務名一致。
主機寫你要連接的數據庫的IP地址,本地的就寫127.0.0.1,端口默認1521
3)右側頁面上邊下拉框,選擇‘數據庫服務’,點擊‘添加數據庫’,全局數據庫名、sid都可填寫成sid,如果不知道自己的sid,可以通過以下操作查詢
打開cmd,輸入sqlplus,用戶名:sys 密碼:manager as sysdba,進入後輸入 select name form V$database;
oracle主目錄:product\11.2.0\dbhome_2(可以根據安裝文件找根目錄下的app文件)
4)右側頁面上邊下拉框,選中‘其他服務’,點擊‘添加服務’,如果是配置本地數據庫監聽,必須填寫,配置遠程數據庫監聽則不用,程序名稱:隨便填寫,sid:對應服務名稱下oraclr_connection_data中的sid,Oracle主目錄:安裝目錄,\product\11.2.0\dbhome_2,到此監聽配置結束,不用任何操作,繼續以下服務添加操作。
5)添加服務
選中‘服務名稱’,點擊左側加號‘’+‘’,填寫網絡服務名(只作爲識別名稱,可隨意填寫 如:本地庫就寫ceshi,遠程庫可直接寫地址:xx.xx.xx.xx)
下一步,選擇tcp/Ip(internet協議)
點擊下一步,服務名稱如果是本地可填寫localhost,如果需要遠程連接數據庫,
點擊下一步後會彈出測試頁面,直接點擊‘完成’,後點選中左上角‘文件-保存網絡配置 選項。
如需測試是否配置正確,選中‘服務命名’下,你新添加的服務名稱,點做左側‘測試服務按鈕’,如圖
點擊‘更改登錄’輸入用戶名,密碼,點擊測試,如果出現連接測試成功字樣,則代表連接測試成功
三、Net Configuration Assistant配置
1、Net Configuration Assistant 配置服務
1)啓動Net Configuration Assistant。選擇“本地Net服務名配置”選項。
2)選擇“下一步”,本步驟可以對本地網絡服務名進行添加,刪除,測試是否正常連接等操作,選擇“添加”選項。
3)點擊“下一步”,填寫服務名,該服務名就是Oracle安裝時,爲數據庫取的全局數據庫名
4)點擊“下一步”,選擇服務需要的協議,默認是TCP協議。推薦使用默認的TCP協議。
5)點擊“下一步”,輸入主機名,主機名可以是計算機名稱,也可以是一個IP地址,主機如果是本機,可以使用本機計算機名稱、“localhost”、“127.0.0.1”、或者本機的IP地址。
6)單擊“下一步”,選擇“是,進行測試”選項。進入下圖界面。
在測試時,默認採用的用戶名和密碼是system/xxx進行測試,如果用戶system的密碼不是“xxx”,有可能測試通不過,更改登錄後,輸入正確的用戶名和密碼後再進行測試即可。
7)測試成功後,單擊“下一步”,出現如下界面,這一步是爲本地網絡服務命名,
點擊“下一步”,配置完成.
2、Net Configuration Assistant配置監聽
1)找到Net Configuration Assistant工具,單擊運行,選中“監聽程序配置”,單擊“下一步”
2)打開監聽程序配置對話框,可以添加、重新配置、重命名或刪除監聽程序。重命名或刪除監聽程序前,要先停止監聽程序。第一次配置時選中“添加”,然後單擊“下一步”。
3)打開配置監聽程序名對話框,輸入監聽程序的名稱。每個監聽程序由唯一的名稱標誌。可以就是默認的LISTENER,然後單擊“下一步”。
4)打開選擇協議對話框,從“可用協議”列表框中選擇協議TCP,單擊右箭頭按鈕,將其移到“選定的協議”列表框中,單擊“下一步”。
5)打開配置監聽程序TCP/IP端口號對話框,有兩個選項可以選擇,“使用標準端口號 1521”和“請使用另一個端口號”。選中“使用標準端口號 1521”即可,單擊“下一步”。
6)打開是否配置另一個監聽程序對話框,選擇不需要。單擊“下一步”,結束配置監聽。
四、listener.ora、tnsnames.ora、sqlnet.ora作用
1、listener.ora:
通過網絡配置助手Net Configuration Assistant(netca)配置完監聽程序之後,系統就會自動生成一個文件listener.ora。該文件爲listener監聽器進程的配置文件,存放在數據庫服務器端。listener進程接受遠程對數據庫的接入申請並轉交給Oracle的服務器進程,所以,如果不使用遠程連接,listener進程就不是必須的。如果關閉listener進程,並不會影響已經存在的數據庫連接。
listener.ora:用於配置監聽服務,時時監聽客戶端請求。監聽器位於服務器端,主要信息包括監聽協議(TCP/IP協議)、地址。
product\11.2.0\dbhome_1\NETWORK\ADMIN的listener.ora。
命令:服務器端使用sqlplus
進入oracle但不登錄:sqlplus/nolog
查看監聽狀態:lsnrctl status
啓動監聽:lsnrctl start
停止監聽:lsnrctl stop
2、tnsnames.ora:
tnsnames.ora:用於配置客戶端連接服務端數據庫連接信息。客戶端服務配置信息包括:服務器地址、服務名稱(數據庫實例)、端口號。
位置:product\11.2.0\dbhome_1\NETWORK\ADMIN的tnsnames.ora
命令:
測試是否能ping通:tnsping orclLocal
ORCL=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.187)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = drp)))
字段含義如下:
ORCL:自定義的網絡服務名
ADDRESS_LIST:表示該客戶機要經由多種協議與一臺或多臺服務器連接。在該樣式文件中就表示該客戶機要用TCP/IP協議來和服務器相連。
PROTOCOL: 指明要連接使用的協議。(例:PROTOCOL = TCP)
SERVICE_NAME:ORACLE數據庫服務名。(例:SERVICE_NAME = drp)
HOST:是TCP/IP協議使用的服務器IP地址。(例:HOST = 192.168.24.187)
PORT:是TCP/IP使用的端口地址。(例:PORT = 1521)
3、sqlnet.ora
用於配置網絡連接時所使用的連接方式,在ORACLE_HOME/network/admin目錄下
# 指定啓動一個或多個認證服務
SQLNET.AUTHENTICATION_SERVICES= (NTS)
注:
NONE:作用是不允許通過OS系統用戶登錄數據庫,需要提供用戶名及密碼;
ALL:作用是允許所有的登錄方式
NTS:作用是允許本地操作系統用戶認證;
# 指定CLIENT NAME解析方法的次序,默認是NAMES.DIRECTORY_PATH=(tnsnames, onames, hostname)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
常用參數設置
1.設置windows下允許使用windows nt本地認證
SQLNET.AUTHENTICATION_SERVICES=(nts)
2.設置Oracle客戶端連接串命名查找順序
NAMES.DIRECTORY_PATH=(tnsnames, onames,ezconnect)
允許的值有:
1)tnsnames使用客戶端的tnsnames.ora解析
2)ldap使用目錄訪問協議解析,需要有目錄服務
3)ezconnect or hostname,允許使用tcp/ip連接串,包含主機名,端口,服務名
4)cds分佈式環境的數據庫名
5)nis (Network Information Service (NIS) external naming method),主要用於外部程序解析
6)onames:通過Oracle Name Server解析 www.2cto.com
3.設置客戶端連接會話超時時間(單位分鐘)
定期檢測客戶端是否還是活動的,設置爲0不檢測
SQLNET.EXPIRE_TIME = 10 另外還有:
客戶端建立連接超時時間(單位秒,默認60)
SQLNET.INBOUND_CONNECT_TIMEOUT=10
Oracle建議在listener.ora中也進行配置
接受超時時間(單位秒)
SQLNET.RECV_TIMEOUT=3
發送超時時間(單位秒)
SQLNET.SEND_TIMEOUT=3
4.客戶端限制
是否進行限制(默認no):
TCP.VALIDNODE_CHECKING
如:TCP.VALIDNODE_CHECKING=yes
限制客戶端訪問
TCP.EXCLUDED_NODES=(hostname | ip_address, hostname | ip_address, ...)
如:TCP.EXCLUDED_NODES=(finance.us.acme.com, mktg.us.acme.com, 144.25.5.25)
允許客戶端訪問,會覆蓋限制訪問
TCP.INVITED_NODES=(hostname | ip_address, hostname | ip_address, ...)
如:TCP.INVITED_NODES=(sales.us.acme.com, hr.us.acme.com, 144.185.5.73)
5.設置立即發送
設置等待一段時間或者數據包湊夠多大才會一起發送,或者可以讓數據立即發送
TCP.NODELAY=yes
6.設置使用專享連接還是公用鏈接
設置爲on會在客戶端連接串後加上(SERVER=dedicated)
USE_DEDICATED_SERVER=on/off
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
因oracle操作環境都在局域網,不能提供真實素材,部分素材來源於網絡,本文無意於抄襲,只因網上oracle數據庫的相關教程或者說明都過於零散,因此整合收集,未能避免小部分地方會存在前後不一致的地方,儘量去查看oracle的官方文檔,儘管官方文檔介紹較爲瑣碎,但它是最全的文檔。