oracle课堂笔记--第十八天

Oracle NET

1.客户端通过@ora10g的名字去tnsname.ora文件获取服务器的具体连接信息

2.客户端通过tnsname.ora中的描述向服务器发出链接请求服务器端

3.服务器的监听器接收到连接请求后,验证请求的服务的有效性

4.服务器端产生一个服务进程和客户端进程建立连接

查看会话建立过程:

$ netstat -tlnp | grep 1521

$ sqlplus sys/[email protected] as sysdba

$ netstat -tnp | grep sqlplus

$ kill -9 1234 杀死维护sqlplus的进程

监听的配置

配置文件:

$ vi $ORACLE_HOME/network/admin/listener.ora

通过netca添加新的监听服务Listener15210,端口使用15210

$ vi listener.ora

$ netstat -tln|grep 1521

$ lsnrctl status listener15210

通过netmgr配置高级选项

通过lsnrctl命令来启动/停止/查看/重载监听器/服务

lsnrctl start|stop|status|reload|service

指定监听的名称:

$ lsnrctl status listener15210    监听信息

网络环境变化,需要检查listener.ora和/etc/hosts文件

netca删除Listener15210

实例的配置(数据库)

静态注册和动态注册

什么是静态注册

就是监听器的配置文件中写明了监听哪个实例 需要配置SID_DESC字段

定位实例的方式可以使用SID_NAME或者SERVICE_NAME来定位

什么是动态注册

就是监听器的配置文件中没写明监听哪个实例

要通过PMON告知监听器要监听的具体实例

PMON是将SERVER_NAME告诉给监听器 这个过程就是注册

默认一分钟PMON注册一次 也就是说启动监听 还没注册时 是无法连接的

添加3种方式,后面的删掉,用文档改写

区分静态注册和动态注册

lsnrctl status

是 ready 就是动态

是 unknow 就是静态

静态注册listener.ora文件信息:

$ vi listener.ora

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)

(SID_NAME =ora11g)

)

)

$ lsnrctl reload

.....

Services Summary...

Service "ora11g" has 1 instance(s).

Instance "ora11g", status UNKNOWN, has 1 handler(s) for this service...

状态总是显示未知的,当有请求时,监听器才去确认数据是否存在

动态注册

Oracle9i起实例使用动态服务注册来通知监听程序有关其数据库服务的信息。

服务注册依赖PMON 进程向监听程序注册实例信息 注册间隔为1分钟左右

手动注册命令 alter system register;

无需在listener.ora 文件中设置任何信息 此文件可以不存在

3种注册方式:

本地默认端口监听     (监听和数据库在一台主机  不需改配置)1521

本地非默认端口监听   (监听和数据库在一台主机,需改配置,知道端口在哪,端口不是1521)

远程监听       (不在一台主机上)

本地非默认端口:

netca创建listener15210,使用15210端口

$ netstat -tlnp | grep 15210

写入监听的别名:

$ cd $ORACLE_HOME/network/admin

$ vi tnsnames.ora

listener15210 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 15210))

)

修改参数:

SQL> ALTER SYSTEM SET LOCAL_LISTENER=listener15210;

SQL> ALTER SYSTEM register;     立即注册(可选)

服务信息已添加到新的监听中:

$ lsnrctl status listener15210

客户端指定新端口连接:

$ sqlplus sys/[email protected]:1521/orcl as sysdba 报错

$ sqlplus sys/[email protected]:15210/orcl as sysdba

删除配置:

SQL> ALTER SYSTEM SET LOCAL_LISTENER=‘‘;

SQL> ALTER SYSTEM register;

$ vi tnsnames.ora 删除listener15210别名

netca删除15210端口的监听

客户端配置

轻松连接:

$ sqlplus sys/[email protected]:1521/orcl as sysdba

适用于临时性的连接

本地命名:

查看现有的主机连接字符串

$ cd $ORACLE_HOME/network/admin

$ vi tnsnames.ora    解析

$ sqlplus sys/[email protected] as sysdba

使用netca添加新的主机连接字符串orcl192

$ sqlplus sys/[email protected] as sysdba

SQL> select name from v$database;

tnsping测试,不需要用户名和口令:

$ tnsping 192.168.0.1:1521/orcl

$ tnsping orcl192

解析方法的顺序:

$ vi sqlnet.ora

netca可以修改

恢复默认设置:

SQL> alter system set local_listener=‘‘;

SQL> alter sytem register;

netca删除不需要的监听和连接配置

共享服务器模式

专有服务和共享服务模式

专有模式

每个用户进程和服务进程间通过监听器建立连接

进程信息存放于PGA中,也就是说有多少个用户进程就有多少个PGA产生

单单只有进程连接还不足以操作数据库,还需要产生的会话信息

会话信息存储在UGA中,UGA在专有模式中存在于PGA

因为进程和进程间是相互隔离的,所以会话信息也相对独立

这就导致了服务进程只能获知当前用户进程的会话请求信息 只能为当前用户进程服务

共享模式

用户进程的请求被监听器接收,监听器不委派服务器进程,而是将调度器信息返回给客户端

调度器将用户进程的请求放入请求队列

多个服务进程中的一个服务进程从队列中获取用户进程的请求,并处理这个用户进程的请求

服务进程处理完后将处理结果放入响应队列,每个调度器都有自己的响应队列

响应队列的信息反馈给对应的调度器

调度器再把服务进程处理的结果返回给用户进程

共享模式中的用户进程的会话信息对每一个服务器进程来说都是可见的.

因为共享模式的UGA信息存在于SGA中,所以此时一个用户进程的请求可以由多个服务进程来完成.

共享服务器的配置 通过初始化参数dispatchers来配置

可以通过DBCA来修改

$ lsnrctl service

SQL> show parameter disp

SQL> show parameter shared_server

专有模式和共享模式是可以兼容在一起使用的

此时看用户如何选择

tnsnames.ora中

ORA10G =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = dba.up.com)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED) # 不写这个值就是按服务器的模式来匹配

# shared 指定使用共享方式连接

# DEDICATED 指定使用专有模式连接

(SERVICE_NAME = raw10g)

)

)

测试三种模式

ORCL_default =   默认

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 1521))

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

ORCL_dedicated =       管理员

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

ORCL_shared =      共享

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = node1.test.com)(PORT = 1521))

(CONNECT_DATA =

(SERVER = SHARED)

(SERVICE_NAME = orcl)

)

)

测试:

$ sqlplus sys/[email protected]_default as sysdba

$ sqlplus sys/[email protected]_dedicated as sysdba

$ sqlplus sys/[email protected]_shared as sysdba

SQL> select SID, SERVER, PROGRAM from v$session where USERNAME=‘SYS‘;

SQL> select distinct sid from v$mystat;

管理维护、大数据量导入、备份恢复等工作不适合用共享方式:

SQL> shutdown immediate 共享连接下不能发布管理命令

恢复原有设置:

dbca修改为dedicated方式

db link

数据库A访问远程数据库B上面的表:

在数据库A中,使用netca创建主机描述字符串orcl_dblink指向数据库B

$ netca

$ tnsping orcl_dblink

在数据库A中创建数据库链接:

SQL> create database link orcl_dblink_hr connect to hr identified by hr using ‘orcl_dblink‘;

using使用主机描述字符串orcl_dblink

用户和口令都是数据库B上的

db link的名字不要求和主机描述字符串一致

访问数据库B中的表:

SQL> select count(*) from [email protected]_dblink_hr;

SQL> select count(*) from hr.employees, [email protected]_dblink_hr;

时间: 2024-11-07 17:11:34

oracle课堂笔记--第十八天的相关文章

oracle课堂笔记--第二十一天

死锁: session1: SQL> select * from t1; X ---------- 1 2 SQL> update t1 set x=11 where x=1; session2: SQL> update t1 set x=22 where x=2; session1: SQL> update t1 set x=222 where x=2; 阻塞 session2: SQL> update t1 set x=111 where x=1; 死锁 ERROR at

oracle课堂笔记--第十三天

自连接: empid ename mgrid 100 abc 101 def 100 102 xyz 100 emp: mgr: empid ename mgrid empid mgrname 100 abc 100 abc 101 def 100 102 xyz 100 101 def 100 100 abc 102 xyz 100 100 abc select emp.ename, mgr.mgrname from emp, mgr where emp.mgrid=mgr.empid emp

oracle课堂笔记--第十二天

分组函数   ,多行函数 对非空的数据总结 只有在列里才先把空值排除 分组不需要 SQL> select count(*), sum(salary), avg(salary), min(salary), max(salary) from employees; SQL> create table t1(x int); SQL> insert into t1 values (null); SQL> insert into t1 values (1); SQL> commit; S

Oracle课堂笔记

/* *创建表空间(以system的身份) */CREATE TABLESPACE spc_myself--表空间名称(spc_myself)DATAFILE 'E:\datafiles\MYSELF.DBF'--DATAFILE指定表空间的一个或多个数据文件,'数据文件的路径和名称'SIZE 30M--文件大小,M兆的字节大小AUTOEXTEND OFF--禁止数据文件自动扩展 /* *删除表空间 */DROP TABLESPACE spc_myself /* *创建用户 */CREATE U

oracle 课堂笔记

分页查询语句 语法简介  三重嵌套 select * from ( Select emp.*,rownum as rn from (seect * from emp ) where rownum <=9 ) where rn>=7 一.表字段的增删改: 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter table tablename modif

九章算法系列(#2 Binary Search)-课堂笔记

前言 先说一些题外的东西吧.受到春跃大神的影响和启发,推荐了这个算法公开课给我,晚上睡觉前点开一看发现课还有两天要开始,本着要好好系统地学习一下算法,于是就爬起来拉上两个小伙伴组团报名了.今天听了第一节课,说真的很实用,特别是对于我这种算法不扎实,并且又想找工作,提高自己的情况. 那就不多说废话了,以后每周都写个总结吧,就趁着这一个月好好把算法提高一下.具体就从:课堂笔记.leetcode和lintcode相关习题.hdu和poj相关习题三个方面来写吧.希望自己能够坚持下来,给大家分享一些好的东

Oracle 学习笔记 17 -- 异常处理(PL/SQL)

程序在执行过程中出现异常是正常的,在程序的编写过程中出现异常也是不可避免的.但是要有相应的异常处理的机 制,来保证程序的正常执行.PL/SQL程序执行过程中出现的错误,称为异常.一个优秀的程序都应该能够正确处理 各种出错的情况,并尽可能的从错误中恢复.PL/SQL提供了异常处理机制. 概念: 异常处理(exception)是用来处理正常执行过程中未预料的事件,程序块的异常处理定义的错误和自定义的错误, 由于PL/SQL程序块一旦产生异常而没有指出如何处理时,程序就会异常的终止. 有三种类型的错误

2017年5月12号课堂笔记

2017年5月12号 星期五 空气质量:轻度污染(昨天的北风转今天的南风) 内容:html表格的基本使用,表格跨行跨列,高级表格,播放音乐,播放视频,网页布局,iframe内联框架: 文本框,密码框,单选按钮,复选框,下拉框  备注:周日晚想起来补上的周五课堂笔记(一带一路今天开会天气好晴朗) 一.html表格的基本使用 模仿老师代码: <!DOCTYPE html><html><head lang="en"> <meta charset=&q

oracle学习笔记之用户管理-3

用户权限机制 1.不同用户表权限的赋予 grant select on scott.emp to software; ---当前登录用户为表所有者,则表名前不用指定所属用户 2.用software登录后 select * from scott.emp; ---software才有权限查询到scott的emp表 方案(schema) 当用户创建好后,如果该用户创建了一个数据对象(如表),此时dbms会创建一个对应的方案与改用户对应,并且该方案的名称和用户名称一致. system与scott都拥有自