下载与安装和卸载配置.
1.下载:
本人网盘上有一个安装软件,在网吧还没成功过,在我的京东云服务器上,安装成功了。

-
安装与卸载
image.png
出现这种情况还不知原因。
image.png
跑过:下一步
image.png
image.png




注意:我的SCOTT用户设置了scott密码。
卸载:
1--首先停掉windows中所有ORACLE的服务
2--开始--oracle-OrDb12c_home|oralce安装产品| Universal Installer-启动oracle通用安装管理程序.

3--注册表:开始-运行--regedit--搜--HKEY_CLASSES_ROOT,HKEY_LOCAL_MACHINE下所有含oracle和ora的注册表项全部删除.
4.删除系统盘上和安装盘的所有的目录.
启动相关各服务与配置数据库
- 启动相关各服务。
301--启动和停止监听程序。
如果没有监听程序,客户端就不能连接到数据库。
dos中:
image.png
停止:lsnrctl stop
查看状态:lsnrctl status
302--数据库连接的启动和关闭
--一个ORACLE数据库是由一个实例(也称为例程)和一系列的物理文件组成的。一个例程只能访问一个数据库,而一个数据库可以由多个例程同时访问。
--启动数据库包含了一系列的步骤,这些步骤常分为三步:
1.启动数据库到NOMOUNT状态:oracle将启动一系列后台服务进程,分配内存。
2.启动数据库到MOUNT状态:这一步主要用来装载数据库数据,例程获取数据库中内容的信息位置等。但此时数据库仍处于关闭状态。
3.启动数据库到OPEN状态。
仅以连接实例而不连接数据库的方式连接SQLPLUS

连接到数据库系统
如果在安装ORALCE服务器的环境下使用命令提示工具连接ORACLE,将会以ORACLE_SID环境变量指定的数据库实例进行连接,也可以在DOS环境下通过SET ORACLE_SID来改变所连接的OracleSID值,以指定不同的数据库实例.

连到数据库后,用STARTUP来启动数据库,其命令格式如下:
STARTUP [NOMOUNT | MOUNT | OPEN | FORCE ][RESTRICT][PFILE=参数文件名]
该状态下,可以访问那些与SGA相关的数据字典视图,如:V$PARAMETER...

STARTUP MOUNT
STARTUP OPEN:
----启动到OPEN状态后,就可以访问ORALCE数据库所有的数据字典视图,任何具有CREATE SESSION授权的用户都可以连接到ORACLE数据库进行数据库连接.

关闭数据库也有几种状态
SHUTDOWN [NORAL | TRANSACTIONAL | IMMEDIATE | ABORT]
一般用IMMEDIATE,等待所有工作完成,才阻目用户连接.ABORT很不友好,啪一下关了.
2.SQL*Plus工具来演示上述步骤。

303--配置监听程序.
----Oracle是一个网络数据库管理系统,oracle可以是客户-服务的C/S型的结构,也可以是分布式的多层体系结构.一个监听程序是一个服务,对一个端口,系统自配的一个LISTEN监听器端口号是1521.
----在服务器端,是通过一个监听(LISTENER)服务来运行的,这个服务监听某个特定的网络端口,当客户机连接到这个端口时,将管理客户机与服务器这间的通信(可配远程访问数据库).Oracle提供了服务器端监听程序的配置工具,两个.

第一个Oracle Net Configuration Assistant-ONCA
打开--监听程序配置--添加--监听程序名(自定义)

选定的协议:TCP,使用另一个端口号,不要与现有的监听器一样.是否配置另一个监听程序:否.启动监听程序.
第二个工具Net Manager网络管理员,它可以添加监听器,还可配置与修改
下面建一个MyLISTENER监听器,全局数据库名称与SID都为PubLib.端口号1523.
Oracle主目录::G:\app\Administrator\product\12.1.0\dbhome_1
监听程序的配置文件在主目录:%ORACLE_HOME%\NETWORK\ADMIN中.

添加监听器



配置文件listener.ora文件如下
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = G:\app\Administrator\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:G:\app\Administrator\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
)
MYLISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = taishi)(PORT = 1523))
)
ADR_BASE_MYLISTENER = G:\app\Administrator\product\12.1.0\dbhome_1\log
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = G:\app\Administrator\product\12.1.0\dbhome_1\log
SID_LIST_MYLISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = PubLib)
(ORACLE_HOME = G:\app\Administrator\product\12.1.0\dbhome_1)
(SID_NAME = PubLib)
)
)
通过第二个工具创建的监听程序还要另启动.在DOS中.启动了,再到windows的任务管理器-服务中查看是否启动.


配置数据库。
- 创建数据库 DBCA工具(Database Configuration Assistant)
image.png
image.png
“创建模式”中选择“高级配置”,典型配置会留下很多大坑,很不推荐。择单实例数据库,因为我们这里只创建一个能用的简单数据就行,如果想要做RAC集群,那么你还需要部署硬盘,这种情况会另写一片文章介绍选择模板可以选择“定制数据库”或“一般用途或事务处理”,由于定制数据库是不基于模板的,所以创建过程非常缓慢,可能需要好几个小时的时间,而“一般用途或事务处理”是基于Oracle提供的模板创建,创建速度很快,5分钟不到即可完成,而且可配置的选项已经足够了,所以选择“一般用途或事务处理”。
image.png
---全局数据库名字可以随便填,但是SID必须是上面的名字+Sid格式来书写,否则后面会报找不到.ora文件的错误。
---容器数据库”是12c版本新加的一个功能,但是这个功能可能很少有人用,最麻烦的是一旦勾选了这个选项,那么你新建的数据库用户必须以C##开头,特别不方便,所以此处强烈建议不勾选容器数据库,除非你真的有这方面需求。
image.png
配置管理员账户密码,一定要牢记,一会登录要用上
image.png
监听器,选已有且启动的,端口注意要记住。
image.png
---快速恢复区,推荐全部勾选(图中没有勾选),有用快速恢复区之后,使用rman做的完整备份会被放到快速恢复区去,启用归档以后可以使用rman快速创建全库备份。如果此处不填写,那么以后再想启用归档就要把数据库实例停止之后再设置归档,而且会导致归档不完整,所以推荐建立实例的时候就开启归档。另外点击“编辑归档模式参数”按钮之后可以选择归档文件的保存地点,建议选择一个和快速恢复区、表空间不同的硬盘来存储,提高安全性。
---注意快速恢复区还有一个大小限制,尽量设置的大一点并且定期清理快速恢复区的备份,否则快速恢复区满了之后会卡死数据库的。点击Edit archive mode parameters还可以配置归档日志的参数
image.png
一定要选择UTF-8,下面的默认语言一定要选择“英语(美国)”,否则在使用命令行和SQLPULS的时候,中文字符很容易变成????,同样的问题还会出现在你应用的日志上,还是使用英文远离乱码的困扰好。
image.png
创建选项推荐勾选另存为数据库模板,这样可以很快的创建一模一样的数据库,为其他的测试环境创造便利。点击定制存储位置可以看到这个实例所创建的表空间的位置
---注意这一步特别的关健,直接关系到你的数据库存放的位置,一般来说我们都会专门挂一个硬盘存放表空间和备份文件,所以这里一般是要手动修改表空间和控制文件的存放位置的,一定不要改错。同时,如果做集群,更需要注意这个存放位置一定要放到共享磁盘上去
image.png
数据库表空间会默认帮我们建立几个,我们也可在这用图形化的界面再创建几个,并且指定默认表空间,非常方便
image.png
接下来是创建数据库过程,完成后,弹出一个参数窗口,注意这里有很多重要信息
image.png
windowns服务中可以看到刚创建的数据库的相关服务
image.png
企业管理器 EM Database Express URL:https://jdxiong:5500/em是针对本库的管理器,可以远程访问:远程的话:要输入https://IP或域名:5500/em,所有登陆账号的密码:xiong.本人以sys账号登陆的。

2. 连接数据库。
所有的相关服务(监听器,数据库与SID服务)启动后,可以连接数据库了。
21.--服务器端--即安装ORALCE服务软件的机子端。
《1》。SQLPLUS工具
本实验连接,是在京东云主机上安装了服务器,再在远程https://xiongshaowen.club:5500/em 进入企业管理器(账号sys 密xiong)后,添加了root 用户,密码为:xiong ,角色:DBA.

22.---客户端连接数据库。
《1》,安装客户端软件,安装管理员。软件本人云盘上有。


《2》服务器端设置远程客户端访问设置。
1--因为客户端连接时要用到scott用户,密码还要为tiger.不过配好服务名后,可以修改连接用户。而刚刚安装的服务器端的服务软件scott用户是锁定的,还密码不为tiger.

2--客户端启动 Net manager工具。

TCP/IP---主机名:远程主机ip或域名,端口号与远程服务器端的全局数据库一致。
3--最后,如果测试连接成功,点‘文件’-‘保存网络配置’
4--启动SQLPLUS工具或DOS或SQL DEVELOPER连接到远程数据库sshweb,建议用DOS因为错三次后DOS不会关闭,连接用户为scott(123步中默认的)

或:

又或:

测试一个查询:

客户端软件的。G:\app\client\Administrator\product\12.1.0\client_1\network\admin\tnsnames.ora配置服务名的文件代码如下。
# tnsnames.ora Network Configuration File: G:\app\client\Administrator\product\12.1.0\client_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
SSHWEBE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xiongshaowen.club)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sshwebe)
)
)
另一种配置客户端连接方法::::::::可以从官网下载下载Instant Client(轻量级的客户端)三个包(instantclient-sqlplus-nt-12.1.0.2.0.zip,instantclient-odbc-nt-12.1.0.2.0.zip,instantclient-basic-nt-12.1.0.2.0.zip)放在同一个文件夹下,作为本地Oracle客户端环境 。这样很方便,不用像上面那样安装,直解压,放在一个盘的根下如:G:\oracle\instantclient_12_1
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
1.--本人下载了instantclient_12_1,解压后,找到G:\oracle\instantclient_12_1\network\admin,再创建如图片中的一个文件。


2.--打开tnsnames.ora加入如下代码:HOST:服务端主机,PORT服务端监听端口-该端口让服务器的数据库与外界交互提供通道。SERVICE_NAME:一般写数据库名。
SSHWEBE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xiongshaowen.club)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME = sshwebe)
)
)
3.--配置环境变量:



4.-- 下载连接工具pl/sql developer,
因为配置工具只有80多m大小,而上面的工具有800多m所以该配置软件没有连接服务器工具,另下载。
--本人网盘中有:

打开工具,点取消,会自动进入下图界面。

注意:如果设置了环境变理,这里不要搞。
5.--连接。
1.解压的文件中有sqlplus.exe执行程序,所以可以以DOS形式打开。
2.PL/SQL视图工具。

3.测试:

应用
java
spring+hibernate
- maven工程中,导包 (工程 sshwebtest--百度网盘 2021年javaANDweb中可运行的工程中有该工程)
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.0.1-atlassian-hosted</version>
</dependency>
-
jdbc.properties加如下代码:用的数据库名为sshwebe.
image.png -
spring.xml中把相应的值换了
image.png -
hibernate.cfg.xml中的数据库方言换了:
image.png

-
mapping映射文件中的主键自增长策略换了:
image.png
这里有个注意项,resource是oracle里的保留关键字,不能用来做表的字段名,所有在这
里加个s:
image.png
就这么简单到变态,其他什么都不用更改,更换底层使用的数据库就完成了!hibernate比mysql转换各种数据库方便多了。 - 测试:http://localhost:8080/sshwebtest/login
各表自动建成。mybatis要自已建表。
login由控制类的方法映射到网页login.jsp不用我们输入login.jsp。具体代码见‘sshwebtest'工程。
mybatis中应用
- mybatis+没有spring中的应用(项目 mybatisdemo)
1--总图-看文件结构,pom.xml导oracle库驱动包与上面的hibernate应用一样。
image.png
2--在全局配置文件中配置数据库厂商标记
image.png
3--在mapper映射文件里,为每条sql语句标注属于哪个数据产品的:
image.png
如果将这个工作,放在经完成的大项目上修改,工作量就有点大了,所以我前面说mybatis灵活,但它是半自动ORM框架,所以跨数据库上麻烦一些!
4--在全局配置文件中为每个数据库配置一个环境:
想运行那个数据库就用 <environments default="oracle">设置默认值。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC
"-//mybatis.org//DTD config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"></properties>
<settings>
<!--是否开启自动驼峰命名规则( camel c
ase )映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn的类似映射。
即模型类的字段如regDate与表中的字段reg_date自动识别,不用修改字段一样的 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<environments default="oracle">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.jdbcUrl}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="oracle">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${orcl.driverClass}"/>
<property name="url" value="${orcl.jdbcUrl}"/>
<property name="username" value="${orcl.user}"/>
<property name="password" value="${orcl.password}"/>
</dataSource>
</environment>
</environments>
<!-- ORACLE数据库要配的厂商标志,value给标志起别名-->
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<!-- <property name="SQL Server" value="sqlserver"/> -->
</databaseIdProvider>
<mappers>
<mapper resource="cn/ybzy/mybatisdemo/model/UserMapper.xml"/>
</mappers>
</configuration>
5.在oracle中创建表(这个要手工创建,不会自动建表)
create table t_students (
id int ,
username varchar(50) ,
password varchar(100) ,
state int ,
reg_date date
);
insert into sb_users (id, username, password, state, reg_date)values('2','admin2','172eee54aa664e9dd0536b063796e54e','1',to_date('2014-02-14','yyyy-mm-dd'));
insert into sb_users (id, username, password, state, reg_date)values('3','mmm','5c79b8413fe81742a4147c9373771394','1',to_date('2018-08-05','yyyy-mm-dd'));
insert into sb_users (id, username, password, state, reg_date)values('4','ttt','882eebb5c59d44a3b85c4adbe54d1ee','1',to_date('2018-08-05','yyyy-mm-dd'));
6.测试类中测试:(已导入junit jar包) Run as ---junit test
public class mybatistest {
@Test
public void test1() throws IOException {
//1.获取到创建数据库链接的会话的工厂类
InputStream inputStream = Resources.getResourceAsStream("mybatisConfig.xml");
SqlSessionFactory sqlSessionFactory =(SqlSessionFactory) new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂类,获取数据库连接的会话。
SqlSession session = sqlSessionFactory.openSession();
//通过会话操作数据库。
try {
UserMapper mapper = session.getMapper(UserMapper.class);
System.out.println(mapper);
User user =mapper.getOneUserById(1);
System.out.println(user);
}finally {
session.close();
}
}
}
若成功,控制台打印:一条记录。
ORACLE中底层不支持字段自增长处理
(如mysql的id自增长)
-
ORACLE实现自增长原理。
---前面我们用hibernate做的sshweb项目切换oracle数据库的时候,主键id自增是通过配置序列来实现的:
image.png
---看看,这个配置本质上是怎么回事呢?本质是orcale为对应的表先添加一个序列列,这个序列列里的序列号是可以自增的:
create sequence users_seq
minvalue 1 //初始序号为1
maxvalue //不设最大序号,用默认就不写,这里也可以设置
start with 1 //从1开始计算
increment by 1 //每次增1
NOCYCLE //直累加,不循环
cache 20 //缓存20
然后我们发起insert的sql语句的时候,在执行insert之前,我们先通过userid_seq.nextval(序列中的下一个数值),然后把这个值作为用户id插入数据库 ,这个序列值有个特性userid_seq.nextval拿一次,它递增一次,从而实现id值的自增长。

如上图所示,我们可以插入记录的时候,用users_seq.nextval代替id值。
insert into sb_users (id, username, password, state, reg_date)values(users_seq.nextval,'admin2','172eee54aa664e9dd0536b063796e54e','1',to_date('2014-02-14','yyyy-mm-dd'));
- mybatis中如何获取自增ID的值。
--同mysql中一样,自增ID后,ID值并不规律,所以要特别处理。
利用上面在ORACLE中创建的序列users_seq.
1--映射文件中UserMapper.xml
<insert id="insertUser" databaseId="oracle">
<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
select users_seq.nextval from dual
</selectKey>
insert into sb_users (id,username,password,state,reg_date)
values
(#{id},#{username},#{password},#{state},#{regDate})
</insert>
---order="BEFORE"表示获取users_seq.nextval from dual中nextval值放在插入语句之前执行,保证#{id}先有值,再插入。
2--核心配置文件mybatisConfig.xml中,开启执行oralce访问。
<environments default="oracle">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.jdbcUrl}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="oracle">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${orcl.driverClass}"/>
<property name="url" value="${orcl.jdbcUrl}"/>
<property name="username" value="${orcl.user}"/>
<property name="password" value="${orcl.password}"/>
</dataSource>
</environment>
</environments>
mybatistest.java 测试 控制台显示ID的值。
public class mybatistest {
@Test
public void test1() throws IOException {
//1.获取到创建数据库链接的会话的工厂类
InputStream inputStream = Resources.getResourceAsStream("mybatisConfig.xml");
SqlSessionFactory sqlSessionFactory =(SqlSessionFactory) new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂类,获取数据库连接的会话。
SqlSession session = sqlSessionFactory.openSession();
//通过会话操作数据库。
try {
UserMapper mapper = session.getMapper(UserMapper.class);
//增加记录
User user = new User("xlz","123456",1,new Date());
mapper.insertUser(user);
System.out.println(user.getId()); //user.getId获取刚插入记录的ID值。
session.commit();
}finally {
session.close();
}
}
}

























