可刷新的 PDB(PDB Refresh)

https://docs.oracle.com/en/database/oracle/oracle-database/18/multi/administering-pdbs-with-sql-plus.html#GUID-666252E7-BE9E-4D59-B8A4-86F80A7B186A

PDB Refresh是12.2推出的特性,具有对源端PDB进行增量同步的功能,每次刷新会将源端PDB中的任何更改同步到目标PDB(在此环境中目标PDB被称作Refreshable PDB)中,目前增量同步方式有两种:手动方式与自动方式。

一、Refresh MODE语句

  • 在使用Create Pluggable Database创建PDB时指定Refresh MODE子句用来控制是否开启刷新机制。

  • 该子句目前只在”Create Pluggable Database… From”中支持,可以使用此语句指定如下选项:

  • 指定Refresh MODE NONE,这是默认方式,在创建PDB时不开启刷机机制。

  • 指定Refresh MODE MANUAL子句,创建手动刷新的PDB。

  • 指定Refresh MODE EVERY number_of_minutes MINUTES子句,创建以周期性刷新的PDB。

  • 另外值得一提的是Oracle 18c对Refreshable PDB进行了进一步的增强,增强为Refreshable PDB Switchover(可刷新PDB的切换),在12.2.1中源PDB只能作为源端PDB,而在18c中可对源PDB和目标PDB进行角色转换,该功能类似Active Dataguard的主备切换,只不过Oracle在PDB Refresh中再次实现了该功能。

  • 目前Refreshable PDB只能在只读模式下打开,当Refreshable PDB进行刷新时,Refreshable PDB必须处于关闭状态,只读模式打开时会停止刷新,当再次关闭Refreshable PDB时继续上次的刷新,也可以将Refreshable PDB更改为Refresh MODE NONE模式,更改之后你无法在将PDB改为Refreshable PDB。

  • 另外也可以使用Alter Pluggable Database命令将Refreshable PDB从手动刷新更改为自动刷新,也可以从自动刷新更改为手动刷新,同样通过语句Alter Pluggable Database +Refresh MODE更改为非Refreshable PDB,但是非Refreshable PDB不可以被更改为Refreshable PDB。

  • 同时需要注意的是,Source PDB和Refreshable PDB可以属于同一个CDB, 也可以属于不同的 CDB,但是 在创建Refreshable PDB时必须指定DBlink,DBlink指向自己所在的CDB,否则语法无法通过。

  • Refreshable PDB的应用场景可以用在开发和测试环境的搭建过程中, 因为数据是采用增量同步的方式,这样就减少了对源数据库的影响,也可以作为online备份库。

Clone源端的PDB前期注意事项:

  • 如果PDB被Clone的到的CDB的字符集不是AL32UTF8,那么源与目标字符集必须兼容。

  • 源端与目标端的字节顺序必须相同。

  • 连接的用户在CDB中必须拥有’Create Pluggable Database’的权限。

  • 源PDB不可以是关闭状态。

  • 源端PDB必须为归档模式。

  • 源端PDB必须是local undo模式。

  • 在Refreshable PDB创建后,如果源端需要创建相应表空间,那么目标端需要配置PDB_FILE_NAME_CONVERT参数或使用OMF目录管理方式(OMF级别高于PDB_FILE_NAME_CONVERT),否则会导致目标端PDB刷新失败。

  • 目标端采用OMF目录管理方式后,Create Pluggable Database子句中不能指定file_name_convert做显示目录转换,否则报ORA-01276错误。

  • 在使用刷新目标PDB与源PDB同步数据时,是通过dblink从源PDB访问redo,但有些时候,当需要更新刷新副本时,源PDB或源PDB所属的CDB可能无法访问,在这种情况下,设置REMOTE_RECOVERY_FILE_DEST参数,将尝试从此参数指定的目录中读取归档日志文件。

  • 刷新与切换命令均需在目标PDB中执行。

二、PDB Refreshcesh

如下将源端PDB:woqupdb通过refresh方式克隆到本地,且命名为qdatapdb。

(1)创建目标端到源端库的DBLINK:orcl12c

sys. ora12c>CREATE DATABASE LINK orcl12c CONNECT TO system IDENTIFIEDBY oracle USING 'orcl12c';

Database link created.

Elapsed: 00:00:00.15

sys. ora12c>

克隆源端WOQUPDB

sys. orcl12c>show pdbs

CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

2 PDB$SEED                       READ ONLY  NO

4WOQUPDB                        READ WRITENO

sys. orcl12c>

(2)目标端配置OMF目录管理方式

sys. ora12c>alter system set db_create_file_dest='/u01/app/oracle/oradata';

System altered.

Elapsed: 00:00:00.04

sys. ora12c>

(3)在目标端使用CREATE PLUGGABLE DATABASE + REFRESH MODE MANUAL语句创建qdatapdb

sys. ora12c>CREATE PLUGGABLE DATABASE qdatapdb FROM woqupdb@orcl12c REFRESH MODE MANUAL;

Pluggable database created.

Elapsed: 00:00:14.20

sys. ora12c>

(4)检查克隆完成的QDATAPDB

sys. ora12c>show pdbs

CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

2 PDB$SEED                       READ ONLY  NO

4 QDATAPDB                       MOUNTED

sys. ora12c>select pdb_id, pdb_name, status, refresh_mode,refresh_interval from cdb_pdbs;

PDB_ID PDB_NAME                       STATUS     REFRES REFRESH_INTERVAL

---------- ------------------------------ ---------- ----------------------

2 PDB$SEED                       NORMAL     NONE

4 QDATAPDB                       REFRESHINGMANUAL

Elapsed: 00:00:00.07

sys. ora12c>

通过视图我们可以看到状态为REFRESHING,刷新模式为MANUAL手工刷新。

(5)在源PDB创建表空间tbs1,及测试表t

sys. orcl12c>createtablespace tbs1 datafile size 100M;

Tablespace created.

Elapsed: 00:00:00.30

sys. orcl12c>create user yyh identified by yyh;

User created.

Elapsed: 00:00:00.09

sys. orcl12c>drop user yyh ;

User dropped.

Elapsed: 00:00:01.34

sys. orcl12c>create user yyh default tablespace tbs1 identified by yyh;

User created.

Elapsed: 00:00:00.05

sys. orcl12c>grant dba to yyh;

Grant succeeded.

Elapsed: 00:00:00.04

sys. orcl12c>conn yyh/yyh@woqupdb

Connected.

yyh. woqupdb>createtable t as select * from dba_objects;

Table created.

Elapsed: 00:00:02.18

yyh. woqupdb>selectcount(*) from t;

COUNT(*)

----------

72714

Elapsed: 00:00:00.03

yyh. woqupdb>

(6)在目标端刷新QDatapdb

sys. ora12c>alterpluggable database qdatapdb refresh;

alter pluggable database qdatapdb refresh

*

ERROR at line 1:

ORA-65118: operation affecting a pluggable database cannot be performedfrom another pluggable database

Elapsed: 00:00:00.04

sys. ora12c>conn sys/oracle@qdatapdb as sysdba

Connected.

21:55:00 sys. qdatapdb>set time off

sys. qdatapdb>alterpluggable database qdatapdb refresh;

Pluggable database altered.

Elapsed: 00:00:01.84

sys. qdatapdb>

日志信息:

2018-03-10T21:55:06.187494-05:00

QDATAPDB(4):alter pluggable database qdatapdb refresh

2018-03-10T21:55:06.975492-05:00

Applying media recovery for pdb-4099 from SCN 2800296 to SCN 2802347

Remote log information: count-1

thr-1, seq-5, logfile-/u01/app/oracle/fast_recovery_area/orcl12c/ORCL12C/foreign_archivelog/WOQUPDB/2018_03_10/o1_mf_1_5_1212300924_.arc,los-2791634, nxs-18446744073709551615

QDATAPDB(4):Media Recovery Start

2018-03-10T21:55:06.977285-05:00

QDATAPDB(4):Serial Media Recovery started

2018-03-10T21:55:07.061801-05:00

QDATAPDB(4):Media Recovery Log/u01/app/oracle/fast_recovery_area/orcl12c/ORCL12C/foreign_archivelog/WOQUPDB/2018_03_10/o1_mf_1_5_1212300924_.arc

2018-03-10T21:55:07.503582-05:00

QDATAPDB(4):Successfully added datafile 51 to media recovery

QDATAPDB(4):Datafile #51:'/u01/app/oracle/oradata/ORA12C/671B0AC55A3F2870E0535138A8C0026E/datafile/o1_mf_tbs1_fb96ncby_.dbf'

2018-03-10T21:55:07.998822-05:00

QDATAPDB(4):Incomplete Recovery applied until change 2802347 time 03/10/201821:55:06

2018-03-10T21:55:08.006177-05:00

QDATAPDB(4):Media Recovery Complete (ora12c)

QDATAPDB(4):Completed: alter pluggable database qdatapdb refresh

(7)目标端打开QDatapdb, 检查刷新完成后的数据

sys. qdatapdb>alter database open read only;

Database altered.

Elapsed: 00:00:01.54

sys. qdatapdb>selectcount(*) from yyh.t;

COUNT(*)

----------

72714

Elapsed: 00:00:00.04

sys. qdatapdb>select t.name tablespace_name, d.name from v$tablespacet, v$datafile d where d.ts#=t.ts#;

TABLESPACE_NAME NAME

------------------------------------------------------------------------------------

SYSTEM         /u01/app/oracle/oradata/ORA12C/671B/datafile/o1_mf_system_fbjv_.dbf

SYSAUX         /u01/app/oracle/oradata/ORA12C/671B/datafile/o1_mf_sysaux_fbk6_.dbf

UNDOTBS1       /u01/app/oracle/oradata/ORA12C/671B/datafile/o1_mf_undotbs1_fbhk7_.dbf

TBS1           /u01/app/oracle/oradata/ORA12C/671B/datafile/o1_mf_tbs1_fbcby_.dbf

Elapsed: 00:00:00.01

sys. qdatapdb>

这里已经刷新完毕,数据同步到本地目标qdatapdb中。

(8)目标库修改为自动刷新模式,每分钟刷新一次

sys. qdatapdb>ALTER PLUGGABLE DATABASE qdatapdb REFRESH MODE EVERY 1 MINUTES;

Pluggable database altered.

Elapsed: 00:00:00.09

sys. qdatapdb>select pdb_id, pdb_name, status, refresh_mode,refresh_interval from cdb_pdbs;

PDB_ID PDB_NAME                       STATUS     REFRES REFRESH_INTERVAL

---------- ------------------------------ ---------- ----------------------

4 QDATAPDB                       REFRESHING AUTO                  1

Elapsed: 00:00:00.05

sys. qdatapdb>

通过视图我们可以看到刷新模式已经被更改为AUTO,间隔时间为1分钟。

(9)源PDB删除测试表

yyh. woqupdb>droptable t;

Table dropped.

Elapsed: 00:00:00.31

yyh. woqupdb>

日志:

2018-03-10T22:01:49.537240-05:00

QDATAPDB(4):ALTER PLUGGABLE DATABASE pdb1 REFRESH MODE EVERY 1 MINUTES

QDATAPDB(4):ORA-65118 signalled during: ALTER PLUGGABLE DATABASE pdb1REFRESH MODE EVERY 1 MINUTES...

2018-03-10T22:02:21.179776-05:00

QDATAPDB(4):ALTER PLUGGABLE DATABASE qdatapdb REFRESH MODE EVERY 1 MINUTES

QDATAPDB(4):Completed: ALTER PLUGGABLE DATABASE qdatapdb REFRESH MODEEVERY 1 MINUTES

2018-03-10T22:02:21.357524-05:00

QDATAPDB(4):alter pluggable database refresh

QDATAPDB(4):Completed: alter pluggable database refresh

2018-03-10T22:03:21.502428-05:00

QDATAPDB(4):alter pluggable database refresh

QDATAPDB(4):Completed: alter pluggable database refresh

2018-03-10T22:04:21.680468-05:00

QDATAPDB(4):alter pluggable database refresh

QDATAPDB(4):Completed: alter pluggable database refresh

通过日志可以观察到目标端每分钟自动刷新一次。

(10)检查目标端数据同步情况

sys. qdatapdb>selectcount(*) from yyh.t;

COUNT(*)

----------

72714

Elapsed: 00:00:00.03

sys. qdatapdb>select open_mode from v$database;

OPEN_MODE

--------------------

READ ONLY

Elapsed: 00:00:00.03

sys. qdatapdb>shutdown immediate

Pluggable Database closed.

sys. qdatapdb>

因目标库在OPEN状态下,虽然日志中显示每分钟刷新,但是数据实际并未正真同步。

(11)1分钟后再次检查数据同步情况

sys. qdatapdb>alter database open read only;

Database altered.

Elapsed: 00:00:01.89

sys. qdatapdb>selectcount(*) from yyh.t;

select count(*) from yyh.t

*

ERROR at line 1:

ORA-00942: table or view does not exist

Elapsed: 00:00:00.01

sys. qdatapdb>

数据已经同步完成。

(12)转换为目标PDB:QDataPDB为非none PDB

sys. ora12c>select pdb_id, pdb_name, status, refresh_mode,refresh_interval from cdb_pdbs;

PDB_ID PDB_NAME                       STATUS     REFRES REFRESH_INTERVAL

---------- ------------------------------ ---------- ----------------------

2 PDB$SEED                       NORMAL     NONE

4 QDATAPDB                       REFRESHINGAUTO                  1

Elapsed: 00:00:00.03

sys. ora12c>alter pluggable database qdatapdb close;

Pluggable database altered.

Elapsed: 00:00:00.19

sys. ora12c>alter session set container=qdatapdb;

Session altered.

Elapsed: 00:00:00.00

sys. qdatapdb>ALTERPLUGGABLE DATABASE qdatapdb REFRESH MODE NONE;

Pluggable database altered.

Elapsed: 00:00:04.01

sys. ora12c>ALTERPLUGGABLE DATABASE qdatapdb REFRESH MODE manual;

ALTER PLUGGABLE DATABASE qdatapdb REFRESH MODE manual

*

ERROR at line 1:

ORA-65261: pluggable database QDATAPDB not enabled for refresh

Elapsed: 00:00:00.00

sys. ora12c>

Note:禁用PDB Refresh功能后,就不能再转换为Refresh PDB。

(13)检查QDataPDB状态

sys. ora12c>conn /as sysdba

Connected.

sys. ora12c>select pdb_id, pdb_name, status, refresh_mode, refresh_intervalfrom cdb_pdbs;

PDB_ID PDB_NAME                       STATUS     REFRES REFRESH_INTERVAL

---------- ------------------------------ ---------- ----------------------

2 PDB$SEED                       NORMAL     NONE

4 QDATAPDB                       NEW        NONE

Elapsed: 00:00:00.00

sys. ora12c>alterpluggable database qdatapdb open;

Pluggable database altered.

Elapsed: 00:00:05.02

sys. ora12c>selectpdb_id, pdb_name, status, refresh_mode, refresh_interval from cdb_pdbs;

PDB_ID PDB_NAME                       STATUS     REFRES REFRESH_INTERVAL

---------- ------------------------------ ---------- ----------------------

2 PDB$SEED                       NORMAL     NONE

4 QDATAPDB                       NORMAL     NONE

Elapsed: 00:00:00.00

sys. ora12c>

QDataPDB的状态已经由自动刷新转换成为了普通的PDB。

Oracle 18c 新特性--可刷新PDB的switchover

在 18c 中支持将通过 dblink 创建的可刷新 PDB 进行源 PDB 和克隆 PDB 进行 switchover ,源 PDB 将成为克隆 PDB ,原来的克隆 PDB 将成为源 PDB 。

具体过程

  1. 确认源PDB处于读写模式 
    以LEIPDB为源PDB来克隆。
<span style="color:#000000">SQL> show pdbs;CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED                       READ ONLY  NO3 LEIPDB                         READ WRITE NO
</span>
  1. 源CDB中创建公共用户
<span style="color:#000000">DROP USER c##lei CASCADE;
CREATE USER c##lei IDENTIFIED BY oracle;
GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##lei CONTAINER=ALL;
GRANT CREATE PLUGGABLE DATABASE TO c##lei CONTAINER=ALL;
GRANT SYSOPER TO c##lei CONTAINER=ALL;
</span>
  1. 源PDB中创建测试表
<span style="color:#000000">ALTER SESSION SET CONTAINER = leipdb;
CREATE TABLE cndba(id NUMBER);
INSERT INTO cndba VALUES(1);
COMMIT;
SELECT * FROM cndba;N1
----------1
</span>
  1. 目标CDB中创建公共用户 
    源CDB和目标CDB中具有相同的公共用户c##lei。
<span style="color:#000000">DROP USER c##lei CASCADE;
CREATE USER c##lei IDENTIFIED BY oracle;
GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##lei CONTAINER=ALL;
GRANT CREATE PLUGGABLE DATABASE TO c##lei CONTAINER=ALL;
GRANT SYSOPER TO c##lei CONTAINER=ALL;
</span>
  1. 目标CDB创建DBLINK 
    在目标CDB中创建指向源CDB的dblink,用户就用之前创建的c##lei。

配置TNS

<span style="color:#000000">LEICDB =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.179)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = lei)))
</span>

创建dblink

<span style="color:#000000">CREATE DATABASE LINK leicdb_dblink CONNECT TO c##lei IDENTIFIED BY oracle USING 'leicdb';1
</span>

验证DBLINK是否正常

<span style="color:#000000">SQL> select COUNT(*) from v$version@leicdb_dblink;COUNT(*)
----------1
</span>
  1. 创建手动刷新的PDB
<span style="color:#000000">CREATE PLUGGABLE DATABASE leicdb_pdb FROM leipdb@leicdb_dblinkCREATE_FILE_DEST='/u01/app/oracle/oradata/'REFRESH MODE MANUAL;
</span>
  1. 刷新leicdb_pdb 
    刷新之前在目标PDB中插入数据
<span style="color:#000000">SQL> INSERT INTO cndba VALUES(2);
SQL> select * from cndba;ID
----------12
SQL> commit;
</span>

刷新PDB

<span style="color:#000000">ALTER SESSION SET CONTAINER = leicdb_pdb;
ALTER PLUGGABLE DATABASE REFRESH;
</span>

查看新数据是否同步过来

<span style="color:#000000">ALTER PLUGGABLE DATABASE leicdb_pdb OPEN READ ONLY;
ALTER SESSION SET CONTAINER = leicdb_pdb;
select * from cndba;ID
----------1
</span>
  1. 源CDB创建DBLINK 
    在源CDB中创建指向目标CDB的dblink,用于switchover操作。 
    同样,也要配置TNS
<span style="color:#000000">LEICDB2 =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.178)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = lei)))
</span>

创建dblink

<span style="color:#000000">CREATE DATABASE LINK leicdb2_dblink CONNECT TO c##lei IDENTIFIED BY oracle USING 'leicdb2';
</span>

验证

<span style="color:#000000">select COUNT(*) from v$version@leicdb2_dblink;
COUNT(*)
----------1
</span>
  1. SWITCHOVER 
    执行切换操作,和DG switchover很相似切换主备。那么leicdb_pdb就是源PDB,而原来的leipdb就是克隆PDB。
<span style="color:#000000">ALTER SESSION SET CONTAINER = leipdb;
ALTER PLUGGABLE DATABASE REFRESH MODE MANUAL FROM leicdb_pdb@leicdb2_dblink SWITCHOVER;
</span>

至此就完成了可刷新PDB的在线switchover。



About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( xiaomaimiaolhr )上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599 (满) 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 ( 646634621 ) ,注明添加缘由

● 于 2019-08-01 06:00 ~ 2019-08-31 24:00 在西安完成

● 最新修改时间:2019-08-01 06:00 ~ 2019-08-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

● 小麦苗的微店 : https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麦苗出版的数据库类丛书 : http://blog.itpub.net/26736162/viewspace-2142121/

● 小麦苗OCP、OCM、高可用网络班 : http://blog.itpub.net/26736162/viewspace-2148098/

● 小麦苗腾讯课堂主页 : https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端 扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr )及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

可刷新的 PDB(PDB Refresh)相关推荐

  1. Safari浏览器自动刷新页面插件Auto Refresh

    Safari浏览器自动刷新页面插件Auto Refresh  https://extensions.apple.com/details/?id=com.agriffindesign.autorefre ...

  2. (翻译)下拉刷新(Pull to refresh)

    问题概述   用户想获得更多的内容,或是刷新当前在屏幕上显示的内容. 示例 用途 用于刷新或更新任意可更新的内容,例如列表.网格列表.按时间逆序排列的卡片集合(即卡片集合按时间先后顺序反向排列).例如 ...

  3. chrome打开本地html自动刷新,谷歌浏览器插件Auto Refresh 网页自动刷新

    Auto Refresh 是一款标签页自动刷新软件,可以对需要刷新的标签进行设置,指定页面,或者只刷新非活动标签页.具体可以看看上面的图片介绍.我们前面还介绍过两款自动刷新插件,Free Auto R ...

  4. oracle+启动pdb,PDB随CDB启动

    下面的命令可以放pdb保持其关机前的状态,语法如下: ALTER PLUGGABLE DATABASE [all]|[PDB_NAME] SAVE STATE; 取消设置的话,语法如下: ALTER ...

  5. oracle19c克隆PDB

    一.本地克隆 本地克隆非常简单,一条命令: SQL> create pluggable database testmove4 from testmove2 file_name_convert=( ...

  6. Oracle 12.2 新特性:在线PDB数据库克隆(Pluggable Hot Clone)

    Oracle 12.2 新特性:在线PDB数据库克隆(Pluggable Hot Clone) 在Oracle 12c的多租户(Multitenant)特性中,可以通过灵活的克隆复制来创建PDB(Pl ...

  7. 使用pdb调试python

    python pdb调试 python -m pdb myscript.py #注意这会重启myscript.py,这样启动的话,代码每一行都是一个节点 也可以在程序中这么设置断点: import p ...

  8. The python debugger调试(PDB)的简介

    学习Python调试,最好的资料当然是官方文档和(pdb)help了,这里有篇博文,还有下面的 PDB cheat-sheet 1 在python中使用pdb模块可以进行调试 import pdb p ...

  9. python pdb_python pdb调试方法分享

    复制代码 代码如下: import pdb def pdb_test(arg): for i in range(arg): print(i) return arg pdb.run("pdb_ ...

最新文章

  1. 可视化经验分享 | 赠书
  2. c语言如何回缩一个字符,撑大的胃怎样能瘦回去 被撑大的胃还能缩回去吗
  3. jQuery快速入门专题
  4. 【SLAM】gradslam(∇SLAM)开源:论文、代码全都有
  5. Pagodas HDU - 5512
  6. android 地址栏 隐藏,android webview隐藏地址栏
  7. Vscode中HTML与CSS代码的快速写法
  8. CISCO寄存器配置与说明
  9. 基于决策树的保险案列
  10. Ubuntu 20.04 锐捷客户端安装记录
  11. Python 使用记事本、sublime、vim时报错:IndentationError: expected an indented block
  12. 苹果CMS火车头采集发布模块教程
  13. 以太坊:分片Sharding FAQ
  14. c++11总结21——atomic_flag
  15. matlab零阶保持器的作用,MATLAB保持器的simulink仿真.ppt
  16. 训练好的vgg报错RuntimeError:mat1 and mat2 shapes cannot be multiplied(512*49 and 25088*4096)
  17. 自动化测试工程师应聘要求
  18. pyqt 服务器mysql_PyQt5 中调用MySql接口失败 ( QSqlDatabase 组件) 在Linux环境下如何修改...
  19. 方舟php服务器控制,《方舟:生存进化》私人服务器设置教程
  20. outlook邮件服务器保存设置,邮件Outlook设置本地存储的方法--

热门文章

  1. matlab根据根求多项式,matlab求解多项式的根
  2. iOS 设置中清除缓存功能
  3. keras 自定义Layer
  4. php技术面试成功后试岗,6.3公里“阅读静安”光音栈桥“会唱歌”
  5. html怎么设置毛笔字体,三种实用的毛笔书法字体设计制作教程
  6. 轻蜗牛直租平台-天画项目简介
  7. DDOS高防IP是什么?怎么用?
  8. 【数据库原理复习题】
  9. 什么是单元测试?该怎么做单元测试?
  10. springboot+清远旅游推荐网站 毕业设计-附源码211551