♣ 思考 在Oracle中,什么是动态注册和静态注册,它们之间有什么区别? 在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务,根据注册方式的不同,目前Oracle支持动态注册和静态注册这两种注册方式。 静态注册就是在监听启动的时候,不管实例启动了没有,实例的名字都已经注册到监听中了,主要用于DBA远程启动数据库实例。在DG的搭建过程中也必须配置静态监听。 静态注册主要在$ORACLE_HOME/network/admin/listener.ora文件中配置,静态注册的示例如下所示: LISTENER = (DESCRIPTION_LIST = 那么,如何查询某服务是静态注册还是动态注册呢?可以使用命令lsnrctl status来查看某服务是静态注册还是动态注册。实例状态为UNKNOWN时表明此服务是静态注册。
代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!
静态注册和动态注册 静态注册 默认情况下,就是静态注册,静态注册是最简单的方式,NDK开发过程中,基本上使用静态注册。前面的知识都是静态注册的方式。 优点: 开发简单 缺点: JNI函数名非常长 捆绑 上层 包名 + 类名 运行期 才会去 匹配JNI函数,性能上 低于 动态注册 动态注册 再看Android Framework源代码的Native 层,Android 系统的C++源码:基本上都是动态注册。 动态注册是怎么玩转的? 明白一个简单的道理,Java中我们new 类,默认会调用构造函数,重写了构造函数,就会调用我们自己的。 动态注册核心RegisterNatives ① 重写JNI_OnLoad ② JavaVM 初始化获取JNIEnv,并获取到jclass ③ 注册函数 //RegisterNatives(jclass
一、静态广播注册 MainActivity.java public class MainActivity extends AppCompatActivity { @BindView(R.id.btn_send intent.putExtra("msg" , "张风捷特烈"); sendBroadcast(intent); break; } } } 静态注册广播接受者 :StaticBR.java /** * 作者:张风捷特烈 * 时间:2018/4/14:16:22 * 邮箱:1981462002@qq.com * 说明:静态注册广播接受者 */ public ; } } 静态注册:app/src/main/AndroidManifest.xml <receiver android:name=".StaticBR"> <intent-filter ,Android7.0可以法收到静态广播 静态注册一大好处是可以跨程序使用,A程序中的BroadcastReceiver可以在B程序中使用 Android8.0静态广播解决方案:intent.setComponent
一、fragment静态注册创建方法及步骤 1.创建一个StaticFragment.java文件继承Fragment类和一个static_fragment.xml文件完成fragment的布局。 android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是fragment静态注册 二、fragment动态注册创建方法及步骤 1.新建一个项目,创建2个Fragment继承类分别为MyFragment1.java和MyFragment2.java,然后创建2个布局文件分别为fragment1 layout for this fragment return inflater.inflate(R.layout.fragment2, container, false); } } 上述代码与静态创建的区别不大 总结 以上所述是小编给大家介绍的Android Fragment的静态注册和动态注册创建步骤,希望对大家有所帮助!
Native 方法的静态注册 NDK 开发中,通过 javah -jni 命令生成的包含 JNI 的头文件,接口的命名方式一般是: Java_<PackageName>_<ClassName>_<MethodName 程序执行时系统会根据这种命名规则来调用对应的 Native 方法,这种注册方式称之为静态注册。 Java_com_haohao_framework_NDKFramework_native_1DestroyFramework (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif 静态注册方式的优点 Native 方法的动态注册 由于静态注册存在命名局限性,生产环境中一般不采用静态注册的方式。动态注册的优点是可以自由命名 Native 方法,缺点是如果 Native 方法过多,操作比较麻烦。 动态注册的时机是在加载函数库(.a 或 .so)的时候进行注册,即在 JNI_OnLoad 方法里进行注册。
JNI方法注册源码分析(JNI_OnLoad|动态注册|静态注册|方法替换) [icon13-png-ed.png] 背景 开发Android应用时,有时候Java层的编码不能满足实际需求,需要通过JNI 入门选手可以采用Native方法动态注册,混淆方名。 文章指在学会使用JNI方法动态注册,静态注册,方法替换,且在这个过程中稍微了解一下native层的动态库加载,方法加载等知识。 (JNIEnv *env, jobject /* this */) { return env->NewStringUTF("Hello from C++ dynamic\n"); } 经过动态注册之后 优点 简单明了 so方法动态注册 这种方式,写的代码稍微多点,但好处很明显,函数映射关系配置灵活,执行效率要比第一种方式高。 JNINativeMethod是动态注册方法需要的结构体: typedef struct { const char* name;//在java中声明的native函数名 const char*
这就是静态注册 动态注册:上面类似一张静态表,但是如果每个JNI的方法与Java的代码有个映射表,只要将这张表告诉JVM,那就可以找到对应的C++方法了 静态注册 对于静态注册,JNI的方法命名规则为: 动态注册 动态注册的关键字是两个: JNI_OnLoad()方法,这个是载入Jni库后调用的第一个方法,在这里可以将方法对应表注册给JNI环境 JNINativeMethod结构,这个结构是将jni层的方法映射到 static {}; descriptor: ()V} 其中descriptor就是对应的签名,比如方法"sayHello"对应的方法签名就是"()Ljava/lang/String;" 静态注册与动态注册的区别 静态注册,每次使用native方法时,都要去寻找;而动态注册,由于有张表的存在,因此查找效率高。 编译 上面不管是静态注册方法,还是动态注册方法,都需要将cpp文件编译成平台所需要的库。 总结 上面主要是我自己从使用NDK开发中体会到的需要掌握的东西,最主要是静态注册与动态注册的实现。后面会介绍Java和JNI层如何互相作用,敬请期待。
The command completed successfully 启动/停止 lsnrctl start/stop 监听 UNKNOWN状态解释 实例状态为UNKNOWN值时表明此服务是静态注册的设置 动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管关闭何时数据库,动态注册的数据库都会动态地从 监听器注销,而与之相关的信息将从状态列表中消失。 这样,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退(fallback)和负载平衡。 既然有动态监听为什么还要静态监听呢? 原因如下: 1.监听器不是最早启动,oracle实例先启动 2.监听器重启 3.oracle实例没有open 更加详细的解释请看Dave的博文 Oracle Listener 动态注册 与 静态注册
本文给出了解决方案,并且使用了静态及动态两种注册方法。 关于单实例下非缺省监听及端口的配置可以参考下面的文章。 ,等N久也不会有实例注册 The command completed successfully -->因为这个是非缺省的,而且我们还没有配置动态注册 --下面我们来设置动态注册 --查看参数local_listener The command completed successfully 3、配置非缺省的监听器并实现静态注册 --对于非缺省监听器,我们也可以为其配置静态注册方式 --首先我们停止监听器,并清空Oracle --注意状态为UNKNOWN,表明是静态注册 The command completed successfully --我们看看grid用户缺省监听的状态,此时实例cnbo依旧被注册 [grid@linux1 e、对于Oracle 11g RAC环境下单实例的非缺省监听及端口的静态注册,如果不设置local_listener,尽管会注册到指定的监听器,但同时也会注册到缺省监听器。
例如,在使用Class.forName() 加载oracle的驱动oracle.jdbc.driver.OracleDriver时,会执行OracleDriver中的静态代码段,创建一个OracleDriver 将上述的例子稍作变化,在注销掉了静态块创建的driver后,往DriverManager注册一个自己创建的Driver对象实例(具体步骤请看注释): public static void defaultDriver = DriverManager.getDriver(url); System.out.println("注销掉静态创建的 以上代码先创建了一个Driver对象,在注销了DriverManager中由加载驱动过程中静态创建驱动之后,注册到系统中,现在DriverManager中对应url返回的Driver 即是在代码中创建的 ,在静态代码段中,有一个 loadInitialDrivers() 静态方法,用于加载配置在jdbc.drivers 系统属性内的驱动Driver,配置在jdbc.drivers 中的驱动driver
在静态代码块中首先调用了注释1处的代码,用来加载名为“media_jni“的动态库,也就是libmedia_jni.so。 这就需要了解JNI方法注册的知识。 5.JNI方法注册 JNI方法注册分为静态注册和动态注册,其中静态注册多用于NDK开发,而动态注册多用于Framework开发。 静态注册 在AS中新建一个Java Library名为media,这里仿照系统的MediaRecorder.java,写一个简单的MediaRecorder.java,如下所示。 ? 静态注册就是根据方法名,将Java方法和JNI方法建立关联,但是它有一些缺点: JNI层的方法名称过长。 声明Native方法的类需要用javah生成头文件。 我们知道,静态注册就是Java的Native方法通过方法指针来与JNI进行关联的,如果Native方法知道它在JNI中对应的方法指针,就可以避免上述的缺点,这就是动态注册。
oracle网络没有负载, 没有负载的就不容易出问题。相对很简单的。 1.监听的动态注册: PMON 注册监听,或者 alter system register; 强制PMON抓紧注册。 都属于动态注册~ 对应的listener.ora文件配置信息: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL 192.168.10.159)(PORT = 1521))) (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))) ) 2.监听的静态注册 : 由于动态注册不稳定,采用静态注册方式,对应的listener.ora文件配置信息: 就在原配置文件上copy5行(下面示例第3~7行),改下global_dbname和sid_name即可~ SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = jyzhao) (ORACLE_HOME = /opt/app/oracle/
server,继承监听器的环境变量(ORACLE_HOME/ORACLE_SID除外); 远程连接+shared server,集成DB进程的环境变量,DB进程的环境变量又可能来自于命令行/远程连接+静态监听 ; 数据库的环境变量和监听器环境变量的关系: 动态注册:db节点启动的时候pmon进程往监听器注册服务,并且将自身的环境变量传递给监听器;之后所有经过监听器启动的进程,都会应用pmon传递过来的环境变量 ;默认情况下pmon注册到1521的默认监听,可以通过local_listner参数配置注册到其他监听器; 备注:RAC实例创建后和srvctl创建监听器等情况下,默认使用动态注册的方式。 /<db_name>") ) ) 静态注册:通过listener.ora配置文件配置SID_LIST_listener_name参数,例如: 如果使用srvctl工具配置环境变量,相关配置会存储在 备注:可以在su切换用户的时候立即进行相关提示和列出环境变量配置操作,避免运维操作遗忘; 如果需要在listener.ora中配置静态监听,在ENVS的设置中带上实例应有的环境变量信息,例如: RAC环境中不要使用
之前使用到JNI中,都是通过javah命令生成对应c/c++中的方法名,其规则为:java的包名+native方法名,我们把它称作静态注册。 JNI还可以使用动态注册,在JNI源码中,安卓系统(PathClassLoader)加载so文件时,首先会调用一个方法:JNI_OnLoad;这是系统预留给外部使用动态注册使用的,今天来使用动态注册的方式调用 native_stringFromJNI(JNIEnv *env, jclass type) { return env->NewStringUTF("C++"); } native_stringFromJNI方法很明显不能被静态注册找到 ,接着我们定义一个JNINativeMethod数组,里面用于存放需要被静态注册的方法 static const JNINativeMethod gMethods[] = { { 总结: 静态注册: 每个class都需要使用javah生成一个头文件,并且生成的名字很长书写不便;初次调用时需要依据名字搜索对应的JNI层函数来建立关联关系,会影响运行效率 用javah 生成头文件方便简单
(service handlers),用于调度(共享模式)和派生子程序(专用模式) 端口号等 注册方法 静态注册: 指将实例的相关信息手动告知listener侦听器,可以使用netmgr,netca --启动了orcl.robinson.com服务且为静态注册 Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service.. --动态注册testdb,Win客户端可以正常连接 SQL> conn system/redhat@orcl --原来静态注册的orcl也可以正常连接 Connected. --注意服务名中有些状态为UNKNOWN,有些为READY --对于动态注册的服务名,因为监听器知道实例的状态,所以正常状态通常显示为READY。 --对于静态注册的服务名,通常显示为UNKNOWN。 当客户端的请求到达listener时,listener选择一个合适的service handler为之服务。
登录注册,说说登录,需要用户名,用户名的提示内容为请输入用户名,密码的提示为8-18位不含特殊字符的数字、字母组合。还有一个点击按钮。 store.state.count } } } const app = new Vue({ el: '#app', // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件 { Counter }, template: ` <counter></counter> ` }) 通过在根实例总注册 store,该store实例会注入根组件下的所有子组件中,且子组件能通过this. $store.getters.doneTodosCount` doneCount: 'doneTodosCount' }) vuex,vue本身自带有store模式,其实就是全局注册一个对象,实现数据共享
前言 我们在写Oracle的存储过程里面,经常会用到游标,Oracle里面的游标分为静态游标和动态游标。今天我们在说一下分别有什么不同。 静态游标和动态游标的概念 静态游标 显式游标和隐式游标称为静态游标,因为在使用他们之前,游标的定义已经完成,不能再更改。 解决思路 这个查询我们就可以用到静态游标和动态游标的结合使用。 通过静态游标设置开始和结果日期获取到所涉及到的当前年月。 根据获取到的当前年月生成要查询对应的月份分割表的动态SQL语句。 上面是定义和静态游标和动态游标,下面的静态游标的写法,是根据输入的开始和结束日期获取对应的当前年月 即如果输入了2018-06-01----2018-08-30 游标显示结果为 201806 201807 根据输入的日期通过静态游标生成对应的动态SQL语句。
2fsuccess&response_type=code&scope=snsapi_base&state=123#wechat_redirect" } ] } ] } 静默注册
1、在Oracle服务端和客户端都安装完之后,就需要配置监听程序和本地网络服务,以便外部程序和工具的访问,所以Oracle提供了两款自带的工具来配置它们分别是 Net Configuration、Net 注意:如果初次安装Oracle,建议使用Net Configuration Assistant配置监听程序和网络服务,应为使用Net Configuration会让你指定网络配置文件的位置, ? 监听程序有个注册服务的功能,质上将,listener是建立实例和客户端进程之间联系的桥梁。Listener与实例之间的联系,就是通过注册的过程来实现的。 注册的过程就是实例告诉监听器,它的数据库数据库实例名称instance_name和服务名service_names。监听器注册上这样的信息,对客户端请求根据监听注册信息,找到正确的服务实例名称。 目前Oracle版本中,提供动态注册和静态注册两种方式。
静态网站托管(WH)是由腾讯云开发提供的便捷、稳定、高拓展性的托管服务。您无需自建服务器,自带CDN加速,一键即可部署网站应用。同时,通过JS SDK可直接操作数据库、云函数等,将静态网站扩展为带有后台服务端的全栈网站。
扫码关注云+社区
领取腾讯云代金券