1.Oracle的基本概念:
数据库:存储数据的数据库,Oracle一般只有一个全局数据库 XE,ORCL。
EX:Express Edition 速成版
ORCL:企业版
SID:SID是System IDentifier的缩写,而ORACLE_SID就是Oracle System Identifier的缩写,在Oracle系统中,ORACLE_SID以环境变量的形式出现
如何查看sid: 1.用sysdba身份登录 比如 conn sys/密码 as sysdba 匿名管理员登陆 执行 select name from V$database; (常用的方法)或是执行select * from V$database; 不过执行第二个显示的内容太多了不好找自己想要的结果 你也可以先用desc V$database;语句查看一下V$database都有什么字段然后选择自己想要的字段进行选择 查看实例名称(sid): select instance_name from V$instance;
select value from v$parameter where name = 'instance_name'; 一般默认情况下sid与你的数据库的名称是一样的! 2.D:oracleproduct10.2.0oradataSID文件夹... 或D:oracleproduct10.2.0db_1dbsSPFILESID名称.ORA (init.ora) db_name='ORCL' 3.Unix下可以这样看: $ ps -ef|grep ora_ 进程的最后几个字母就是sid
表空间:是Oracle存储数据的地方,由若干个数据文件组成,*.dbf。
模式和模式对象:模式就是用户,模式对象是数据库对象的集合,比如表、视图、索引、存储过程。
用户(模式 schema):Oracle是通过不同的用户来区分数据库对象
模式(用户/数据库)对象:指的是这个用户所拥有的表/视图/索引/过程...
2.卸载Oracle的注意事项:
0:需要先备份重要数据
1:得合法删除(通过程序自带的卸载工具卸载,如360,程序和功能)
2:卸载完成后,需要手动移除安装文件夹
3:查看系统服务,如果有Oracle开始的服务,删除服务
打开服务快捷方式:window+R(services.msc)
3.安装Oracle的注意事项:
1.安装目录中不能有中文目录,最好不要有空格
2.最好不要安装到系统盘,怕数据丢失
Oracle:8i/9i-->Oracle10g/11g-->Oracle12C
版本:
企业版 (enterprise Edition)
个人版 (Express Edition)
4.端口号
Oracle 占用端口号:1521
oracle占用端口 8080
tomcat换端口号: 8080
两者至少有一个需要更改端口,一般更改tomcat端口哦。
mysql端口号: 3306
5.使用jdbc连接上oracle的两种方法
1、 使用thin连接
优点:thin驱动都是纯Java代码,并且使用TCP/IP技术通过java的Socket连接上Oracle数据库,所以thin驱动是与平台无关的,无需安装Oracle客户端,只需要下载一个thin驱动的jar包,并且将环境变量中的CLASS_PATH变量中加入thin驱动的路径就可以了。
缺陷:就是thin性能一般,达不到如OCI方式的企业级的要求。另外,如果一个oracle数据库对应一台主机,可以使用thin连接;如果一个oracle数据库对应四五台主机(集群服务器),使用thin时,需要把tnsnames.ora文件中的相关数据库的整个连接字符串都拷贝下来,如此才能连接上oracle集群数据库。
固定的写法:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn =DriverManager.getConnection ("jdbc:oracle:thin:@192.168.75.14:1521:db1","test" , "test");
2、 使用oci连接(Oracle Call Interface)
优点:使用OCI连接数据库是企业级的做法,适应于单个数据库和集群数据库,性能优越,尤其是连接池功能大大提高了应用程序的性能和并发量。
缺点: 若想使用OCI必须要安装Oracle客户端。
安装完Oracle客户端后,里面有个jdbc的文件夹,该文件夹下就包含了OCI驱动和THIN驱动。所以是不需要去网上下载的。这个驱动在jdbc/lib文件夹下,主要有classes12.jar、nls_charset12.jar等等。其中以12结尾的驱动包适应于jdk1.1以上的版本。以11结尾的适应于jdk1.1以下的版本。文件名中含有classes的jar包就是驱动程序,文件名中含有nls的jar包是与国际化有关的类。
找到文件后,就需要把class和nls的jar包的绝对路径加入CLASS_PATH环境变量,否则会报ClassNotFound的异常。
设置环境变量后,就可以直接使用OCI驱动了,不要被“驱动”两个字吓坏了,(驱动就是一个可执行文件和一个连接字符串)。很简单,无非是连接字符串的问题。标准的连接字符串如下所示:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:oci:@db1","test", "test");
只要这两行,就可以保证连接到数据库,而这个数据库不管是单个数据库还是集群数据库。其中db1就是数据库名,test就是用户名,test就是密码。这种方式和C#中的方式比较类似。
需要注意的问题:
1、oracle_home/jdbc文件夹下有大量的样板代码和帮助文档,里面对如何安装和使用jdbc都有详细的说明,请引起高度重视并耐心阅读。里面有很多知识仅通过自己反复的实践是无法获取的。
2、如果想要高性能,请使用OCI连接,如果不想装Oracle客户端,请使用thin连接。
6.JDBC连接ORACLE的三种URL格式
使用jdbc连接oracle时url有三种格式
格式一: Oracle JDBC Thin using an SID:
jdbc:oracle:thin:@host:port:SID
Example: jdbc:oracle:thin:@localhost:1521:orcl
这种格式是最简单也是用得最多的
你的oracle的sid可以通过一下指令获得:
sqlplus / as sysdba
select value from v$parameter where name = ’instance_name’;
格式二: Oracle JDBC Thin using a ServiceName:
jdbc:oracle:thin:@//host:port/service_name
Example:jdbc:oracle:thin:@//localhost:1521/orcl.city.com
注意这里的格式,@后面有//, port后面:换成了/,这种格式是Oracle 推荐的格式,因为对于集群来说,每个节点的SID 是不一样的,但是SERVICE_NAME 确可以包含所有节点。
你的oracle的service_name可以通过以下方式获得:
sqlplus / as sysdba
select value from v$parameter where name=’service_names’;
原来带/的时候,后面跟的是service_name,当集群的时候,必须使用格式二这种了; 当然,如果你oracle是单例的话,格式一和格式二都是可以的。
SERVICE_NAME和SID的比较:
SID是对内的,是实例级别的一个名字,用来内部之间称呼用。
SERVICE_NAME是对外的,是数据库级别的一个名字,用来告诉外面的人,我数据库叫"SERVICE_NAME"。
格式三:Oracle JDBC Thin using a TNSName:
jdbc:oracle:thin:@TNSName
Example: jdbc:oracle:thin:@TNS_ALIAS_NAME
我在谷歌上找了一些资源,要实现这种连接方式首先要建立tnsnames.ora文件,然后通过System.setProperty指明这个文件路径。再通过上面URL中的@符号指定文件中的要使用到的资源。
这种格式我现在水平几乎没见过,对于我来说用得到这种的情况并不多吧。当然既然是通过配置文件来读取指定资源肯定也可以直接将资源拿出来放在URL中,直接放在URL中的URL模版是下面这样的(tnsnames.ora这个文件中放的就是@符号后面的那一段代码,当然用文件的好处就是可以配置多个,便于管理):
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL= TCP)(HOST=hostA)(PORT= 1522))(ADDRESS=(PROTOCOL=TCP)(HOST=your host)(PORT=1521)))(SOURCE_ROUTE=yes)(CONNECT_DATA=(SERVICE_NAME=your service_name)))
7.oralce不能直接设置主键自增,只有创建序列,创建触发器然后绑定:
-- create trigger create or replace trigger GEN_ID before insert on USERINFO FOR EACH ROW BEGIN select ID_CONTROL.nextval into :new.USER_ID from dual; END GEN_ID; -- create SEQUENCE for user id CREATE SEQUENCE id_control MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER CYCLE;
8.执行sql脚本
@d: estcreate.sql