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