环境:
oracle安装文件:
链接:https://pan.baidu.com/s/1jrD2Mg3gMPZp_btI-GtMXg
提取码:hnpt
安装包如下,大小为2.98G:
将它解压到c盘:
双击setup.exe进行安装:
点击安装,下面等的时间要长,大概半小时:
看到上图说明安装成功了,点击关闭即可!
验证安装是否成功:
安装完毕后,打开命令行:
sqlplus /nolog
也可以登录web页面:https://localhost:5500/em/login
还可以查看下window服务:
此时,我们先来检查下listener.ora和tnsnames.ora的内容(这两个文件的位置可以从上面tnsping命令中看出来):
listener.ora:
tnsnames.ora:
由于使用sys用户,所以需要在高级里设置以sysdba身份登录:
然后测试链接:
链接后如下:
找到对应位置的listener.ora和tnsnames.ora文件,在里面添加针对静态ip的监听和服务(实验的静态ip是:192.168.3.39):
换一个计算机(不用安装oracle客户端),使用navicat进行连接,如下:
navicate:
虽然navicat可以在不安装Oracle客户端的情况下连接到oracle服务器,但这不代表pl/sql developer也可以。。。
下载oracle客户端:
地址:https://www.oracle.com/database/technologies/instant-client/downloads.html
下载后如下:
将它解压到d盘即可:
然后,从oracle服务器拷贝tnsnames.ora文件到这个目录,如下:
然后,打开pl/sql developer,配置目录和oci.dll路径:
配置完成后重启pl/sql developer,输入连接信息如下:
点击确定后:
看到这里,说明已经连接成功了。
新建.net 45控制台程序,安装Oracle.ManagedDataAccess
包(如果是.netcore程序安装:Oracle.ManagedDataAccess.Core
):
编写代码如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.ManagedDataAccess.Client;
namespace OracleConnect
{
class Program
{
static void Main(string[] args)
{
var oracleConnection = new OracleConnection("Data Source=192.168.3.39/ORCL;Password=123456;User ID=sys;DBA Privilege=SYSDBA;");
oracleConnection.Open();
var cmd= new OracleCommand("select * from user_users", oracleConnection);
var adapter = new OracleDataAdapter(cmd);
var ds = new DataSet();
adapter.Fill(ds);
Console.WriteLine($"ds.Tables.Count={ds.Tables.Count},currentUserName={ds.Tables[0].Rows[0]["username"].ToString()}");
oracleConnection.Close();
Console.WriteLine("ok");
}
}
}
在oracle12c之前,数据库和实例是1对多的关系。一般我们开发环境默认安装的话就是一个数据库对应一个实例(多个实例对应一个数据库的情况是RAC),开发的时候就使用表空间区分不同的项目(不同的表空间对应不同的账号),备份还原也是针对的表空间。这一点和sqlserver差别比较大。
看下面的两张图是对oracle和sqlserver的对比:
sqlserver:
oracle:
不过在oracle12c版本中,oracle引入了CDB和PDB的概念,关于这两者的详细介绍可参考:《Oracle 中的12C新特性-容器数据库》,它里面有一段话说的挺好的:
其实大家如果对SQL SERVER比较熟悉的话,这种CDB与PDB是不是感觉和SQL SERVER的单实例多数据库架构是一回事呢。像PDB$SEED可以看成是master、msdb等系统数据库,PDBS可以看成用户创建的数据库。而可插拔的概念与SQL SERVER中的用户数据库的分离、附加其实就是那么一回事。
所以说,在oracle12c以后,Oracle中的单实例也可以对应多个数据库了,需要我们在安装的时候选择“创建为容器数据库”(默认一勾选)。
不过对于开发来说,我们大可不必关心这个概念,仍然通过用户名和表空间区分不同的项目还是挺不错的。。。
注:我实验的时候是在服务器上本地连接到oracle服务器的
首先,找到Oracle数据文件的目录,如下:
执行下面语句:
create tablespace data_test datafile 'C:\app\Administrator\oradata\ORCL\data_test1.dbf' size 50M;
这样一个表空间就创建成功了,可以观察下创建好的文件:
执行下面的语句:
create user test1 identified by 123456 default tablespace data_test;