[20171206]rman与truncate.txt

--//昨天下班在回家的路上,突然想起以前遇到的问题,就是truncate表后,rman做备份时会备份多少truncate表的信息,
--//当时在itpub上,还存在讨论,就是rman会备份空block吗?参考链接:http://www.itpub.net/thread-2050864-9-1.html
--//zergduan兄还开了SR,答复如下:

终于有回复了

经过dump的确认,unused block compression 特性是在extent一级,而不是在block级启用:
-------------------------
BEFORE : RelFno: 7, BeginBlock: 128, Flag: 0, First: 50, Free: 63438
BEFORE : FFFFFFFFFFFF0300 0000000000000000 0000000000000000 0000000000000000

AFTER : RelFno: 7, BeginBlock: 128, Flag: 0, First: 1, Free: 63487
AFTER : 0100000000000000 0000000000000000 0000000000000000 0000000000000000

RMAN read that there is one extent to be backup from the table. and I will backup all the blocks. It does not read at BLOCK level.
......
unused block compression doesn't kick in unless all the extents are unused. Granularity can't be changed to a block.
---------------------------

truncate之后,该对象仍然存在,所以,部分extent(比如头部)中仍然有一些metadata,这样的extent被认为非空,会被整体备份出来。
由于truncate 并不删除数据,所以,该块上仍然保留有您测试的字符串等。所以,通过strings命令可以看到这部分数据。

该问题的重点,我想应该是,最后验证了 unused block compression 的粒度是在extent级别,不是block。

--//是否跟rman input memory buffer有关.通过例子来来说明:

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

$ cat d2.txt
drop tablespace t01 including contents and datafiles;
drop tablespace t02 including contents and datafiles;
drop tablespace t03 including contents and datafiles;
drop tablespace t04 including contents and datafiles;
drop tablespace t05 including contents and datafiles;

CREATE TABLESPACE T01 DATAFILE '/mnt/ramdisk/book/T01.dbf' SIZE 6M AUTOEXTEND OFF LOGGING ONLINE EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;
CREATE TABLESPACE T02 DATAFILE '/mnt/ramdisk/book/T02.dbf' SIZE 6M AUTOEXTEND OFF LOGGING ONLINE EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;
CREATE TABLESPACE T03 DATAFILE '/mnt/ramdisk/book/T03.dbf' SIZE 6M AUTOEXTEND OFF LOGGING ONLINE EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;
CREATE TABLESPACE T04 DATAFILE '/mnt/ramdisk/book/T04.dbf' SIZE 6M AUTOEXTEND OFF LOGGING ONLINE EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;
CREATE TABLESPACE T05 DATAFILE '/mnt/ramdisk/book/T05.dbf' SIZE 6M AUTOEXTEND OFF LOGGING ONLINE EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO FLASHBACK ON;

create table t01 tablespace t01 as select rownum id ,to_char(rownum,'FM000000')||lpad('A',26,'A') name from dual connect by level<=1e5;
create table t02 tablespace t02 as select rownum id ,to_char(rownum,'FM000000')||lpad('B',26,'B') name from dual connect by level<=1e5;
create table t03 tablespace t03 as select rownum id ,to_char(rownum,'FM000000')||lpad('C',26,'C') name from dual connect by level<=1e5;
create table t04 tablespace t04 as select rownum id ,to_char(rownum,'FM000000')||lpad('D',26,'D') name from dual connect by level<=1e5;
create table t05 tablespace t05 as select rownum id ,to_char(rownum,'FM000000')||lpad('E',26,'E') name from dual connect by level<=1e5;

alter system checkpoint;
alter system checkpoint;
alter system checkpoint;

2.测试:
--//建立如上表空间:
RMAN> CONFIGURE CHANNEL 1 DEVICE TYPE DISK clear;
old RMAN configuration parameters:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK RATE 128 K;
old RMAN configuration parameters are successfully deleted

RMAN> report schema ;
Report of database schema for database with db_unique_name BOOK
List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    760      SYSTEM               ***     /mnt/ramdisk/book/system01.dbf
2    940      SYSAUX               ***     /mnt/ramdisk/book/sysaux01.dbf
3    1075     UNDOTBS1             ***     /mnt/ramdisk/book/undotbs01.dbf
4    256      USERS                ***     /mnt/ramdisk/book/users01.dbf
5    346      EXAMPLE              ***     /mnt/ramdisk/book/example01.dbf
6    40       TEA                  ***     /mnt/ramdisk/book/tea01.dbf
7    6        T01                  ***     /mnt/ramdisk/book/T01.dbf
8    6        T02                  ***     /mnt/ramdisk/book/T02.dbf
9    6        T03                  ***     /mnt/ramdisk/book/T03.dbf
10   6        T04                  ***     /mnt/ramdisk/book/T04.dbf
11   6        T05                  ***     /mnt/ramdisk/book/T05.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    414      TEMP                 32767       /mnt/ramdisk/book/temp01.dbf

SCOTT@book> truncate table t01 ;
Table truncated.

--//truncate表T01.测试备份看看:
RMAN> backup datafile 7 format '/home/oracle/backup/T1_%U';

Starting backup at 2017-12-06 08:37:56
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=80 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/mnt/ramdisk/book/T01.dbf
channel ORA_DISK_1: starting piece 1 at 2017-12-06 08:37:57
channel ORA_DISK_1: finished piece 1 at 2017-12-06 08:37:58
piece handle=/home/oracle/backup/T1_h7sle5j5_1_1 tag=TAG20171206T083757 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2017-12-06 08:37:58

$ strings -t d T1_h7sle5j5_1_1 | grep 'AAAAA'|wc
   9978   26939  440924

$ strings -t d T1_h7sle5j5_1_1 | grep 'AAAAAA' |head -1
1082678 K 000174AAAAAAAAAAAAAAAAAAAAAAAAAA,
$ strings -t d T1_h7sle5j5_1_1 | grep 'AAAAAA' |tail -1
1581019  009807AAAAAAAAAAAAAAAAAAAAAAAAAA

--//可以确定在备份集合中记录是那些.因为T02表结构是一样的.通过T02也可以确定备份记录的块号.

SCOTT@book> select rowid,t02.* from t02 where id in (174,9807);
ROWID                      ID NAME
------------------ ---------- --------------------------------
AAAWLjAAIAAAACDACt        174 000174BBBBBBBBBBBBBBBBBBBBBBBBBB
AAAWLjAAIAAAAC/AAA       9807 009807BBBBBBBBBBBBBBBBBBBBBBBBBB

SCOTT@book> @ &r/rowid AAAWLjAAIAAAACDACt
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90851          8        131        173  0x2000083           8,131                alter system dump datafile 8 block 131 ;

SCOTT@book> @ &r/rowid AAAWLjAAIAAAAC/AAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90851          8        191          0  0x20000BF           8,191                alter system dump datafile 8 block 191 ;

--//总共191-131+1=61,加上前面3块,就是64块,也就是 64*8192 = 524288,524288/1024=512K.
--//我以前一直的理解truncate后会备份一些块,仅仅备份一个extent,这样仅仅备份64K(8块).而实际上是512K.
--//为什么不是1M,而是512K?????

3.测试:
--//测试备份4个文件作为备份集的情况:

RMAN> backup datafile 7,8,9,10 format '/home/oracle/backup/T1234_%U';

Starting backup at 2017-12-06 08:53:53
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=94 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/mnt/ramdisk/book/T01.dbf
input datafile file number=00008 name=/mnt/ramdisk/book/T02.dbf
input datafile file number=00009 name=/mnt/ramdisk/book/T03.dbf
input datafile file number=00010 name=/mnt/ramdisk/book/T04.dbf
channel ORA_DISK_1: starting piece 1 at 2017-12-06 08:53:54
channel ORA_DISK_1: finished piece 1 at 2017-12-06 08:53:55
piece handle=/home/oracle/backup/T1234_h8sle6h2_1_1 tag=TAG20171206T085353 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2017-12-06 08:53:55

$ strings -t d T1234_h8sle6h2_1_1 | grep 'AAAAA' |head -1
4179254 K 000174AAAAAAAAAAAAAAAAAAAAAAAAAA,
$ strings -t d T1234_h8sle6h2_1_1 | grep 'AAAAA' |tail -1
4677595  009807AAAAAAAAAAAAAAAAAAAAAAAAAA
$ strings -t d T1234_h8sle6h2_1_1 | grep 'AAAAA' |wc
   9978   26939  440924

--//与备份1个数据文件一样,不展开分析了.本来还想测试备份5个数据文件的.
--//因为备份1个文件仅仅备份512K(在truncate后),我开始的理解应该是1M.why?
--//不过我的理解还是和rman input memory buffer有关.

4.测试:
SCOTT@book> drop tablespace t01 including contents and datafiles;
Tablespace dropped.

CREATE TABLESPACE t01 DATAFILE
  '/mnt/ramdisk/book/T01.dbf' SIZE 6M AUTOEXTEND OFF
LOGGING
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
--//建立UNIFORM SIZE 1M.

create table t01 tablespace t01 as select rownum id ,to_char(rownum,'FM000000')||lpad('A',26,'A') name from dual connect by level<=1e5;

SCOTT@book> create table t01 tablespace t01 as select rownum id ,to_char(rownum,'FM000000')||lpad('A',26,'A') name from dual connect by level<=1e5;
Table created.

SCOTT@book> truncate table t01 ;
Table truncated.

RMAN> backup datafile 7 format '/home/oracle/backup/T1x_%U';
Starting backup at 2017-12-06 09:02:19
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/mnt/ramdisk/book/T01.dbf
channel ORA_DISK_1: starting piece 1 at 2017-12-06 09:02:19
channel ORA_DISK_1: finished piece 1 at 2017-12-06 09:02:20
piece handle=/home/oracle/backup/T1x_h9sle70r_1_1 tag=TAG20171206T090219 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2017-12-06 09:02:20

$ strings -t d T1x_h9sle70r_1_1 | grep 'AAAAA' |wc
 100000  270040 4424269

$ strings -t d T1x_h9sle70r_1_1 | grep 'AAAAA' |head -1
1090870 K 000174AAAAAAAAAAAAAAAAAAAAAAAAAA,
$ strings -t d T1x_h9sle70r_1_1 | grep 'AAAAA' |tail -1
6021081 c< 099859AAAAAAAAAAAAAAAAAAAAAAAAAA

$ strings -t d T1x_h9sle70r_1_1 | grep 'AAAAA' |wc
 100000  270040 4424269
--//昏,全部备份.看来没有这么简单.

SCOTT@book> drop table t01 purge ;
Table dropped.

SCOTT@book> create table t01 tablespace t01 as select rownum id ,to_char(rownum,'FM000000')||lpad('A',26,'A') name from dual connect by level<=1e5;
Table created.

SCOTT@book> select rowid,t01.* from t01 where id in (174,99859);
ROWID                      ID NAME
------------------ ---------- --------------------------------
AAAWLuAAHAAAACEACt        174 000174AAAAAAAAAAAAAAAAAAAAAAAAAA
AAAWLuAAHAAAALdAAA      99859 099859AAAAAAAAAAAAAAAAAAAAAAAAAA

SCOTT@book> @ &r/rowid AAAWLuAAHAAAACEACt
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90862          7        132        173  0x1C00084           7,132                alter system dump datafile 7 block 132 ;

SCOTT@book> @ &r/rowid AAAWLuAAHAAAALdAAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90862          7        733          0  0x1C002DD           7,733                alter system dump datafile 7 block 733 ;

SCOTT@book> column PARTITION_NAME noprint
SCOTT@book> select * from dba_extents where segment_name='T01';
OWNER  SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
------ ------------ ------------ --------------- --------- ---------- ---------- ---------- ---------- ------------
SCOTT  T01          TABLE        T01                     0          7        128    1048576        128            7
SCOTT  T01          TABLE        T01                     1          7        256    1048576        128            7
SCOTT  T01          TABLE        T01                     2          7        384    1048576        128            7
SCOTT  T01          TABLE        T01                     3          7        512    1048576        128            7
SCOTT  T01          TABLE        T01                     4          7        640    1048576        128            7

--//难道truncate后rman备份会8个extents吗?

5.测试:

SCOTT@book> drop tablespace t01 including contents and datafiles;
Tablespace dropped.

CREATE TABLESPACE t01 DATAFILE
  '/mnt/ramdisk/book/T01.dbf' SIZE 21M AUTOEXTEND OFF
LOGGING
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
--//建立UNIFORM SIZE 1M.

create table t01 tablespace t01 as select rownum id ,to_char(rownum,'FM000000')||lpad('A',26,'A') name from dual connect by level<=4e5;

SCOTT@book> select * from dba_extents where segment_name='T01';
OWNER  SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME EXTENT_ID    FILE_ID   BLOCK_ID      BYTES     BLOCKS RELATIVE_FNO
------ ------------ ------------ --------------- --------- ---------- ---------- ---------- ---------- ------------
SCOTT  T01          TABLE        T01                     0          7        128    1048576        128            7
SCOTT  T01          TABLE        T01                     1          7        256    1048576        128            7
SCOTT  T01          TABLE        T01                     2          7        384    1048576        128            7
SCOTT  T01          TABLE        T01                     3          7        512    1048576        128            7
SCOTT  T01          TABLE        T01                     4          7        640    1048576        128            7
SCOTT  T01          TABLE        T01                     5          7        768    1048576        128            7
SCOTT  T01          TABLE        T01                     6          7        896    1048576        128            7
SCOTT  T01          TABLE        T01                     7          7       1024    1048576        128            7
SCOTT  T01          TABLE        T01                     8          7       1152    1048576        128            7
SCOTT  T01          TABLE        T01                     9          7       1280    1048576        128            7
SCOTT  T01          TABLE        T01                    10          7       1408    1048576        128            7
SCOTT  T01          TABLE        T01                    11          7       1536    1048576        128            7
SCOTT  T01          TABLE        T01                    12          7       1664    1048576        128            7
SCOTT  T01          TABLE        T01                    13          7       1792    1048576        128            7
SCOTT  T01          TABLE        T01                    14          7       1920    1048576        128            7
SCOTT  T01          TABLE        T01                    15          7       2048    1048576        128            7
SCOTT  T01          TABLE        T01                    16          7       2176    1048576        128            7
SCOTT  T01          TABLE        T01                    17          7       2304    1048576        128            7
SCOTT  T01          TABLE        T01                    18          7       2432    1048576        128            7
19 rows selected.

SCOTT@book> truncate table t01 ;
Table truncated.

RMAN> backup datafile 7 format '/home/oracle/backup/T1y_%U';
Starting backup at 2017-12-06 09:17:52
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/mnt/ramdisk/book/T01.dbf
channel ORA_DISK_1: starting piece 1 at 2017-12-06 09:17:52
channel ORA_DISK_1: finished piece 1 at 2017-12-06 09:17:53
piece handle=/home/oracle/backup/T1y_hbsle7u0_1_1 tag=TAG20171206T091752 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2017-12-06 09:17:53

$ strings -t d T1y_hbsle7u0_1_1 | grep 'AAAAA' |head -1
1090870 K 000174AAAAAAAAAAAAAAAAAAAAAAAAAA,
$ strings -t d T1y_hbsle7u0_1_1 | grep 'AAAAA' |tail -1
9445337 [L 169075AAAAAAAAAAAAAAAAAAAAAAAAAA
$ strings -t d T1y_hbsle7u0_1_1 | grep 'AAAAA' |wc
 169242  456998 7484144

SCOTT@book> drop table t01 purge ;
Table dropped.

SCOTT@book> create table t01 tablespace t01 as select rownum id ,to_char(rownum,'FM000000')||lpad('A',26,'A') name from dual connect by level<=4e5;
Table created.

SCOTT@book> select rowid,t01.* from t01 where id in (174,169075,169242);
ROWID                      ID NAME
------------------ ---------- --------------------------------
AAAWL0AAHAAAACEACt        174 000174AAAAAAAAAAAAAAAAAAAAAAAAAA
AAAWL0AAHAAAAR/AAA     169075 169075AAAAAAAAAAAAAAAAAAAAAAAAAA
AAAWL0AAHAAAAR/ACn     169242 169242AAAAAAAAAAAAAAAAAAAAAAAAAA

SCOTT@book> @ &r/rowid AAAWL0AAHAAAACEACt
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90868          7        132        173  0x1C00084           7,132                alter system dump datafile 7 block 132 ;

SCOTT@book> @ &r/rowid AAAWL0AAHAAAAR/AAA
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90868          7       1151          0  0x1C0047F           7,1151               alter system dump datafile 7 block 1151

SCOTT@book> @ &r/rowid AAAWL0AAHAAAAR/ACn
    OBJECT       FILE      BLOCK        ROW ROWID_DBA            DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- -------------------- ----------------------------------------
     90868          7       1151        167  0x1C0047F           7,1151               alter system dump datafile 7 block 1151
       
--//昏,确实是8个extents.
--//也就是truncate后rman备份信息的量最大是8个extents.有点小疑问,我的测试使用的磁盘空间是连续的,如果离散是否也是这样,不测试了浪费时间.

[20171206]rman与truncate.txt的更多相关文章

  1. [20171206]rman与truncate2.txt

    [20171206]rman与truncate2.txt --//上午测试发现truncate的表在做rman备份时还要做8个extents的备份.--//不知道自己的猜测是否正确,选择一个使用UNI ...

  2. [20171130]关于rman备份疑问.txt

    [20171130]关于rman备份疑问.txt --//前面测试太乱,重新做一些rman as copy相关测试. 1.环境:SCOTT@book> @ &r/ver1PORT_STR ...

  3. [20171031]rman xxx Failure.txt

    [20171031]rman xxx Failure.txt --//简单测试 List Failure, Advise Failure and Repair Failure命令在11g下,也许以后工 ...

  4. [20190517]rman tape compressed.txt

    [20190517]rman tape compressed.txt --//前一段测试rman选择压缩备份时,如果备份单个数据文件小于64M-3*8K时,先建立大小64M文件,最后会回收到自己的备份 ...

  5. oracle数据库rman备份计划及恢复

    1.rman完全恢复的前提条件:历史的datafile,controlfile和spfile备份,加上完整的archivelog和完好的redolog. 2.rman备份脚本: a.RMAN 0级备份 ...

  6. 转 rman 恢复报错

    ###sample 1   原因是新库起了FRA 区,FRA 区的旧文件属于之前的归档日志文件产生,这样会导致无法识别的问题. 解决办法,清空FRA或者恢复时候不启用FRA. RMAN RESTORE ...

  7. 官方文档 恢复备份指南二 Getting Started with RMAN

    本章对RMAN进行基本的熟悉和了解   1.Overview of the RMAN Environment    RMAN运行时需要的最小环境:      target database       ...

  8. RMAN详细教程(二):备份、检查、维护、恢复

    RMAN详细教程(一):基本命令代码 一.创建增量备份 增量备份级别为0-4,但为方便备份管理,oracle建议只限于0级和1级. 1.差异增量备份(differential incremental ...

  9. Oracle自动备份数据

    一. Oracle自动备份单表一个月数据 方式一:三步处理(建批处理文件,写sql文件,设置任务计划) 1. 第一步:建立一个批处理文件 @echo off Set OrclSid=orcl Set ...

随机推荐

  1. Python模块——PrettyTable 模块

    简介 PrettyTable 是python中的一个第三方库,可用来生成美观的ASCII格式的表格,十分实用. 安装 pip install prettytable 示例 从已有文件创建 CSV fr ...

  2. 使用 Portainer UI 管理 Docker 主机

    Docker 使用命令行的方式来管理有时候并没有那么直观,可以使用 Portainer 的 UI 来管理 Docker 主机和 Docker Swarm 集群. 安装 Portainer 环境:cen ...

  3. 通向全栈之路(6)—无密码ssh连接

    (1)在用户目录下新增一个 .ssh文件 mkdir .ssh (2)生成公钥.私钥 ssh-keygen -t rsa -b 4096 -C "mail@xxx.com" (3) ...

  4. Repeater 控件的嵌套使用

      Repeater 控件的嵌套使用   ItemDataBound:数据绑定的时候(正在进行时)发生,多用在Repeater控件嵌套,对子Repeater控件进行数据绑定及模板列中统计列的计算处理等 ...

  5. MathJax: 让前端支持数学公式

    文章图片存储在GitHub,网速不佳的朋友,请看<MathJax:让前端支持数学公式> 或者 来我的技术小站 godbmw.com 1. 必须要说 1.1 开发背景 博主使用Vue开发的个 ...

  6. Spring基于纯注解方式的使用

    经过上篇xml与注解混合方式,对注解有了简单额了解,上篇的配置方式极大地简化了xml中配置,但仍有部分配置在xml中进行,接下来我们就通过注解的方式将xml中的配置用注解的方式实现,并最终去掉xml配 ...

  7. SQL Server 连接(内连接,外连接,完全连接,交叉连接,联合)

    1.连接 有时候需要将连个表的数据合并成一个结果集来显示.为了解决这个问题,就需要用到JOIN连接. 2.内部连接 内部连接根据一个或几个共同的字段将记录匹配到一起.内部连接仅仅返回那些存在字段匹配的 ...

  8. csharp: sum columns or rows in a dataTable

    DataTable dt = setData(); // Sum rows. //foreach (DataRow row in dt.Rows) //{ // int rowTotal = 0; / ...

  9. 【读书笔记】iOS-自定义URL Scheme注意事项

    如果两个不同的应用注册了同样的URL Scheme,那么后安装的应用会响应符合这种协议格式的URL. 如果你的应用的iPhone和iPad版是各自独立的(即不是Universal类型的),那么你就不应 ...

  10. React 入门学习笔记整理(二)—— JSX简介与语法

    先看下这段代码: import React from 'react'; //最终渲染需要调用ReactDOM库,将jsx渲染都页面中 import ReactDOM from 'react-dom'; ...