修改数据库字符集为:ZHS16GBK
查看服务器端字符集SQL > select * from V$NLS_PARAMETERS
修改:$sqlplus /nolog
SQL>conn / as sysdba
若此时数据库服务器已启动,则先执行 SHUTDOWN IMMEDIATE 命令关闭数据库服务器,
然后执行以下命令:
SQL>shutdown immediate;
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;
ERROR at line 1:ORA-12721: operation cannot execute when other sessions are active
若出现上面的错误,使用下面的办法进行修改,使用INTERNAL_USE可以跳过超集的检查:
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;
Category Archives: 数据库
MySQL的定时备份
环境:
服务器:Windows Server 2003
MySQL 安装位置:C:\MySQL
数据库名称为:testdb
MySQL root 密码:123456
数据库备份目的地:D:\db_backup\
脚本:
@echo off
mysqldump –opt -h localhost -u root –password=123456 testdb > D:\db_backup\testdb\%date:~0,10%.sql
将以上代码保存为backup_db.bat 然后使用Windows的“计划任务”定时执行该脚本即可。
(例如:每天凌晨5点执行back_db.bat)
mysql查看数据表是否被损坏及修复的方法
查看数据表是否被损坏:check table tablename;
修复损坏的数据表:repair table tablename;
mysql导入.sql文件
1.导出整个数据库
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.导出一个数据库结构
mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table
4.导入数据库
常用source 命令
进入mysql数据库控制台,
如mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source d:\wcnc_db.sql
ORA-01747: invaid user.table.column, table.column, or column specification错误
第一次尝试用子查询插入数据,结果发生了如标题的错误提示,从网上查了一下,说是因为里面的字段名可能用到了orcal的关键字
我懒得查orcal有哪些关键字,查到了还得一一对照查找,就用了一个办法来解决这个问题,就是将所有的字段名都用双引号括起来,如
insert into Table1(“id”,”title”) select id,title from Table2
Error 6 initializing SQL*Plus Message file sp1.msb not found SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory.
在环境变量里面加ORACLE_HOME 指向你的Oracle Client目录就行了
如C:\oracle\product\10.2.0\client_1
oracle安装时候需要注意的一个问题
在oracle安装的过程中,要求修改system和sys的口令,这个口令的要求是:要以字母开头,长度不小于7
否则会有类似口令无效的提示
如何用SQL注入攻击登陆界面
适用范围:
1. 如果一个系统是通过
SELECT * FROM accounts WHERE username=’admin’ and password = ‘password’这种显式的SQL来进行登陆校验,
也就是执行这个SQL语句,如果数据库中存在用户名为admin, password为password的用户,就登陆成功,否则就登陆失败。
2. 系统没有对用户输入进行全面的过滤
3. 系统后台使用的是MYSQL数据库
4. 系统中存在一个user name为admin的用户
攻击原理:
利用MYSQL的注释功能,也就是”/*”, mysql执行SQL脚本时,如果遇到/*标示符,就会把之以后的SQL当做注释而不会执行,
正常情况下用户在用户名框内输入”admin”,在password框内输入”password”, 后台执行的SQL语句就为
SELECT * FROM accounts WHERE username=’admin’ and password = ‘password’
但是如果在用户名框内输入”admin’ AND 1=1 /*”, 在密码框内输入任意字符串,那么后台执行的SQL就为
SELECT * FROM accounts WHERE username=’admin’ AND 1=1 /* and password = ‘aa’, 可以看到数据库实际执行的SQL为
SELECT * FROM accounts WHERE username=’admin’ AND 1=1, 而/*后面的SQL就被当做注释而忽略掉了,登陆成功!
PL/SQL中汉字乱码的解决方案
问题:从PL/SQL中执行select的时候,发现汉字乱码。
解决方法:
1. SELECT ‘AMERICAN_AMERICA.’ || PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME = ‘NLS_CHARACTERSET’;
2. 设置环境变量:NLS_LANG,具体值使用上面第一句查询出来的结果
为什么group by 和 order by会使查询变慢
group by 和 order by操作通常需要创建一个临时表来处理查询的结果,所以如果查询结果很多的话会严重影响性能。
