oracle數據庫使用

       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)的時候,需要啓動這個服務。(非必須啓動)

(16)OracleJobSchedulerORCL

Oracle作業調度(定時器)服務,ORCL是Oracle實例標識。(非必須啓動)

(17)OracleMTSRecoveryService

服務端控制。該服務允許數據庫充當一個微軟事務服務器MTS、COM/COM+對象和分佈式環境下的事務的資源管理器。(非必須啓動)

(18)OracleHOME_NAMEClrAgent

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的官方文檔,儘管官方文檔介紹較爲瑣碎,但它是最全的文檔。

 

 

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