oracle 12C

下载与安装和卸载配置.

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


image.png
  1. 安装与卸载


    image.png

    出现这种情况还不知原因。


    image.png

    跑过:下一步
    image.png

    image.png

image.png

image.png

image.png

image.png

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

3--注册表:开始-运行--regedit--搜--HKEY_CLASSES_ROOT,HKEY_LOCAL_MACHINE下所有含oracle和ora的注册表项全部删除.
4.删除系统盘上和安装盘的所有的目录.

启动相关各服务与配置数据库

  1. 启动相关各服务。
    301--启动和停止监听程序。
    如果没有监听程序,客户端就不能连接到数据库。
    dos中:
    image.png

    停止:lsnrctl stop
    查看状态:lsnrctl status

302--数据库连接的启动和关闭
--一个ORACLE数据库是由一个实例(也称为例程)和一系列的物理文件组成的。一个例程只能访问一个数据库,而一个数据库可以由多个例程同时访问。
--启动数据库包含了一系列的步骤,这些步骤常分为三步:
1.启动数据库到NOMOUNT状态:oracle将启动一系列后台服务进程,分配内存。
2.启动数据库到MOUNT状态:这一步主要用来装载数据库数据,例程获取数据库中内容的信息位置等。但此时数据库仍处于关闭状态。
3.启动数据库到OPEN状态。
仅以连接实例而不连接数据库的方式连接SQLPLUS

image.png

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

image.png

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

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

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

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

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

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

添加监听器
image.png

image.png

image.png

配置文件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的任务管理器-服务中查看是否启动.


image.png

image.png

配置数据库。

  1. 创建数据库 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账号登陆的。

image.png

2. 连接数据库。

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

image.png

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

image.png

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

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

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

或:
image.png

又或:
image.png

测试一个查询:
image.png

客户端软件的。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,再创建如图片中的一个文件。

image.png

image.png

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.--配置环境变量:


image.png

image.png

image.png

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


image.png

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


image.png

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

image.png

3.测试:
image.png

应用

java

spring+hibernate

  1. maven工程中,导包 (工程 sshwebtest--百度网盘 2021年javaANDweb中可运行的工程中有该工程)
<dependency>
  <groupId>com.oracle</groupId>
  <artifactId>ojdbc6</artifactId>
  <version>12.1.0.1-atlassian-hosted</version>
</dependency>
  1. jdbc.properties加如下代码:用的数据库名为sshwebe.


    image.png
  2. spring.xml中把相应的值换了


    image.png
  3. hibernate.cfg.xml中的数据库方言换了:


    image.png
image.png
  1. mapping映射文件中的主键自增长策略换了:


    image.png

    这里有个注意项,resource是oracle里的保留关键字,不能用来做表的字段名,所有在这
    里加个s:


    image.png

    就这么简单到变态,其他什么都不用更改,更换底层使用的数据库就完成了!hibernate比mysql转换各种数据库方便多了。
  2. 测试:http://localhost:8080/sshwebtest/login
    各表自动建成。mybatis要自已建表。
    login由控制类的方法映射到网页login.jsp不用我们输入login.jsp。具体代码见‘sshwebtest'工程。

mybatis中应用

  1. mybatis+没有spring中的应用(项目 mybatisdemo)
    1--总图-看文件结构,pom.xml导oracle库驱动包与上面的hibernate应用一样。
    image.png

    2--在全局配置文件中配置数据库厂商标记
    image.png

    3--在mapper映射文件里,为每条sql语句标注属于哪个数据产品的:
    image.png

    如果将这个工作,放在经完成的大项目上修改,工作量就有点大了,所以我前面说mybatis灵活,但它是半自动ORM框架,所以跨数据库上麻烦一些!
    4--在全局配置文件中为每个数据库配置一个环境:
    想运行那个数据库就用 <environments default="oracle">设置默认值。
image.png
<?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自增长)

  1. 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值的自增长。


image.png

如上图所示,我们可以插入记录的时候,用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'));

  1. 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();
        }
    }
    
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容