sql数据库

Oracle异机恢复

谁说胖子不能爱 提交于 2020-02-17 14:06:36
RMAN异机恢复注意事项: 1、RMAN 异机恢复的时候,db_name必须相同。 如果说要想改成其他的实例名,可以在恢复成功后,用nid 命令修改。 实例名的信息会记录到控制文件里,所以如果在恢复的时候,如果实例名不一致,恢复的时候会报错。 2、如果恢复的路径和源库不一致,就需要在restore时用set 命令指定新位置。 并且使用switch datafile all将信息更新的到控制文件。在做duplicate的时候,RMAN 会自动根据pfile中的log_file_name_convert和db_file_name_convert来进行set 的转换。 手工restore时,只能使用set 命令。 1. 在恢复机上准备好以下内容:   》备份文件:      /ora_rman_backup/20150618/{控制文件.bak ; 数据文件.bak ; 归档日志.bak ; 参数文件.bak; 口令文件.bak}      注:将rman备份文件放到这里,是因为在源DB上做RMAN备份时指定备份到这里,若不建立同样的目录,     下面恢复时,就都必须指定RMAN备份文件的位置。   》OracleDB已经安装好,并且配置了基本环境变量。   》cd $ORACLE_HOME/dbs    orapwd file=orapw$ORACLE_SID password

非索引列上的统计 <第二篇>

早过忘川 提交于 2020-02-17 06:14:31
非索引列上的统计   有时候,可能在连接或过滤条件中的列上没有索引。即使对这种非索引列,如果查询优化器知道这些列的数据分布(统计),它也很可能做出最佳的选择。   除了索引上的统计,SQL Server可以在没有索引的列上建立统计。 即使不是索引列,当你开启了SQL Server自动创建统计功能,SQL Server就自动在执行WHERE、JOIN等查询列上创建统计。 数据分布的信息或者特定值出现在非索引列上的可能性,都能够帮助查询优化器确定最优的处理策略。即使查询优化器不能真正使用索引来定位这些列,这也仍然对其有利。如果SQL Server确信这些信息对创建更好的计划有利(这通常发生于这些列被用于一个断言时),则自动在非索引列上创建统计。默认情况下,在非索引列上创建统计是被开启的。它可以通过属性=》选项=》数据库自动创建统计设置来配置。可以使用ALTER DATABASE命令来编程覆盖这个设置。但是,为了更好的性能,建议保持这个特性开启。   下面来一个实战,以确定这个非索引列的统计也是有用的。首先,建两张表ta1,ta2分别都有十万行数据,但是反差很大,其中ta1的column2中只有一行为1,其余行全部为2。ta2正好相反。在这两个列上都没有索引。   大致的样子如下:      执行如下SQL语句: SELECT ta1.column2,ta2.column4 FROM

防止SQL注入的五种方法

穿精又带淫゛_ 提交于 2020-02-17 03:17:08
一、SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。 二、SQL注入攻击的总体思路 1.寻找到SQL注入的位置 2.判断服务器类型和后台数据库类型 3.针对不通的服务器和数据库特点进行SQL注入攻击 三、SQL注入攻击实例 比如在一个登录界面,要求输入用户名和密码: 可以这样输入实现免帐号登录: 用户名: ‘or 1 = 1 – 密 码: 点登陆,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库API已经处理了这些问题) 这是为什么呢? 下面我们分析一下: 从理论上说,后台认证程序中会有如下的SQL语句: String sql = "select * from user_table where username= ' "+userName+" ' and password=' "+password+" '"; 当输入了上面的用户名和密码,上面的SQL语句变成: SELECT * FROM user_table WHERE username= '’or 1 = 1 -- and password='’ 分析SQL语句: 条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功; 然后后面加两个

项目开发第五天

偶尔善良 提交于 2020-02-17 00:47:36
今天完善项目的数据库操作: 定义三个数据库,分别表示收入、支出和添加类别。 package net.hnjdzy.tinyaccount.db; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import net.hnjdzy.tinyaccount.entity.AccountCategory; import net.hnjdzy.tinyaccount.entity.AccountItem; import java.util.ArrayList; import java.util.List; /* * 数据访问类 */ public class AccountDao { private DatabaseHelper helper; private SQLiteDatabase db; public AccountDao(Context context) { helper = new DatabaseHelper(context); //因为getWritableDatabase内部调用了mContext.openOrCreateDatabase(mName

SQL学习笔记(二)

雨燕双飞 提交于 2020-02-16 23:30:05
文中所操作的数据库表如下: SQL AND & OR 运算符: 用法示例: ORDER BY 多列: 按order by 后的字段顺序进行排列。 UPDATE 语句中的 WHERE 子句: 如果省略了where后面的条件,则所有记录将会被更新。 LIMIT子句: IN 操作符 IN 操作符允许您在 WHERE 子句中规定多个值 BETWEEN 和NOT BETWEEN: 注意:between在不同数据库里可能包含括两个测试值的,也可能不包含。 SQL别名: INSERT INTO SELECT 语句: 将已有数据从一表复制到另一表 UNIQUE 约束: 每个表只能有一个primary key 但是可以有多个 unique FOREIGN KEY 约束: 一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。 CHECK 约束: CREATE TABLE 时的 SQL CHECK 约束: CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CHECK (P_Id>0) ) ALTER TABLE 时的 SQL CHECK

SQL 笔记--高级

好久不见. 提交于 2020-02-16 17:37:31
TOP 子句 作用: TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。 注释:并非所有的数据库系统都支持 TOP 子句。 语法: SELECT TOP number|percent column_name(s) FROM table_name LIKE 操作符 作用:LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。 语法: SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern IN 操作符 作用:IN 操作符允许我们在 WHERE 子句中规定多个值。 语法: SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...) BETWEEN 操作符 作用:操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。 语法: SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 Alias(别名) 作用:通过使用 SQL,可以为列名称和表名称指定别名(Alias)。 语法: (表) SELECT

ORACLE隐式类型转换

不问归期 提交于 2020-02-16 14:12:22
隐式类型转换简介 通常 ORACLE 数据库存在显式类型转换( Explicit Datatype Conversion ) 和隐式类型转换( Implicit Datatype Conversion )两种类型转换方式。如果进行比较或运算的两个值的数据类型不同时(源数据的类型与目标数据的类型),而且此时又没有转换函数时,那么 ORACLE 必须将其中一个值进行类型转换,使其能够运算。这就是所谓的隐式类型转换。其中隐式类型转换是自动进行的,当然,只有在这种转换是有意义的时候,才会自动进行。 Data Conversion Generally an expression cannot contain values of different datatypes. For example, an expression cannot multiply 5 by 10 and then add 'JAMES'. However, Oracle supports both implicit and explicit conversion of values from one datatype to another. 关于隐式类型转换,建议翻看官方文档 “ Data Type Comparison Rules ” 章节,下面是官方文档中的隐式类型转换矩阵。从下面这个表格

性能调优 | 如何通过性能调优突破 MySQL 数据库性能瓶颈?

喜夏-厌秋 提交于 2020-02-16 07:15:30
本文出自头条号老王谈运维,转载请说明出处。 MySQL 数据库瓶颈对 DBA 程序员而言,是非常棘手的问题。要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?下面小编将从数据库数据库性能优化的目标和方法两方面阐述如何通过性能调优突破 MySQL 数据库性能瓶颈。 优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。 降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标。 优化方法 改变 SQL 执行计划 明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据,以达到 “减少 IO 次数” 和 “降低 CPU 计算” 的目标 order

数据库性能优化-1

丶灬走出姿态 提交于 2020-02-16 07:13:29
出处: https://www.cnblogs.com/easypass/archive/2010/12/ 08/1900127.html 1.数据库访问优化法则 要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件时硬盘可能会是瓶颈点,为什么这些一般的工作我们能快速确认瓶颈点呢,因为我们对这些慢速设备的性能数据有一些基本的认识,如网络带宽是2Mbps,硬盘是每分钟7200转等等。因此,为了快速找到SQL的性能瓶颈点,我们也需要了解我们计算机系统的硬件基本性能指标,下图展示的当前主流计算机性能指标数据。 从图上可以看到基本上每种设备都有两个指标: 延时(响应时间):表示硬件的突发处理能力; 带宽(吞吐量):代表硬件持续处理能力。 从上图可以看出,计算机系统硬件性能从高到代依次为: CPU——Cache(L1-L2-L3)——内存——SSD硬盘——网络——硬盘 由于SSD硬盘还处于快速发展阶段,所以本文的内容不涉及SSD相关应用系统。 根据 数据库 知识,我们可以列出每种硬件主要的工作内容: CPU及内存:缓存数据访问、比较、排序、事务检测、SQL解析、函数或逻辑运算; 网络:结果数据传输、SQL请求、远程数据库访问(dblink); 硬盘:数据访问、数据写入

利用SQL索引提高查询速度

十年热恋 提交于 2020-02-16 07:08:33
1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的 ISAM 索引结构。 索引的使用要恰到好处,其使用原则如下: 在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。 在频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。 在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。 如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。 使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁操作而 使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量 数据后,删除并重建索引可以提高查询速度。 (1)在下面两条select语句中: SELECT * FROM table1 WHERE field1<=10000 AND field1>=0; SELECT * FROM table1