Oracle监听详解

news2024/11/29 4:47:23

本文摘自《ORACLE数据库技术实用详解》和《成功之路:ORACLE 11g学习笔记》

配置网络环境

本文将介绍和Oracle相关的网络问题,Oracle网络建立在操作系统之上。配置操作系统网络是配置Oracle网络的第一步。在配置Oracle网络之前,我们需要确保操作系统的网络配置无误。

在Oracle数据库中,网络环境属于基础架构的配置,如果没有建立网络环境,则整个数据库无法被用户在客户端所使用。

Oracle的网络涉及两个方面,一个方面是Oracle的数据库服务器端;另外一个方面是Oracle的客户端。Oracle网络配置的路线图如下所示。
在这里插入图片描述
我们必须按照上面的步骤配置Oracle网络,只有在服务器端(监听器)配置成功的前提下,我们才可配置客户端。

为了更好地配置Oracle网络,Oracle公司提供了下面的工具,用于配置和诊断Oracle网络。[

  • 网络配置助手(OracleNet Configuration Assistant)是一款图形化的网络管理工具,利用它可以完成Oracle网络的配置,包括监听器的配置、命名方法的配置、网络服务名等的配置。
  • 网络管理器(Oracle Net Manager)也是一个图形化的网络管理工具,用于配置Oracle网络。
  • 监听器控件(Listener Control Utility)是一个命令行工具,用来管理监听器,包括监听器的启动、关闭,以及查看监听器的状态等。
  • 连接管理器控件(Oracle Connection Manager Control Utility)用来管理连接管理器。

1 用户与Oracle数据库服务器建立连接

任何一个用户要想使用Oracle数据库,首先要与数据库建立连接。为此,Oracle使用了 网络服务(Net Service) 的概念,从而能够从客户端或者中间层的应用服务器与数据库服务器建立连接,并且能够在客户端与数据库服务器端之间传递数据。

在客户端,网络服务作为后台运行的进程。在数据库服务器端,网络服务则通过名为监听器的进程来体现。 我们还可以通过配置网络服务,使得Oracle数据库能够与异构的数据库(比如IBM公司的DB2或微软公司的SQL Server等)进行通信。

在Oracle中,最常见的连接方式为专用连接方式。在这种方式下,服务器进程与用户进程为一一对应的关系。一旦用户进程中断,其对应的服务器进程也被终止。

我们先来看看什么是监听器

在Oracle数据库服务器中,通过一个叫“监听器”的组件接收来自客户端的连接请求。它是客户端和服务器端的中间组件。监听器(LISTENER)是位于服务器端的、独立运行的一个后台进程,它运行在服务器端,但是独立于数据库服务器单独运行,也就是说,当数据库没有启动的时候,监听器也能独立运行。它负责对客户端传入的连接请求进行监听,并且对服务器端的连接负荷进行调整。当客户端试图建立一个到服务器端的连接时,监听器接收到客户端的请求,然后再将它交给服务器进行处理,一旦客户端和服务器建立连接,客户端和服务器以后就直接进行通信,而不再需要监听器的参与(也就是监听器将处于空闲状态)。

下图显示了从客户端建立到数据库服务器端连接的过程,以及监听器在整个过程中所起到的作用。在这个过程中,我们使用了最常见的本地命名方法。
在这里插入图片描述
从图中,我们可以看到,建立连接的过程大致可以分为以下5个阶段。
1)客户端发起连接:通过在客户端提供连接用户名、用户密码、以及连接字符串等信息,从而建立与监听器的连接。连接字符串位于客户端的文件里,该文件默认为 $ORACLE_HOME/network/admin/tnsnames.ora。 连接字符串里就记录了监听器在哪台服务器上、采用哪种协议、在哪个端口进行监听、请求的是数据库服务名是什么等信息。

2)客户端一旦与监听器建立了连接,则在客户端生成用户进程。同时,监听器会判断,客户端所请求的数据库服务名是否为当前该监听器所管理的服务名。如果客户端传来的连接字符串里不包含服务名,则监听器产生没有服务名的错误信息;如果请求的服务名不是当前监听器所管理的,则报错并中断连接;如果请求的服务名是当前监听器所管理的,则监听器会在该服务名所在的数据库服务器上创建服务器进程

3)监听器在创建服务器进程以后,会将用户进程与服务器进程建立连接。之后,监听器退出与客户端的连接。

4)服务器进程根据用户进程提供的用户名和密码到数据字典里判断是否匹配

5)如果用户名密码不匹配,则报错;如果匹配,则分配PGA,并生成session

注意:监听器的职能只是负责建立客户端和服务器端的连接,它并不负责客户端和服务器端的直接通信。

例如,我们在客户端使用SQL*Plus登录数据库服务器以后,发出一条命令,这条命令被直接发送给数据库服务器(不通过监听器),数据库服务器处理完这条命令以后,直接把命令的执行结果返回给客户端(也不通过监听器)。

2 配置监听器

配置监听器有两种方法:
1)通过图形界面工具Net Manager
2)直接使用文本编辑器编辑监听器配置文件listener.ora
其实,Net Manager最终改变的也是监听器配置文件listener.ora的内容。以上两种方法有着异曲同工之处。

监听器启动时,需要参照监听器配置文件:$ORACLE_HOME/network/admin/listener.ora,这个文件即为“监听器配置文件”。该文件是个文本文件,可以手工编辑,也可以使用图形界面进行配置。
可通过如下命令启动一个叫做网络配置助手的图形界面工具:

 $ netca

一个典型的listener.ora文件的内容如下图所示,其中包含了对各字段的说明:
在这里插入图片描述

  • LISTENER:监听器的名字,也可以使用别的名字。
  • ORACLE_HOME:Oracle的主目录。
  • SID_NAME:监听器监听的数据库的实例名。本例中的实例是extproc。
  • PROTOCOL:监听器监听的协议。本例中使用的是TCP/IP。
  • HOST指定数据库服务器的主机名或者IP地址。本例中数据库服务器的主机名是book.us.oracle.com。
  • PORT指定监听器使用的端口号,默认的端口号是1521。

在了解了listener.ora文件以后,我们就可以手工添加新的监听器。也就是说,同一台服务器上,可以存在多个监听器。只不过要注意的是,每个监听器必须在不同的端口上进行监听。而且这些监听器都是通过同一个listener.ora文件进行配置的。

下面,我们添加一个名为my_listener的监听器:

    my_listener =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = book.us.Oracle.com)(PORT = 1525))
        )
      )

只要我们把这段内容添加到listener.ora文件里即可创建一个新的、名为my_listener的监听器。

前面我们讲到过,监听器在接收到客户端发来的连接请求时,会判断客户端所请求的服务名是否为该监听器所管理的服务名。那么在listener.ora文件里,我们并没有看到有关服务名的任何配置,这又是为什么呢?

在这里,我们先来了解服务名是什么。可以把服务理解为一组相似任务的逻辑组合。比如,对于一个典型的销售企业的业务系统来说,可以大致分为销售、采购、财务和人事这四大业务部门。那么从数据库的角度来说,就可以划分成对应的四个服务名:sales(销售)、pur(采购)、fin(财务)和hr(人事)。处理销售相关业务的人员全都连接到sales服务上进行操作,而处理采购业务的人员则全都连接到pur服务上进行操作,依此类推。通过这种方式,我们就对数据库的活动分了组,从而可以更好地进行跟踪和调优的工作。

那么服务是如何体现在监听器里的呢?Oracle通过将服务注册到监听器里来实现,有以下两种注册服务的方式。

2.1 动态注册

所谓动态注册,就是通过数据库实例里的PMON进程,将当前实例里的服务名注册到同一台服务器上的、默认的、并在1521端口上监听的监听器(也就是名为LISTENER的监听器)里。

而当前实例里的服务名由初始化参数:service_names决定。该参数默认为数据库名:

    SQL> show parameter service_names
    NAME                       TYPE           VALUE
    ---------------------  -----------    ---------------
    service_names              string         ora10g

该参数可以动态修改,并且可以指定多个值,也就是多个服务名,每个服务名之间用逗号隔开,如下所示:

    SQL> alter system set service_names='ora10g,sales,pur,fin,hr';

这样,我们只需要等一段时间,PMON进程就会将这些服务名都注册到默认的监听器里去。

我们也可以不等待PMON进程自动注册服务名,而是执行下面的命令,从而立即将这些服务名进行注册:

    SQL> alter system register;

如果需要将服务名动态注册到非默认的监听器上,比如我们希望注册到刚才新建立的名为my_listener的监听器上,是否可行呢?

答案是肯定的,只是配置上面要稍微复杂一些。我们还需要设置数据库实例的另一个初始化参数:local_listener。该参数说明了要动态注册的监听器的信息,如下所示:

    SQL> alter system set local_listener='(ADDRESS_LIST =(ADDRESS = (PROTOCOL=TCP)(HOST=book.us.Oracle.com)(PORT=1525)))';

注意这里的local_listener参数值的写法,实际上就是把my_listener配置信息中description部分原封不动地复制过来即可。

2.2 静态注册

静态注册是相对于动态注册而言的。也就是说,将有关数据库服务名的信息手工写入了listener.ora文件里。其静态注册的服务名由SID_LIST_<监听器名称>部分指定,比如我们为默认监听器静态注册一个服务名,如下图1所示。
在这里插入图片描述
我们在sid_list_listener部分添加一段sid_desc部分(上图中的阴影部分),即可为默认监听器静态注册一个新的服务名。其中,global_dbname表示对外公布的服务名,也就是用户连接数据库时所使用的名称。该服务名可以为任何名称;ORACLE_HOME表示Oracle软件的主目录;而SID_NAME则说明服务名所对应的数据库的实例名。也就是说,当用户连接到名为static_srv的服务名时,实际上是连入了名为ora10g的数据库实例里。我们可以添加多个sid_desc部分,从而为数据库定义多个服务名。

3 管理监听器

创建并配置了listener.ora文件以后,我们就可以对监听器进行管理。Oracle提供了命令行的工具lsnrctl对监听器进行管理。

3.1 监听器的启动

监听器的启动有两种方式。

1)在命令行直接启动监听器

登录操作系统(OS)

# su – oracle

启动监听器

$ lsnrctl start

如果执行lsnrctl start命令(没有指定监听器的名称),则该命令将启动默认的监听器。默认监听器的名字是LISTENER。

从启动过程我们还可以看出有关监听器的配置信息,这些信息包括监听器所在的主机(HOST)、监听器监听的端口(Port)、支持的协议等信息。

2)打开监听器管理控件后再启动监听器

登录操作系统(OS)

# su – oracle

登录监听器控件

    [oracle@book ~]$ lsnrctl
    LSNRCTL>

进入lsnrctl交互界面以后,我们可以输入help命令显示所有lsnrctl工具所支持的命令:

    LSNRCTL> help
    The following operations are available
    An asterisk () denotes a modifier or extended command:
    start             stop              status
    services          version           reload
    save_config       trace             spawn
    change_password   quit              exit
    set*               show*

启动监听器控件

    LSNRCTL> start

该命令表示启动默认的监听器,也就是启动名为LISTENER的监听器。我们也可以在后面跟上具体的监听器的名称,从而启动非默认的监听器。如下所示:

    LSNRCTL> start my_listener

3.2 监听器的关闭

关闭监听器也有两种方式。

1)在命令行直接关闭监听器

登录操作系统(OS)

# su – oracle

关闭监听器

$ lsnrctl stop

如果执行lsnrctl stop命令(没有指定监听器的名称),则该命令将启动默认的监听器。默认监听器的名字是LISTENER。

2)登录监听器管理控件后再关闭监听器

登录操作系统(OS)

# su – oracle

登录监听器控件

    [oracle@book ~]$ lsnrctl
    LSNRCTL>

关闭监听器

    LSNRCTL> stop

该命令表示停止默认的监听器,也就是停止名为LISTENER的监听器。我们也可以在后面跟上具体的监听器的名称,从而停止非默认的监听器。如下所示:

    LSNRCTL> stop my_listener

3.3 查看监听器的状态

查看监听器状态也有两种方式。

1)在命令行直接查看监听器状态

登录操作系统(OS)

# su – oracle

查看监听器状态

$ lsnrctl status

如果执行lsnrctl status命令(没有指定监听器的名称),则该命令将启动默认的监听器。默认监听器的名字是LISTENER。

2)登录监听器管理控件后再查看监听器状态

登录操作系统(OS)

# su – oracle

登录监听器控件

    [oracle@book ~]$ lsnrctl
    LSNRCTL>

查看默认监听器当前的启动状态:

    LSNRCTL> status
    ……
    Service "fin" has 1 instance(s).
      Instance "ora10g", status READY, has 1 handler(s) for this service...
    Service "hr" has 1 instance(s).
    Instance "ora10g", status READY, has 1 handler(s) for this service...
    ……
    Service "static_srv" has 1 instance(s).
      Instance "ora10g", status UNKNOWN, has 1 handler(s) for this service...

命令Status将会列出下面有关监听器的信息:

  • 监听器的名称,监听器的版本号、监听器的启动时间、运行时间、跟踪级别、监听器配置文件listener.ora的位置等。
  • 监听器的地址信息,包括主机名、端口号等。
  • 监听器的实例的状态信息,实例有下面几种状态:
    1)READY表示实例可以接受连接
    2)BLOCKED表示实例不能接受连接
    3)READY/SECONDARY表示这是群集(Real Application Cluster)的第二个实例,准备接受连接。
    4)UNKNOWN表示监听器是静态注册的(Registered Statically)

上例中我们可以看到所显示的Service部分,其中的fin、hr等就是数据库实例中service_names参数所指定的服务名。同时,我们应该注意到,fin、hr等服务名所指定的Instance部分的status字段为READY,而static_srv的status字段为UNKNOWN。这是因为,fin、hr等是由PMON进程动态注册到监听器的,因此PMON进程所在的数据库一定处于打开状态,所以说这些服务名所对应的实例已经准备(READY)好接受用户的连接请求了。而static_srv则是通过编辑listener.ora文件而静态注册的服务名,监听器并不确定该服务名所对应的实例是否已经打开了,因此其状态为未知(UNKNOWN)。

我们可以在status命令后面写上非默认的监听器名,比如查看my_listener的状态:

    LSNRCTL> status my_listener

我们还可以不进入lsnrctl的交互式界面,而是在操作系统提示符下,执行lsnrctl命令:

    [Oracle@book ~]$ lsnrctl start my_listener   --启动监听器my_listener
    [Oracle@book ~]$ lsnrctl stop my_listener    --关闭监听器my_listener
    [Oracle@book ~]$ lsnrctl status my_listener  --查看监听器my_listener的状态

4 配置客户端

配置客户端网络时,必须确保客户端的配置信息(如IP地址或者主机名、实例名、协议、端口号)和服务器端的配置信息相同。

在客户端,使用Oracle的网络服务连接监听器时,我们一般采用两种方式:简单连接本地命名

4.1 简单连接(使用“连接字符串”登录远程数据库)

进行简单连接时,在客户端不需要进行任何的配置。连接方式如下所示:

    SQL> connect hr/hr@book.us.oracle.com:1521/ora10g

其中,hr/hr为要连入的用户名和密码;book.us.oracle.com表示数据库实例所在的主机名称;1521表示端口号;ora10g表示要连入的数据库实例名。

如果发现简单连接失败,则应该检查$ORACLE_HOME/network/admin/sqlnet.ora文件。该文件中应该有如下的内容:

    NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

也就是说,如果sqlnet.ora文件中的names.directory_path部分不写ezconnect的话,则不能使用简单连接。

注 意: ezconnect的意思就是easy connect,表示简单连接。

简单连接尽管简单,但不支持连接的高级特性。比如连接时的负载均衡(load balance)以及连接时的故障转移(failover)等。

4.2 本地命名(使用“网络服务名”登录远程数据库)

另外一种我们更加常用的连接方式为本地命名方式。

在该方式下,我们需要配置一个本地命名解析文件。该文件默认为 $ORACLE_HOME/network/admin/tnsnames.ora。该文件位于客户端,可以使用netca的图形界面来帮助配置该文件。

文件内容以及各个字段的解释说明如下图所示:
在这里插入图片描述

Oracle的网络是基于操作系统的网络配置,在配置Oracle网络之前,我们必须安装和配置好操作系统(OS)的网络。TCP/IP是应用最广泛的通信协议,通常我们选择TCP/IP。

Oracle支持的协议有:

  • TCP/IP
  • TCP/IP with SSL(TCPS)
  • Named Pipes(NMP)
  • SDP
  • IPC

配置了tnsnames.ora文件以后,我们就可以使用本地连接,如下所示:

    SQL> connect hr/hr@sales

可以看到,在了解了tnsnames.ora文件的内容以后,我们可以手工添加新的连接字符串。

比如,我们添加一个连接字符串,使其连到默认监听器里静态注册的服务名。如下所示:

    newname =
      (DESCRIPTION =
        (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = book.us.Oracle.com)(PORT = 1521))
        )
        (CONNECT_DATA =
            (SERVICE_NAME = static_srv)
        )
      )

我们只需要修改service_name字段,使其为一个静态注册的服务名,并把sales改为另外一个字符串(在这里为newname)即可。

然后我们使用newname进行连接:

    SQL> connect hr/hr@newname

上文我们提到了网络服务名,那么网络服务名是什么呢?
当我们访问远程数据的时候,都需要输入类似于下面的连接描述符,这些信息描述了我们要连接的数据库。

    (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.202)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = zdb)
        )
      )

这些信息非常冗长,如果用户每次访问远程数据库时都要输入那么冗长的信息,那将是生命的极度浪费。为此,DBA可以给这些冗长的字符串(连接描述符)起一个“别名”。在Oracle中,我们把这样的别名叫“网络服务名(Net Service Name)”。

如果配置好了网络服务名,当我们每次连接远程数据库时,无须输入那么冗长的信息,只需输入网络服务名,便可轻轻松松登录远程的数据库服务器。

网络服务名存储在名为tnsnames.ora的文件中,可以把该文件复制到网络中的所有客户机和服务器上。

5 测试客户端到服务器的连接

一般我们在配置了tnsnames.ora文件以后,会使用tnsping这个工具来判断从客户端到监听器的网络连接是否正常。tnsping是一个在操作系统命令行执行的命令,如下所示:

    [oracle@book admin]$ tnsping newname
    ……
    Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =
    book.us.Oracle.com)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = static_srv)))
    OK (10 msec)

如上面所示,如果客户端能够成功连接到服务器,tnsping命令的执行结果将会显示“OK”,并报告这个过程消耗了多少时间(本例中消耗10毫秒),则说明通过该连接字符串能够连接到指定的监听器上;如果不能成功连接到远程的服务器,tnsping命令将会返回详细的错误信息。

tnsping不会验证连接字符串所包含的服务名是否为监听器所管理的服务名,它只是验证网络连接是否正常。

我们也可以用tnsping来验证简单连接:

    [oracle@book admin]$ tnsping book.us.oracle.com:1521/ora10g
    ……
    Used EZCONNECT adapter to resolve the alias
    Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=ora10g))(ADDRESS=(
    PROTOCOL=TCP)(HOST=152.68.32.60)(PORT=1521)))
    OK (0 msec)

6 轻松搞定Oracle网络之——Oracle网络故障攻略

引起客户端不能访问数据库的原因很多,有软件问题,也有硬件问题;有操作系统本身的问题,也有应用程序的问题,也可能是防火墙的问题。但是,在多数情况下都是用户配置不当所致。无论什么网络错误,我们都可以按照下面的顺序和原则去侦测网络问题。

6.1 ping目标主机

用操作系统命令ping目标主机,看看目标主机是否存在。

    C:\Documents and Settings\Administrator>ping 192.168.200.38
    Pinging 192.168.200.38 with 32 bytes of data:
    Request timed out.
    Ping statistics for 192.168.200.38:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss)

一般情况下,我们基本上可以从这里断定问题是否与操作系统有关。

如果ping的结果是“Request timed out”,表示客户端到目标主机(192.168.200.38)的网络不通。这时候,需要解决操作系统这一层的网络连接问题。如果不是操作系统的网络问题,接下来,我们可以执行tnsping命令查看问题是否出在Oracle配置这一层。

ping不通可能有下面的原因:

  • 客户端的网卡物理故障
  • 客户端的网卡设置不当
  • 客户端的防火墙限制
  • 网线断裂
  • 服务器端的网卡物理故障
  • 服务器端的网卡设置不当
  • 服务器端的防火墙限制
  • 。。。。。。

6.2 执行tnsping命令

  tnsping 网络服务名

tnsping命令主要用于测试客户端是否能够连接到监听器。

如果tnsping命令报告错误,我们需要执行3)。

6.3 查看监听器状态

$ lsnrctl status

从这里,我们可以知道监听器的运行状态。如果监听器运行不正常,或者客户端设置的参数与监听器的参数不匹配,都会导致网络故障。

6.4 查看监听器配置文件(listener.ora)

监听器启动的时候,会读取一个名叫listener.ora的文件,这个文件即为“监听器配置文件”,它指定监听器所在的主机、监听器监听的实例名、监听的端口号、监听的协议等信息。这个文件的内容类似于下面的内容:

    SID_LIST_LISTENER =
        (SID_LIST =
        (SID_DESC =
          (GLOBAL_DBNAME = zdb)
          (ORACLE_HOME = C:\app\Administrator\product\11.1.0\db_3)
          (SID_NAME = zdb)
        )
        )
    LISTENER =
        (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.202)(PORT = 1521))
        )
  • LISTENER是监听器的名字,我们也可以使用别的名字
  • ORACLE_HOME是Oracle的主目录。
  • SID_NAME是监听器监听的数据库的实例名。
  • PROTOCOL是监听器监听的协议。
  • HOST指定数据库服务器的主机名或者IP地址。
  • PORT指定监听器使用的端口号,默认的端口号是1521。

需要仔细比对客户端的参数是否和这些参数匹配。在确定服务器端配置无误后,我们需要查看客户端的配置。

6.5 查看客户端网络配置文件tnsnames.ora

客户端网络配置文件tnsnames.ora的样例如下所示(这个文件定义了网络服务名MYZDB):

    MYZDB =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.202)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = zdb)
        )
      )
  • PROTOCOL用于指定使用的协议。
  • HOST指定数据库服务器的主机名或者IP地址。
  • PORT指定监听器使用的端口号,默认的端口号是1521。
  • SERVICE_NAME指定请求的数据库的实例名。

需要仔细比对这些参数与监听器的参数是否匹配。

6.6 查看Oracle网络的日志文件

如果完成上述步骤,仍然不能诊断出网络故障,我们可以查看Oracle网络的日志文件,从这些文件中,我们能够获得更多的信息,这些文件如下:

  • listener.log Listener(监听器日志文件)
  • sqlnet.log Client or Database Server(存在于客户端和服务器端)
  • instance-name_pid.log Oracle Connection Manager Listener(有关连接管理器的日志文件)
  • 。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学基础--均值、方差、标准差、协方差

1. 简介 统计学中最核心的概念之一是&#xff1a;标准差及其与其他统计量&#xff08;如方差和均值&#xff09;之间的关系&#xff0c;本文将对标准差这一概念提供直观的视觉解释&#xff0c;在文章的最后我们将会介绍协方差的概念。 2. 概念介绍 均值 均值&#xff1a; 均值…

(一)Spring-Cloud源码分析之核心流程关系及springcloud与springboot包区别(新)

文章目录1. 前言2. springcloud简介3. Springcloud包简介4. Springcloud和Springboot流程关系5. Springcloud启动流程新增的功能和接口5.1 新增接口5.2 新增功能类5.2.1 spring-cloud-context包5.2.2 spring-cloud-commons包6. Springcloud实现机制带来的问题7. Springcloud和S…

【MyBatis】映射器配置|注解完成CRUD(三)

&#x1f697;MyBatis学习第三站~ &#x1f6a9;起始站&#xff1a;MyBatis概述&环境搭建(一) &#x1f6a9;本文已收录至专栏&#xff1a;数据库学习之旅 &#x1f44d;希望您能有所收获 上一篇我们学习了如何使用Mapper代理开发&#xff0c;核心配置文件&#xff0c;但却…

OnlyOffice验证(一)DocumentServer编译验证

OnlyOffice验证&#xff08;一&#xff09;DocumentServer编译验证 资源准备 Ubuntu16.04桌面版 验证用的版本[ubuntu-16机接上传ubuntu.04.7-desktop-amd67131.iso&#xff0c;&#xff08;别用高版本&#xff01;试过20.04耽误两三天&#xff0c;差点放弃了&#xff09;&am…

javaee之node.js与es6

问题1&#xff1a;在IDEA控制台为什么node显示不会出来命令 修改完之后记得重新启动电脑 问题2&#xff1a;response.end()作用 在Web开发中&#xff0c;浏览器端的请求到达服务器进行处理的时候&#xff0c;Response.End的作用就是让request执行到此结束&#xff0c;输出到客户…

移掉K位数字-力扣402-java贪心策略

一、题目描述给你一个以字符串表示的非负整数 num 和一个整数 k &#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。请你以字符串形式返回这个最小的数字。示例 1 &#xff1a;输入&#xff1a;num "1432219", k 3输出&#xff1a;"1219&q…

Vue实战第5章:发布Vue工程到github静态页面

前言 本篇在讲什么 简单讲解关于Vue发布github静态页面相关的内容 本篇适合什么 适合初学Vue的小白 适合想要自己搭建网站的新手 本篇需要什么 对Html和css语法有简单认知 对Vue有简单认知 Node.js(博主v18.13.0)的开发环境 Npm(博主v8.19.3)的开发环境 Vue(博主v5.…

< elementUI组件样式及功能补全: 实现点击steps组件跳转对应步骤 >

文章目录&#x1f449; 前言&#x1f449; 一、效果演示&#x1f449; 二、点击steps跳转效果实现&#x1f449; 三、实现案例往期内容 &#x1f4a8;&#x1f449; 前言 在 Vue elementUi 开发中&#xff0c;elementUI中steps步骤条组件只提供了change方法&#xff0c;并未提…

【Database-03】从 MySQL 迁移到 达梦数据库(DM 8)

1、环境 源数据库 MySQL 8.30 目标数据库 DM 8 操作系统 Centos 9 Steam 迁移工具 DM 数据迁移工具 (DM DTS) 2、开始迁移 2.1、打开DM数据迁移工具 在新建工程对话框中填写工程名和工程描述信息&#xff0c;点击【确定】按钮&#xff0c;成功添加了一个工程。 2.2、新建迁…

海思SD3403/SS928V100开发(5)MIPI_YUV相机vio sample开发----修改思路

1. 前言 sensor输出格式: YUV422 8bit 硬件连接: MIPI_YUV相机(4lane MIPI) -> SS928V100 MIPI0(4lane) 框图: 2. 几个问题 基于SS928 SDK中的 vio sample修改; 但是sample里面都是基于RAW RGB sensor开发的sample, 没有现成的MIPI_YUV sensor的参考,需要自己…

[黑马程序员SSM框架教程] Spring-11-setter注入

思考&#xff1a;向一个类中传递数据要几种&#xff1f; set方法构造方法 思考&#xff1a;依赖注入描述了在容器中建立bean与bean之间依赖关系的过程&#xff0c;如果bean运行需要数字或字符呢 引用类型简单类型&#xff08;基本数据类型和字符串&#xff09; 注入方式&#x…

软考学习笔记(题目知识记录) 2023.2.24

答案为 概要设计阶段 本题涉及软件工程的概念 软件工程的任务是基于需求分析的结果建立各种设计模型&#xff0c;给出问题的解决方案 软件设计可以分为两个阶段&#xff1a; 概要设计阶段和详细设计阶段 结构化设计方法中&#xff0c;概要设计阶段进行软件体系结构的设计&…

webpack基础学习,各个loader和plugin的具体配置

一、邂逅Webpack Webpack是什么 webpack是一个静态的模块化打包工具&#xff0c;为现代的JavaScript应用程序&#xff1b; 打包bundler&#xff1a;webpack可以将帮助我们进行打包&#xff0c;所以它是一个打包工具 静态的static&#xff1a;这样表述的原因是我们最终可以将…

(三十)大白话MySQL的redo log buffer中的缓冲日志,到底什么时候可以写入磁盘?

之前我们给大家讲解了一下redo log buffer的缓冲机制&#xff0c;大家现在应该都知道了&#xff0c;redo log在写的时候&#xff0c;都是一个事务里的一组redo log&#xff0c;先暂存在一个地方&#xff0c;完事儿了以后把一组redo log写入redo log buffer。 写入redo log buf…

C++ 动态内存管理

目录 1. C/C内存分布 练习 2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3. C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 4. operator new与operator delete函数 4.1 operator new与operator delete函数&#xff08…

跨境多账号管理教程分享:解决多账号管理混乱问题

如今&#xff0c;跨境电商卖家拥有多平台多账号已经成为常态&#xff0c;但很多人找东哥咨询的担忧都是要如何有效地管理这么多账号&#xff0c;因为如果账号过多&#xff0c;容易被关联&#xff0c;进而影响账号安全。如果你也刚好有这个烦恼&#xff0c;那找东哥真的就是找对…

HEVC 编码速率控制

视频传输带宽通常都会受到一定的限制&#xff0c;为了在满足通信带宽和传输时延限制的情况下有效传输视频数据&#xff0c;保证视频业务的播放质量&#xff0c;需要对视频编码过程进行速率控制&#xff0c;所谓速率控制&#xff0c;就是通过选择一系列编码失真尽量小&#xff0…

「TCG 规范解读」初识 TPM 2.0 库续三

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…

导航定位状态评估专题:“特征”离群点判断与剔除 | 定位状态完整性监控

1、前言&#xff1a;经典状态估计中协方差的计算能准确反映机器人状态的完整性吗&#xff1f;在每一次机器人执行各种目的的自动导航任务时&#xff0c;拥有高精度且可靠状态估计的能力可以说是机器人顺利、安全完成任务的必要条件之一。简而言之&#xff0c;机器人状态估计算法…

Docker Compose

为什么需要使用Docker ComposeDocker Compose 容器编排技术1、现在我们有一个springboot项目&#xff0c;需要依赖Redis、mysql、nginx。如果使用docker原生部署的话&#xff0c;则需要安装Redis、mysql、nginx容器&#xff0c;才可以启动我们springboot项目&#xff0c;这样的…