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的官方文档,尽管官方文档介绍较为琐碎,但它是最全的文档。

 

 

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