TSPITR方式数据库找回误操作丢失的数据

一、TSPITR介绍

        TSPITR全称是Tablespace Point In Time Recover(表空间基于时间点的不完全恢复)。原理是通过辅助实例基于时间还原出误操作前的数据通过DataPump将数据导入到目标数据库。TSPITR的最大好处是不需要生产库停机。

二、适用场景

表空间时点恢复适用用以下场景:
    ①错误的批处理作业或数据操作语言DML
    ②恢复数据定义语言(DDL)后丢失的数据操作,改变表的结构。不能使用闪回表将表倒回结构更改点之前,例如截断表(truncate)操作。
    ③恢复drop时使用了purge选项的表
    ④恢复存在逻辑错误的表
    ⑤恢复被删除的表空间,RMAN可以在被drop的表空间上面执行TSPITR
    ⑥与全库级别闪回相比,表空间时点恢复停留在表空间级别,影响较全库闪回较小。其次,数据库闪回功能需要承担维护闪回日志开启的相关性能开销。

三、TSPITR前提

1、有一套有效全库备份,因为TSPITR这个过程除了复制需要恢复的表空间外,也必须复制system,sysaux和undo表空间
2、需要回复的表空间需要自包含,可以通过TS_PITR_CHECK视图查看自包含信息。表空间上存在约束关系(依赖)表的情形,依赖关系所在的表空间也需要一同做时点恢复(如外键参照,不在同一时点,则违反参照约束)
3、对于索引与数据分离的表空间在时点恢复时,应先删除索引
4、不能恢复数据库当前的缺省表空间
5、不能恢复以下对象:
    ①存在依赖关系的物化视图,分区表等(如果要恢复,先解决依赖)
    ②undo表空间,undo段
    ③sys模式下的对象(如PL/SQL,views, synonyms, users…)

四、测试过程

1、对全库做一个全备(之前做过全库备份并且有效这步可以忽略)

RMAN> backup database format '/u01/rman_bak/all_db_%U.bak';启动 backup 于 2018-07-29 19:19:31
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00001 名称=/u01/app/oracle/oradata/vbox66db/system01.dbf
输入数据文件: 文件号=00002 名称=/u01/app/oracle/oradata/vbox66db/sysaux01.dbf
输入数据文件: 文件号=00003 名称=/u01/app/oracle/oradata/vbox66db/undotbs01.dbf
输入数据文件: 文件号=00004 名称=/u01/app/oracle/oradata/vbox66db/users01.dbf
输入数据文件: 文件号=00005 名称=/u01/app/oracle/oradata/vbox66db/test01.dbf
通道 ORA_DISK_1: 正在启动段 1 于 2018-07-29 19:19:31
通道 ORA_DISK_1: 已完成段 1 于 2018-07-29 19:21:37
段句柄=/u01/rman_bak/all_db_0kt98563_1_1.bak 标记=TAG20180729T191931 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:02:06
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 2018-07-29 19:21:44
通道 ORA_DISK_1: 已完成段 1 于 2018-07-29 19:21:45
段句柄=/u01/rman_bak/all_db_0lt985a1_1_1.bak 标记=TAG20180729T191931 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 2018-07-29 19:21:45RMAN> 

2、创建一个测试表空间

①创建testdb表空间

SYS@vbox66in>create tablespace testdb datafile '/u01/app/oracle/oradata/vbox66db/testdb01.dbf' size 100M autoextend on;表空间已创建。SYS@vbox66in>select name from v$datafile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/vbox66db/system01.dbf
/u01/app/oracle/oradata/vbox66db/sysaux01.dbf
/u01/app/oracle/oradata/vbox66db/undotbs01.dbf
/u01/app/oracle/oradata/vbox66db/users01.dbf
/u01/app/oracle/oradata/vbox66db/test01.dbf
/u01/app/oracle/oradata/vbox66db/testdb01.dbf已选择6行。SYS@vbox66in>SYS@vbox66in>alter user scott default tablespace testdb;用户已更改。

②创建测试表

SCOTT@vbox66in>create table test01 tablespace testdb as select * from emp;表已创建。SCOTT@vbox66in>create table test02 tablespace testdb as select * from dept;表已创建。
SCOTT@vbox66in>alter table test01 add primary key(empno);表已更改。SCOTT@vbox66in>alter table test02 add primary key(deptno);表已更改。SCOTT@vbox66in>alter table test01 add constraints test01_fk foreign key(deptno) references test02(deptno);表已更改。SCOTT@vbox66in>SCOTT@vbox66in>commit;提交完成。SCOTT@vbox66in>

③RMAN备份testdb表空间

RMAN> backup tablespace testdb format '/u01/rman_bak/testdb_%U.bak';启动 backup 于 2018-07-29 21:01:53
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00006 名称=/u01/app/oracle/oradata/vbox66db/testdb01.dbf
通道 ORA_DISK_1: 正在启动段 1 于 2018-07-29 21:01:53
通道 ORA_DISK_1: 已完成段 1 于 2018-07-29 21:01:54
段句柄=/u01/rman_bak/testdb_0mt98b61_1_1.bak 标记=TAG20180729T210153 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:01
完成 backup 于 2018-07-29 21:01:54RMAN> 

④取当前时间,以便之后还原时用

SCOTT@vbox66in>select sysdate from dual;SYSDATE
-------------------
2018-07-29 21:03:31SCOTT@vbox66in>

⑤误操作删除表test01、test02数据(这里是测试,)

SCOTT@vbox66in>truncate table test02;表被截断。SCOTT@vbox66in>truncate table test01;表被截断。SCOTT@vbox66in>select * from test01;未选定行SCOTT@vbox66in>select * from test02;未选定行SCOTT@vbox66in>

⑥建立目录指定辅助库目标,

[oracle@vbox66 ~]$ mkdir -p /tmp/auxdata
[oracle@vbox66 ~]$ ll /tmp/auxdata/
总计 0
[oracle@vbox66 ~]$ ll -d /tmp/auxdata/
drwxr-xr-x 2 oracle oinstall 4096 07-29 21:16 /tmp/auxdata/

⑦做RMAN TSPITR 并指定辅助库目的地

RMAN> recover tablespace testdb until time '2018-07-29 22:11:35' auxiliary destination '/tmp/auxdata';    //这个时间和上面记录的有点出入,因为期间修改过一次,道理上一致
启动 recover 于 2018-07-29 22:15:28
使用通道 ORA_DISK_1
RMAN-05026: 警告: 假定以下表空间集适用于指定的时间点表空间列表要求具有 UNDO 段
表空间 SYSTEM
表空间 UNDOTBS1使用 SID='Fcny' 创建自动实例供自动实例使用的初始化参数:
db_name=VBOX66DB
db_unique_name=Fcny_tspitr_VBOX66DB
compatible=11.2.0.4.0
db_block_size=8192
db_files=200
sga_target=1G
processes=80
db_create_file_dest=/tmp/auxdata
log_archive_dest_1='location=/tmp/auxdata'
#No auxiliary parameter file used启动自动实例 VBOX66DBOracle 实例已启动系统全局区域总计    1068937216 字节Fixed Size                     2260088 字节
Variable Size                281019272 字节
Database Buffers             780140544 字节
Redo Buffers                   5517312 字节
自动实例已创建
对恢复集表空间运行 TRANSPORT_SET_CHECK
TRANSPORT_SET_CHECK 已成功完成内存脚本的内容:
{
# set requested point in time
set until  time "2018-07-29 22:11:35";
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
# archive current online log 
sql 'alter system archive log current';
# avoid unnecessary autobackups for structural changes during TSPITR
sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
}
正在执行内存脚本正在执行命令: SET until clause启动 restore 于 2018-07-29 22:15:43
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=19 设备类型=DISK通道 ORA_AUX_DISK_1: 正在开始还原数据文件备份集
通道 ORA_AUX_DISK_1: 正在还原控制文件
通道 ORA_AUX_DISK_1: 正在读取备份片段 /u01/rman_bak/full_db_0pt98f62_1_1.bak
通道 ORA_AUX_DISK_1: 段句柄 = /u01/rman_bak/full_db_0pt98f62_1_1.bak 标记 = TAG20180729T220804
通道 ORA_AUX_DISK_1: 已还原备份片段 1
通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:00:01
输出文件名=/tmp/auxdata/VBOX66DB/controlfile/o1_mf_fovm0jqt_.ctl
完成 restore 于 2018-07-29 22:15:45sql 语句: alter database mount clone databasesql 语句: alter system archive log currentsql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;内存脚本的内容:
{
# set requested point in time
set until  time "2018-07-29 22:11:35";
plsql <<<-- tspitr_2
declaresqlstatement       varchar2(512);offline_not_needed exception;pragma exception_init(offline_not_needed, -01539);
beginsqlstatement := 'alter tablespace '||  'TESTDB' ||' offline immediate';krmicd.writeMsg(6162, sqlstatement);krmicd.execSql(sqlstatement);
exceptionwhen offline_not_needed thennull;
end; >>>;
# set destinations for recovery set and auxiliary set datafiles
set newname for clone datafile  1 to new;
set newname for clone datafile  3 to new;
set newname for clone datafile  2 to new;
set newname for clone tempfile  1 to new;
set newname for datafile  6 to "/u01/app/oracle/oradata/vbox66db/testdb01.dbf";
# switch all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile  1, 3, 2, 6;
switch clone datafile all;
}
正在执行内存脚本正在执行命令: SET until clausesql 语句: alter tablespace TESTDB offline immediate正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME正在执行命令: SET NEWNAME临时文件 1 在控制文件中已重命名为 /tmp/auxdata/VBOX66DB/datafile/o1_mf_temp_%u_.tmp启动 restore 于 2018-07-29 22:15:56
使用通道 ORA_AUX_DISK_1通道 ORA_AUX_DISK_1: 正在开始还原数据文件备份集
通道 ORA_AUX_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_AUX_DISK_1: 将数据文件 00001 还原到 /tmp/auxdata/VBOX66DB/datafile/o1_mf_system_%u_.dbf
通道 ORA_AUX_DISK_1: 将数据文件 00003 还原到 /tmp/auxdata/VBOX66DB/datafile/o1_mf_undotbs1_%u_.dbf
通道 ORA_AUX_DISK_1: 将数据文件 00002 还原到 /tmp/auxdata/VBOX66DB/datafile/o1_mf_sysaux_%u_.dbf
通道 ORA_AUX_DISK_1: 将数据文件 00006 还原到 /u01/app/oracle/oradata/vbox66db/testdb01.dbf
通道 ORA_AUX_DISK_1: 正在读取备份片段 /u01/rman_bak/full_db_0ot98f25_1_1.bak
通道 ORA_AUX_DISK_1: 段句柄 = /u01/rman_bak/full_db_0ot98f25_1_1.bak 标记 = TAG20180729T220804
通道 ORA_AUX_DISK_1: 已还原备份片段 1
通道 ORA_AUX_DISK_1: 还原完成, 用时: 00:02:25
完成 restore 于 2018-07-29 22:18:21数据文件 1 已转换成数据文件副本
输入数据文件副本 RECID=4 STAMP=982793902 文件名=/tmp/auxdata/VBOX66DB/datafile/o1_mf_system_fovm0ws4_.dbf
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=5 STAMP=982793902 文件名=/tmp/auxdata/VBOX66DB/datafile/o1_mf_undotbs1_fovm0wsx_.dbf
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=6 STAMP=982793902 文件名=/tmp/auxdata/VBOX66DB/datafile/o1_mf_sysaux_fovm0wsb_.dbf内存脚本的内容:
{
# set requested point in time
set until  time "2018-07-29 22:11:35";
# online the datafiles restored or switched
sql clone "alter database datafile  1 online";
sql clone "alter database datafile  3 online";
sql clone "alter database datafile  2 online";
sql clone "alter database datafile  6 online";
# recover and open resetlogs
recover clone database tablespace  "TESTDB", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog;
alter clone database open resetlogs;
}
正在执行内存脚本正在执行命令: SET until clausesql 语句: alter database datafile  1 onlinesql 语句: alter database datafile  3 onlinesql 语句: alter database datafile  2 onlinesql 语句: alter database datafile  6 online启动 recover 于 2018-07-29 22:18:22
使用通道 ORA_AUX_DISK_1正在开始介质的恢复线程 1 序列 22 的归档日志已作为文件 /u01/app/oracle/oradata/arch/1_22_974146828.dbf 存在于磁盘上
归档日志文件名=/u01/app/oracle/oradata/arch/1_22_974146828.dbf 线程=1 序列=22
介质恢复完成, 用时: 00:00:02
完成 recover 于 2018-07-29 22:18:25数据库已打开内存脚本的内容:
{
# make read only the tablespace that will be exported
sql clone 'alter tablespace  TESTDB read only';
# create directory for datapump import
sql "create or replace directory TSPITR_DIROBJ_DPDIR as ''
/tmp/auxdata''";
# create directory for datapump export
sql clone "create or replace directory TSPITR_DIROBJ_DPDIR as ''
/tmp/auxdata''";
}
正在执行内存脚本sql 语句: alter tablespace  TESTDB read onlysql 语句: create or replace directory TSPITR_DIROBJ_DPDIR as ''/tmp/auxdata''sql 语句: create or replace directory TSPITR_DIROBJ_DPDIR as ''/tmp/auxdata''正在执行元数据导出...EXPDP> 启动 "SYS"."TSPITR_EXP_Fcny":  EXPDP> 处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLKEXPDP> 处理对象类型 TRANSPORTABLE_EXPORT/TABLEEXPDP> 处理对象类型 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINTEXPDP> 处理对象类型 TRANSPORTABLE_EXPORT/INDEX_STATISTICSEXPDP> 处理对象类型 TRANSPORTABLE_EXPORT/CONSTRAINT/REF_CONSTRAINTEXPDP> 处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLKEXPDP> 已成功加载/卸载了主表 "SYS"."TSPITR_EXP_Fcny" EXPDP> ******************************************************************************EXPDP> SYS.TSPITR_EXP_Fcny 的转储文件集为:EXPDP>   /tmp/auxdata/tspitr_Fcny_42764.dmpEXPDP> ******************************************************************************EXPDP> 可传输表空间 TESTDB 所需的数据文件:EXPDP>   /u01/app/oracle/oradata/vbox66db/testdb01.dbfEXPDP> 作业 "SYS"."TSPITR_EXP_Fcny" 已于 星期日 7月 29 22:20:31 2018 elapsed 0 00:01:15 成功完成
导出完毕内存脚本的内容:
{
# shutdown clone before import
shutdown clone immediate
# drop target tablespaces before importing them back
sql 'drop tablespace  TESTDB including contents keep datafiles cascade constraints';
}
正在执行内存脚本数据库已关闭
数据库已卸装
Oracle 实例已关闭sql 语句: drop tablespace  TESTDB including contents keep datafiles cascade constraints正在执行元数据导入...IMPDP> 已成功加载/卸载了主表 "SYS"."TSPITR_IMP_Fcny" IMPDP> 启动 "SYS"."TSPITR_IMP_Fcny":  IMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/PLUGTS_BLKIMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/TABLEIMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/CONSTRAINT/CONSTRAINTIMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/INDEX_STATISTICSIMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/CONSTRAINT/REF_CONSTRAINTIMPDP> 处理对象类型 TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLKIMPDP> 作业 "SYS"."TSPITR_IMP_Fcny" 已于 星期日 7月 29 22:21:27 2018 elapsed 0 00:00:10 成功完成
导入完毕内存脚本的内容:
{
# make read write and offline the imported tablespaces
sql 'alter tablespace  TESTDB read write';
sql 'alter tablespace  TESTDB offline';
# enable autobackups after TSPITR is finished
sql 'begin dbms_backup_restore.AutoBackupFlag(TRUE); end;';
}
正在执行内存脚本sql 语句: alter tablespace  TESTDB read writesql 语句: alter tablespace  TESTDB offlinesql 语句: begin dbms_backup_restore.AutoBackupFlag(TRUE); end;删除自动实例
自动实例已删除
已删除辅助实例文件 /tmp/auxdata/VBOX66DB/datafile/o1_mf_temp_fovm638r_.tmp
已删除辅助实例文件 /tmp/auxdata/VBOX66DB/onlinelog/o1_mf_3_fovm5vqb_.log
已删除辅助实例文件 /tmp/auxdata/VBOX66DB/onlinelog/o1_mf_2_fovm5p7q_.log
已删除辅助实例文件 /tmp/auxdata/VBOX66DB/onlinelog/o1_mf_1_fovm5krt_.log
已删除辅助实例文件 /tmp/auxdata/VBOX66DB/datafile/o1_mf_sysaux_fovm0wsb_.dbf
已删除辅助实例文件 /tmp/auxdata/VBOX66DB/datafile/o1_mf_undotbs1_fovm0wsx_.dbf
已删除辅助实例文件 /tmp/auxdata/VBOX66DB/datafile/o1_mf_system_fovm0ws4_.dbf
已删除辅助实例文件 /tmp/auxdata/VBOX66DB/controlfile/o1_mf_fovm0jqt_.ctl
完成 recover 于 2018-07-29 22:21:32RMAN> 

⑧查看表的数据

SYS@vbox66in>alter tablespace testdb online;表空间已更改。SYS@vbox66in>conn scott/tiger;
已连接。
SCOTT@vbox66in>select * from test01;EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    207499 ALLEN      SALESMAN        7698 1981-02-20 00:00:00       1600        300         307521 WARD       SALESMAN        7698 1981-02-22 00:00:00       1250        500         307566 JONES      MANAGER         7839 1981-04-02 00:00:00       2975                    207654 MARTIN     SALESMAN        7698 1981-09-28 00:00:00       1250       1400         307698 BLAKE      MANAGER         7839 1981-05-01 00:00:00       2850                    307782 CLARK      MANAGER         7839 1981-06-09 00:00:00       2450                    107788 SCOTT      ANALYST         7566 1987-04-19 00:00:00       3000                    207839 KING       PRESIDENT            1981-11-17 00:00:00       5000                    107844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         307876 ADAMS      CLERK           7788 1987-05-23 00:00:00       1100                    20EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------7900 JAMES      CLERK           7698 1981-12-03 00:00:00        950                    307902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000                    207934 MILLER     CLERK           7782 1982-01-23 00:00:00       1300                    10已选择14行。SCOTT@vbox66in>select * from test02;DEPTNO DNAME          LOC
---------- -------------- -------------10 ACCOUNTING     NEW YORK20 RESEARCH       DALLAS30 SALES          CHICAGO40 OPERATIONS     BOSTONSCOTT@vbox66in>

此时发现数据已经全部恢复。

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

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

相关文章

乌班图系统的MySQL_乌班图系统mysql主从备份

一&#xff0e;准备系统&#xff1a;ubuntu 14.04.2 LTSMysql: server version 5.5.43两台主机可以互相通信&#xff1a;192.168.1.11 master192.168.1.12 slave二&#xff0e;步骤Master部分&#xff1a;1.创建备份帐号&#xff1a;slave密码&#xff1a;slaveGrant repl…

mysql table alter_MySQL-ALTER TABLE命令学习[20180503]

学习ALTER TABLE删除、添加和修改字段和类型CREATE TABLE alter_tab01(id int,col01 char(20))enginInnoDB default charsetutf8;删除字段ALTER TABLE DROP ;mysql> alter table alter_tab01 dropcol01;Query OK, 0 rows affected (0.01sec)Records: 0 Duplicates: 0 Warnin…

时间戳转换

13 位时间戳转换 1 通过java&#xff0c;如下&#xff1a; public static String timeStamp2Date(String time) {Long timeLong Long.parseLong(time);SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//要转换的时间格式Date date;try {date …

React.Component(V16.8.6)

组件的生命周期 挂载 当组件实例被创建并插入 DOM 中时&#xff0c;其生命周期调用顺序如下&#xff1a; constructor()static getDerivedStateFromProps()render()componentDidMount()componentWillMount() 之后将废弃 更新 当组件的 props 或 state 发生变化时会触发更新。组…

mysql date类型加一个月jdbc_JDBC操作数据库Date类型数据

JDBC操作数据库Date类型数据由于java原生的工具类java.util提供的Date对象与JDBC提供的Date对象并不相同分别是java.util.Date和java.sql.Datejava.sql.Date是java.util.Date的子类所以在进行增删改查部分操作中&#xff0c;不能直接将原生工具类的Date对象直接运用到JDBC中可以…

使用深度学习TensorFlow框架进行图片识别

Apsara Clouder大数据专项技能认证&#xff1a;使用深度学习TensorFlow框架进行图片识别本认证系统的介绍了深度学习的一些基础知识&#xff0c;以及Tensorflow的工作原理。通过阿里云机器学习PAI基于经典的CIFAR-10数据集实现图片识别。学员可以通过本实验&#xff0c;对深度学…

删除开发分支 新建另一个开发分支

//查看状态 git status //查看分支 会有一个分支git branch -d wlh-dev git branch //删除wlh-dev 分支 git branch -d wlh-dev //再次查看分支 git branch //拉代码 git pull //查看状态 git status //新分支创建的同时切换分支 git checkout -b wlh-dev1222 //…

ES语法及-IK分词器

{"query": {"query_string": {"default_field": "title",//全文搜索"query": "器大"}} } "id":1, "title":"Elasticsearch是一个基于Lucene的搜索服务器", "content":&q…

Git仓库配置

安装git依赖包 yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 源码安装 wget https://github.com/git/git/archive/v2.7.4.zip unzip v2.7.4.zip cd git-2.7.4 make prefix/usr/local/git all make prefix/usr/l…

python3 tkinter电子书_Python3 Tkinter-Text

1.创建from tkinter import *rootTk()tText(root)t.pack()root.mainloop()2.添加文本from tkinter import *rootTk()tText(root)t.insert(1.0,0123456789)t.insert(1.0,ABDCEFGHIJ)t.pack()root.mainloop()3.设置添加位置from tkinter import *rootTk()tText(root)for i in ran…

问题 1: 区间交集

问题 1: 区间交集 题目描述 输入 5 个正整数 a1、b1、a2、b2 和 c&#xff0c;如果 c 在区间[a1, b1]内 并且 c 也在区间[a2, b2]内&#xff0c;输出”in”&#xff0c;否则输出”out”。 注意&#xff1a;方括号表示的是闭区间&#xff0c;[a, b]是包括 a 和 b 的。 输入 一行…

python倒三角形粉色填充笔的形状海龟_Python001-Turtle(海龟绘图)详解

一、简介Turtle库是Python语言中的一个绘制图像的函数库。详细文档&#xff1a; https://docs.python.org/zh-cn/3/library/turtle.html二、使用1.画布设置(canvas)(1)设置画布大小turtle.screensize(canvwidthNone, canvheightNone, bgNone)参数分别为画布的宽(单位像素), 高,…

Python 提取数据库(Postgresql)并邮件发送

刚入门python&#xff0c;发现确实是一个不错的语言。业务部门要求将将某一个数据库中的表&#xff0c;定期发送到相关部门人员邮箱。其实整个业务需求很简单&#xff0c;实现起来也不难。但是由于刚入门python&#xff0c;所以还是借鉴了不上网上的内容&#xff0c;也得到了许…

4.Python的不堪一击到初学乍练(列表,元组)

Python(列表,元组) 一.列表 列表初识 列表是python的基础数据类型之一,其他编程语言也有类似的数据类型. 比如JS中的数组, java中的数组等等,它是以[ ]括起来, 每个元素用","隔开并且可以存放各种数据类型.列表相比于字符串,不仅可以存放不同的数据类型,并且可以存放…

【前端工程师手册】说清楚JavaScript中的相等性判断

有哪些判断相等性的方法 JavaScript现在提供了三种方法来判断相等性&#xff1a; &#xff0c;三个等号即严格相等&#xff0c;两个等号即宽松相等Object.is()&#xff0c;ES6中用来判断相等的方法判断相等性的细节 &#xff08;严格相等&#xff09; 被比较的两个数不会进行类…

python多任务编程_python线程的多任务编程

多任务多任务介绍对于人来说&#xff0c;一边听歌&#xff0c;一边跳舞就是多任务。对于电脑&#xff0c;简单的说&#xff0c;同一时间执行多个程序处理数据叫做多任务多任务理解单核CPU单核cpu在处理多任务的时候是根据时间片轮转的方式进行的&#xff0c;比如执行QQ1us&…

列举python的5个数据类型_python公开课|新公布的5个python核心数据类型,这些细节你难道还不不知道吗...

【摘要】在这个科学技术高速发展的时代&#xff0c;越来越多的人都开始选择学习编程软件&#xff0c;那么首先被大家选择的编程软件就是python&#xff0c;也用在各行各业之中&#xff0c;并被大家所熟知&#xff0c;所以也有越来越多的python学习者关注python就业方向问题&…

selenium3 + python - page_source页面源码

前言&#xff1a; 有时候通过元素的属性的查找页面上的某个元素&#xff0c;可能不太好找&#xff0c;这时候可以从源码中爬出想要的信息。selenium的page_source方法可以获取到页面源码。 本次以博客园为例&#xff0c;先爬取页面源码&#xff0c;通过re正则表达式爬取出url&a…

简单分析Guava中RateLimiter中的令牌桶算法的实现

为什么80%的码农都做不了架构师&#xff1f;>>> 令牌桶算法是网络流量整形&#xff08;Traffic Shaping&#xff09;和速率限制&#xff08;Rate Limiting&#xff09;中最常使用的一种算法。典型情况下&#xff0c;令牌桶算法用来控制发送到网络上的数据的数目&am…

gcc oracle mysql_Linux下C语言访问Oracle数据库Demo

前提条件1. Linux环境已经存在&#xff0c;安装好了Oracle本demo 运行环境本地环境 RedHat LINUX AS 4 ,ORACLE 10G本地数据库sid orcl,ip:127.0.0.1,用户名:kingbi&#xff0c;密码&#xff1a;kingbi,表dsd_test. 显示表dsd_test 的所有记录.步骤&#xff1a;(1) 创建表 …