本文记录在Windows Server 2012 R2上安装Oracle Enterprise Linux 6.4以及使用RMAN进行进行异机恢复的过程。

Windows服务器增加Hyper-V功能

  1. 打开服务器管理器
  2. 在仪表板界面,添加角色和功能
  3. 找到Hyper-V之后下一步直至安装完成

执行安装Linux

  1. 打开Hyper-V管理器

  2. 点击右边栏"虚拟交换机管理器",创建一个内部类型的虚拟交换机(相当于VMware的NAT)

  3. 创建完成后,打开控制面板的网络连接,可以看到我们新建的虚拟机交换机。

  4. 打开虚拟适配器的属性,将"Internet 协议版本4"的属性设置成固定地址。

  5. 操作-> 新建 -> 虚拟机,将虚拟交换机选成上面新建的NAT,加载iso文件到光驱。

  6. 配置项选完以后,重新启动就从光驱引导开始安装了,这里面的安装步骤就省略了。

  7. 安装完成后,再次进入系统可能发现网卡硬件不存在,如果安装了桌面那么鼠标也不能使用。原因是HyperV相对其他虚拟机软件器驱动程序没有那么丰富。要实现这些虚拟硬件需要额外安装微软的Linux Integration Services,而且此软件对于6.4版本只支持Redhat和CentOS,幸好Oracle Enterprise Linux版本支持用Redhat内核启动。

  8. 修改/boot/grub/grub.conf文件,配置default=1使默认从Redhat内核启动,同时可以参照另一篇文章关闭numa,避免启动时黑屏。如果是GUI界面的话,可以通过点操作-> 触发一个Ctrl+Alt+Delete到桌面,选择Cancel,然后就可以使用键盘按C打开Computer,后面可以打开一个路径并且选择File中的open in terminal从而打开shell终端进行修改了。配置完成以后重启一下系统。

  9. 从微软的网站下载相应的Linux Integration Services,通过媒体-> DVD驱动器-> 插入下载的iso文件,用上文中的Ctrl+Alt+Delete方式使用键盘打开shell,进去光盘路径找到REDHAT64,使用./install.sh安装LIS,安装完成之后再重启一下系统。

  10. 再次进入系统后,就可以使用鼠标了,并且网卡硬件也加载了。然后配置/etc/sysconfig/network-scripts/ifcfg-eth1文件(因为我配置了两块网卡,用eth1连接的NAT地址)。

DEVICE=eth1
TYPE=Ethernet
UUID=9a98e87b-126d-4487-97ca-xxxxx15d7699
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
HWADDR=00:15:5D:58:09:04
IPADDR=192.168.5.2
NETMASK=255.255.255.0
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"

111111111111111121111111111111111. 关闭防火墙和SELINUX,具体方法请搜索。

111111111111111121111111111111111. 然后重启下网络,service network restart,使用putty测试是否能够使用ssh 192.168.5.2登陆。

增加硬盘

  1. 在Hyper-V管理器右侧操作栏选择新建-> 硬盘,为了提高性能使用固定容量的硬盘
  2. 关闭虚拟机,然后邮件虚拟机的设置项将硬盘添加到IDE控制器下面
  3. 登录系统,可以使用fdisk -l查看到新挂载的硬盘

  1. 格式化sdb成8e格式LVM形式

  1. 解决'Partition 1 does not start on physical sector boundary.'参考问答

  2. 使用partprobe使分区表生效

  3. 使用pvcreate将分区转换为LVM可用的分区

  4. 使用vgcreate创建卷组,后面可以使用vgextend进行扩展

  5. 使用lvcreate创建逻辑分区,可用lvextend进行扩展,且使用-l一次添加所有的extend

  6. 进行逻辑卷格式化并挂载。

可以发现Filesystem栏的命名方式都为"/dev/mapper"加上"[vgname]-[lvname]"。

11. 编辑/etc/fstab,使挂载持久化。

  1. 可以通过touch一个文件,然后重启系统查看文件情况。
  2. 因为发现后面发现硬盘空间不够,这里采用扩展方式增加硬盘空间。

  1. 使用fdisk /dev/sdb将新增的容量分区到/dev/sdb2,按要求重启一次

  1. 格式化为ext4格式 mkfs -t ext4 /dev/sdb2
  2. 使用vgextend将pv扩展到vg

  1. 使用lvextend将新增容量都放到lv中

  1. 使用resize2fs使新增空间可用

可以参考网上文档,Linux LVM硬盘管理及LVM扩容

安装Oracle 12C Database

  • 使用pscp将安装文件'linuxamd64_12102_database_1of2.zip'和'linuxamd64_12102_database_2of2.zip'上传至虚拟机
  • 依次解压两个zip文件,可以将所有的安装文件解压至database目录
  • 先将NAT的地址放到/etc/hosts文件
[root@testbak u1]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.5.2 testbak.mytest.net testbak
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
  • 使用/sbin/sysctl -p使设置生效。
  • 添加以下内容至"/etc/security/limits.conf"
  • 手工安装以下包
yum install binutils -y
yum install compat-libcap1 -y
yum install compat-libstdc++-33 -y
yum install compat-libstdc++-33.i686 -y
yum install gcc -y
yum install gcc-c++ -y
yum install glibc -y
yum install glibc.i686 -y
yum install glibc-devel -y
yum install glibc-devel.i686 -y
yum install ksh -y
yum install libgcc -y
yum install libgcc.i686 -y
yum install libstdc++ -y
yum install libstdc++.i686 -y
yum install libstdc++-devel -y
yum install libstdc++-devel.i686 -y
yum install libaio -y
yum install libaio.i686 -y
yum install libaio-devel -y
yum install libaio-devel.i686 -y
yum install libXext -y
yum install libXext.i686 -y
yum install libXtst -y
yum install libXtst.i686 -y
yum install libX11 -y
yum install libX11.i686 -y
yum install libXau -y
yum install libXau.i686 -y
yum install libxcb -y
yum install libxcb.i686 -y
yum install libXi -y
yum install libXi.i686 -y
yum install make -y
yum install sysstat -y
yum install unixODBC -y
yum install unixODBC-devel -y
  • 创建用户和组
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
useradd -u 54321 -g oinstall -G dba,oper oracle
  • 修改"/etc/security/limits.d/90-nproc.conf"文件,修改后内容如下
* - nproc 16384
root soft nproc unlimited
  • 创建安装路径
mkdir -p /u1/app/oracle/product/12.1.0.2/db_1
chown -R oracle:oinstall /u1
chmod -R 775 /u1
  • 在"/home/oracle/.bash_profile"中增加以下内容
export TMP=/tmp
export TMPDIR=$TMP export ORACLE_HOSTNAME=testdb
export ORACLE_UNQNAME=TESTDB
export ORACLE_BASE=/u1/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0.2/db_1
export ORACLE_SID=TESTDB export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
  • 因为是虚拟机,直接使用虚拟机管理连接登陆图形界面,使用oracle用户执行./runInstaller,就可以出现图形化安装界面。

  • 采用rman方式恢复数据库,所以只安装数据库软件。

  • 安装完成后可以通过"/u1/app/oraInventory/logs/installActions[date].log"查看安装日志

RMAN恢复数据库

准备备份文件

这部分内容参考"[三思笔记]RMAN管理ORACLE RAC数据库的备份与恢复"

  • 因为生产的RMAN备份在Linux服务器上,可以在Linux上mount本地windows的共享目录,然后把rman备份传输过来
# mount -t cifs -o username="administrator",password="test" //192.168.1.90/iso /db/windows
# cd /db/windows
# ls
linuxamd64_12102_database_1of2.zip linuxamd64_12102_database_2of2.zip lis4-0-11.iso
  • 使用find命令将指定时间范围内的备份文件拷贝到windows上,然后再用pscp上传至虚拟机
find ./ -mtime -6 -exec cp -f {} /db/windows/ \;
  • 使用awk和sort查看备份文件是否缺失
ls -l | awk -F"_" '{print $NF}' | sort

RMAN恢复

  • 连接rman并启动实例,首次可以在没有Pfile的情况下启动。
[oracle@testbak oracle]$ rman target /

Recovery Manager: Release 12.1.0.2.0 - Production on Thu Aug 11 09:19:54 2016

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

connected to target database (not started)

RMAN> startup nomount

startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u1/app/oracle/product/12.1.0.2/db_1/dbs/initTESTDB.ora' starting Oracle instance without parameter file for retrieval of spfile
Oracle instance started Total System Global Area 1073741824 bytes Fixed Size 2932632 bytes
Variable Size 293601384 bytes
Database Buffers 771751936 bytes
Redo Buffers 5455872 bytes
  • 创建一个数据路径"$ORACLE_BASE/oradata/TESTDB",从备份集中恢复spfile并保存成pfile
restore spfile to pfile '/u1/app/oracle/oradata/pfile.ora' from '/u1/rmanbak/ctl_file_919512140_1_8223';
  • 手动修改导出的pfile文件,删除不符合单实例的内容。同时新建"/u1/app/oracle/fast_recovery_area/TESTDB/archivelog"和"/u1/app/oracle/admin/TESTDB/adump"目录
留下所有的*开头的行,其余的删除
另外删除*.cluster_database=TRUE
*.audit_file_dest='/u1/app/oracle/admin/TESTDB/adump'
*.audit_trail='db'
*.compatible='12.1.0.2.0'
*.control_files='/u1/app/oracle/oradata/TESTDB/control01.ctl','/u1/app/oracle/oradata/TESTDB/control02.ctl'#Restore Controlfile
*.db_block_size=8192
*.db_domain=''
*.db_files=2000
*.db_name='TESTDB'
*.db_recovery_file_dest='/u1/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=21474836480
*.diagnostic_dest='/u1/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=TESTDBXDB)'
*.instance_number=2
*.log_archive_dest_1='LOCATION=/u1/app/oracle/fast_recovery_area/TESTDB/archivelog'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=15000
*.pga_aggregate_target=500m
*.processes=1000
*.remote_login_passwordfile='exclusive'
*.sga_target=1500m
  • 使用sqlplus环境,通过上面的pfile创建spfile,并重启oracle到nomount状态
[oracle@testbak oracle]$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Thu Aug 11 10:47:07 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> create spfile from pfile='/u1/pfile.ora'; File created. SQL> startup nomount
ORACLE instance started. Total System Global Area 1577058304 bytes
Fixed Size 2924832 bytes
Variable Size 788532960 bytes
Database Buffers 771751936 bytes
Redo Buffers 13848576 bytes
  • 设置DBID,并恢复control文件
[oracle@testbak oracle]$ rman target /

Recovery Manager: Release 12.1.0.2.0 - Production on Thu Aug 11 11:11:48 2016

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

connected to target database: TESTDB (not mounted)

RMAN> set dbid=1234567890

executing command: SET DBID

RMAN> restore controlfile from '/u1/rmanbak/ctl_file_919512140_1_8223';

Starting restore at 11-AUG-16
using channel ORA_DISK_1 channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/u1/app/oracle/oradata/TESTDB/control01.ctl
output file name=/u1/app/oracle/oradata/TESTDB/control02.ctl
Finished restore at 11-AUG-16
  • 将数据库启动到mount状态
RMAN> alter database mount;

Statement processed
released channel: ORA_DISK_1
  • 注册rman文件备份集,使用shell脚本快速生成catalog命令
 for file in `ls -1`; do echo " catalog backuppiece '/u1/rmanbak/${file}';"; done

例子:
RMAN>
cataloged backup piece
backup piece handle=/u1/rmanbak/db_bak_lev1_919512113_1_8214 RECID=8305 STAMP=919597658
  • 删除之前配置的默认通道
RMAN>  configure channel 1 device type disk clear;

using target database control file instead of recovery catalog
old RMAN configuration parameters are successfully deleted RMAN> configure channel 2 device type disk clear; old RMAN configuration parameters are successfully deleted RMAN> configure device type disk clear; RMAN configuration parameters are successfully reset to default value
  • 获取源数据库中数据文件的路径
SQL> select file#,name from v$datafile;

FILE# NAME
----- ------------------------------------------------------------
1 +DATADG/TESTDB/system01.dbf
2 +DATADG/TESTDB/system02.dbf
3 +DATADG/TESTDB/sysaux01.dbf
4 +DATADG/TESTDB/undotbs01.dbf
5 +DATADG/TESTDB/undotbs02.dbf
6 +DATADG/TESTDB/users01.dbf SQL> select FILE#,NAME from v$tempfile; FILE# NAME
----- ------------------------------------------------------------
1 +DATADG/TESTDB/temp01.dbf
2 +DATADG/TESTDB/testtemp_01.dbf SQL> select member from v$logfile; MEMBER
--------------------------------------------------
+DATADG/TESTDB/redo02.log
+DATADG/TESTDB/redo01.log
+DATADG/TESTDB/redo03.log
+DATADG/TESTDB/redo04.log
  • 使用awk生成set newname命令
cat filenatest.txt | awk -F"[/+]" '{print "set newname for datafile "$1" to '\''/u1/app/oracle/oradata/TESTDB/"$NF"'\'';"}'
  • 编写如下脚本,然后执行数据还原。
rman cmdfile=restore.rman
restore.rman内容:
connect target sys/oracle
run{
set newname for datafile 1 to '/u1/app/oracle/oradata/TESTDB/system01.dbf';
set newname for datafile 2 to '/u1/app/oracle/oradata/TESTDB/system02.dbf';
set newname for datafile 3 to '/u1/app/oracle/oradata/TESTDB/sysaux01.dbf';
set newname for datafile 4 to '/u1/app/oracle/oradata/TESTDB/undotbs01.dbf';
set newname for datafile 5 to '/u1/app/oracle/oradata/TESTDB/undotbs02.dbf';
set newname for datafile 6 to '/u1/app/oracle/oradata/TESTDB/users01.dbf';
set newname for tempfile 1 to '/u1/app/oracle/oradata/TESTDB/temp01.dbf';
set newname for tempfile 2 to '/u1/app/oracle/oradata/TESTDB/testtemp_01.dbf';
restore database;
switch datafile all;
switch tempfile all;
}

switch命令作用是将新的数据文件路径写入control文件,用法可以参考rman备份恢复命令之switch

命令执行过程中会有如下提示:

input datafile copy RECID=56 STAMP=919619004 file name=/u1/app/oracle/oradata/TESTDB/system01.dbf

renamed tempfile 1 to /u1/app/oracle/oradata/TESTDB/temp01.dbf in control file

  • 然后使用recover database命令进行完全恢复
$ rman target /
RMAN > recover database;
--可以看到在使用lev1备份进行增量恢复
channel ORA_DISK_1: reading from backup piece /u1/rmanbak/db_bak_lev1_919512036_1_8202
channel ORA_DISK_1: piece handle=/u1/rmanbak/db_bak_lev1_919512036_1_8202 tag=DB_BAK_LEV1
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting incremental datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
destination for restore of datafile 00012: /u1/app/oracle/oradata/TESTDB/testdata_l1_02.dbf
destination for restore of datafile 00024: /u1/app/oracle/oradata/TESTDB/testdata_t30_01.dbf
destination for restore of datafile 00036: /u1/app/oracle/oradata/TESTDB/test_idx_t10_01
destination for restore of datafile 00038: /u1/app/oracle/oradata/TESTDB/testidx_t30_01.dbf
  • 过程中遇到错误,原因是只复制了备份机,没有应用源数据库的最新归档和Online redo文件,只能进行不完全恢复
unable to find archived log
archived log thread=2 sequence=7201
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR TESTSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 08/11/2016 20:27:33
RMAN-06054: media recovery requesting unknown archived log for thread 2 with sequence 7201 and starting SCN of 816203242
  • 现在数据文件和临时文件已经通过rman switch更新了位置,还有重做日志文件需要修改controlfile修改日志文件的路径
SQL> select member from v$logfile;

MEMBER
------------------------------------------------------------
+DATADG/TESTDB/redo02.log
+DATADG/TESTDB/redo01.log
+DATADG/TESTDB/redo03.log
+DATADG/TESTDB/redo04.log SQL> alter database backup controlfile to trace; Database altered. -- 从alert_TESTDB.log可以获取trace文件的位置
Fri Aug 12 08:49:26 2016
alter database backup controlfile to trace
Fri Aug 12 08:49:26 2016
Backup controlfile written to trace file /u1/app/oracle/diag/rdbms/testdb/TESTDB/trace/TESTDB_ora_9049.trc
Completed: alter database backup controlfile to trace -- 在新文件中修改下LOGFILE的位置,并去除RMAN的信息即可。
SQL> CREATE CONTROLFILE REUSE DATABASE "TESTDB" RESETLOGS ARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 32
MAXLOGHISTORY 4672
2 3 4 LOGFILE
GROUP 1 '/u1/app/oracle/oradata/TESTDB/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u1/app/oracle/oradata/TESTDB/redo02.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u1/app/oracle/oradata/TESTDB/system01.dbf',
'/u1/app/oracle/oradata/TESTDB/system02.dbf',
'/u1/app/oracle/oradata/TESTDB/sysaux01.dbf',
'/u1/app/oracle/oradata/TESTDB/undotbs01.dbf',
'/u1/app/oracle/oradata/TESTDB/undotbs02.dbf',
'/u1/app/oracle/oradata/TESTDB/users01.dbf',
CHARACTER SET AL32UTF8
;
64 65 66
Control file created. -- 新增一组日志文件
SQL> alter database add logfile thread 2
2 group 3 '/u1/app/oracle/oradata/TESTDB/redo03.log' size 50m,
3 group 4 '/u1/app/oracle/oradata/TESTDB/redo04.log' size 50m;
  • 使用resetlogs打开数据库
SQL> alter database open resetlogs;

Database altered.
  • 因为RMAN不会重建临时表空间,需要手动建一下临时表空间
SQL> alter tablespace temp add tempfile '/u1/app/oracle/oradata/TESTDB/temp01.dbf' size 50m;

Tablespace altered.

SQL> alter tablespace TESTTEMP add tempfile '/u1/app/oracle/oradata/TESTDB/testtemp_01.dbf' size 50m;

Tablespace altered.
  • 清除未使用的redo日志组,其实正好是上面添加的redo文件
SQL> select thread#,status,enabled from v$thread;

THREAD# STATUS     ENABLED
------- ---------- ----------
1 OPEN PUBLIC
2 CLOSED PUBLIC SQL> col group for 99
SQL> select group#,thread#,archived,status from v$log; GROUP# THREAD# ARC STATUS
---------- ------- --- ----------
1 1 YES INACTIVE
2 1 NO CURRENT
3 2 YES INACTIVE
4 2 YES INACTIVE SQL> alter database disable thread 2; Database altered. SQL> alter database drop logfile group 3; Database altered. SQL> alter database drop logfile group 4; Database altered.
  • 删除多余的undo文件
SQL> select name from v$tablespace where name like 'UNDO%';

NAME
------------------------------
UNDOTBS1
UNDOTBS2 SQL> show parameter undo_tablespace; NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace string UNDOTBS1
SQL> drop tablespace undotbs2 including contents and datafiles; Tablespace dropped.

至此整套数据库环境搭建和数据恢复完成

--EOF--

Hyper-V安装Oracle Linux6_4 Oracle db 12c并使用rman做异机恢复的更多相关文章

  1. Oracle之使用rman进行异机恢复测试记录

    本次测试目的是从生产数据库导出rman备份然后在测试数据库恢复 1,拷贝备份至相应目录 2,进入rman rman target \ 3,关闭数据库 shutdown 4,以nomount模式启动数据 ...

  2. Oracle 11g 异机恢复参考文档

      原库 目标库 操作系统 CentOS 6.4 CentOS 6.4 主机名 sht-sgmhadoopnn-01 sht-sgmhadoopnn-02 IP 172.16.101.55 172.1 ...

  3. Oracle 单实例 迁移到 RAC 实例 -- 使用RMAN 异机恢复

    Oracle 官网有关单实例迁移到RAC的一个步骤说明: How to Convert 10g Single-Instance database to 10g RAC using Manual Con ...

  4. Oracle异机恢复

    RMAN异机恢复注意事项:1.RMAN 异机恢复的时候,db_name必须相同. 如果说要想改成其他的实例名,可以在恢复成功后,用nid 命令修改. 实例名的信息会记录到控制文件里,所以如果在恢复的时 ...

  5. oracle异机恢复测试

    (一)问题背景 最近在生产环境中,开发人员误操作,使用truncate将oracle数据库某个表的数据全部删除了,在删除之后,开发人员发现自己闯祸了,于是联系值班的DBA进行紧急数据恢复. 经过分析, ...

  6. 使用NBU进行oracle异机恢复

    windows平台的异机恢复,目录不同 1.异机环境准备安装oracle介质安装nbu客户端在异机主机的host文件中添加nbu server主机和原主机信息 2.恢复spfile文件 C:\> ...

  7. NBU Rman异机恢复Oracle

    前段时间一个亿级分区表,被分割成历史表和业务表,历史表中保留15天以外的数据,每天都会从业务表中的15天外的数据copy到历史表,并删除业务表15天外的数据,逻辑也很简单,但插入历史表的where 条 ...

  8. oracle rman异机恢复

      Oracle源主机 Oracle目标主机 主机平台 CentOS6.2(final) CentOs6.2(FInal) 主机名 vick rman IP地址 192.168.1.11 192.16 ...

  9. ORACLE 异机恢复

    有时候需要将大的数据库发布到客户现场或转移机器时,不得不考虑在异机上恢复已经调整.测试好的库. dumpdp 全备的方法虽然易用,但在处理对象.索引.空间的时候异常的出错,比如:见有些公司,建表.索引 ...

随机推荐

  1. 使用nodejs调用微信发送红包

    前置条件:申请微信发送红包的账户及其权限 依赖 blueimg-md5和 xmlreader 库 /common/weixin.js 源码 /** * Created by chent696 on 2 ...

  2. hdoj 5124lines

    题意:给你n条线段,求被最多的线段覆盖的点被覆盖的次数 解法:我们可以将一条线段[xi,yi]分为两个端点xi和(yi)+1,在xi时该点会新加入一条线段,同样的,在(yi)+1时该点会减少一条线段, ...

  3. pom 详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  4. MySQL主主复制

    MySQL5. 主主复制 环境如下: CentOS6.4_64 MySQL5. master1:192.168.10.11 master2:192.168.10.12 1.1 配置 master1 a ...

  5. python 获取脚本所在目录

    平时写python经常会想获得脚本所在的目录,例如有个文件跟脚本文件放在一个相对的目录位置,那就可以通过脚本文件的目录找到对应的文件,即使以后脚本文件移到其他地方,脚本也基本不需要改动(相对于写死目录 ...

  6. Winform 支持高清屏(High DPI) 设置

    http://www.cnblogs.com/weiym/p/3555068.htmlhttp://crsouza.com/2015/04/how-to-fix-blurry-windows-form ...

  7. JSFuck奇葩的js编码

    以前对黑客很崇拜,黑客的世界无比精彩.最近为了炫耀,想起了这段特殊的代码. [][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[ ...

  8. AOP基础—代理模式

    代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代 ...

  9. TF400324: Team Foundation services are not available from server…

    Quick Fix As a quick fix you can Close Visual Studio and related apps Browse to %LocalAppData%\Micro ...

  10. django:field字段类型

    字段类型(Field types) AutoField 它是一个根据 ID 自增长的 IntegerField 字段.通常,你不必直接使用该字段.如果你没在别的字段上指定主 键,Django 就会自动 ...