??xml version="1.0" encoding="utf-8" standalone="yes"?> ORACLE 忘记SYS密码2008-06-20 16:56今天?/font>SYSw䆾q接数据库时出错Q权限不I不知道是无意中修改了SYS的密码还是怎么回事。但q好SYSTEM的密码没有忘记?/font> 下面是我的修Ҏ(gu)骤: 1。以SYSTEMw䆾q去 2?/font>SQL> show parameter password; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ remote_login_passwordfile string EXCLUSIVE 我的VALUE?/font>EXCLUSIVEQ如果你的结果是其他Q请参看下面的信息。当然你也可以用SQL>alter system set remote_login_passwordfile='exclusive' scope=spfile; 命o修改remote_login_passwordfile 3?/font>CMD q入命o行,输入如下命o orapwd file=C:\oracle\product\10.2.0\db_3\database\pwdorcl1.ora password=test 注意 file=C:\oracle\product\10.2.0\db_3\database\pwdorcl1.oraQ?/font>pwdorcl1.ora是你的密码文件名字,命名规则?/font>pwdxxx.oraQ?/font>xxx是你的数据库名,不是实例名。然后此文g得放在固定目录下Q?/font>9iQ?/font>10i的固定目录ؓoracle_home\database目录Q如果你的目录下原先已存在名字相同的文gQ事先得删掉 4。现在就可以?/font>SYS的n份登录进M 具体关于SYS密码及参?/font>remote_login_passwordfile 的信息请参考如下: Oracle中,假如用户要以Ҏ(gu)用户w䆾dOracleQ具体有两种w䆾验证的方法: Q?font face="Times New Roman">1Q用与操作pȝ集成的n份验?nbsp; Q?font face="Times New Roman">2Q?/font>Oracle数据库的密码文gq行w䆾验证?nbsp; 因此Q管理好密码文gQ对于控制授权用户从q端或本机登?font face="Times New Roman">Oracle数据库系l,执行数据库管理工作,都具有特别重要的意义. Oracle数据库的密码文g存放有超U用?/font>INTERNALQ?/font>SYS的口令及其他Ҏ(gu)用户的用户名Q口令,一般存攑֜ORACLE_HOMEQ?/font>DATABASE的目录下?/font> 一?nbsp;密码文g的创建: 在?font face="Times New Roman">Oracle Instance Manager创徏一数据库实例的时侯Q在ORACLE_HOMEQ?/font>DATABASE目录下还自动创徏了一个与之对应的密码文gQ文件名?/font>PWDSID.ORAQ其?/font>SID代表相应?/font>Oracle数据库系l标识符。此密码文g是进行初始数据库理工作的基。在此之后,理员也可以Ҏ(gu)需要,使用工具ORAPWD.EXE手工创徏密码文gQ命令格式如下: c:\ ORAPWD FILE=< FILENAME> PASSWORD =<PASSWORD> ENTRIES=<MAX_USERS> 各命令参数的含义为: FILENAMEQ密码文件名Q?/font> PASSWORDQ设|?/font>INTERNALQ?/font>SYS帐号的口令; MAX_USERSQ密码文件中可以存放的最大用hQ对应于允许?/font>SYSDBAQ?/font>SYSOPER权限d数据库的最大用h。由于在以后的维护中Q若用户数超Z此限Ӟ则需要重建密码文Ӟ所以此参数可以Ҏ(gu)需要设|得大一些?/font> 有了密码文g之后Q需要设|初始化参数REMOTE_LOGIN_PASSWORDFILE来控制密码文件的使用状态?nbsp; 二?nbsp;讄初始化参?font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILEQ?nbsp; ?font face="Times New Roman">Oracle数据库实例的初始化参数文件中Q此参数控制着密码文g的用及其状态。它可以有以下几个选项Q?nbsp; NONEQ指C?/font>Oraclepȝ不用密码文ӞҎ(gu)用户的登录通过操作pȝq行w䆾验证Q?nbsp; EXCLUSIVEQ指C只有一个数据库实例可以使用此密码文件。只有在此设|下的密码文件可以包含有?/font>INTERNALQ?/font>SYS以外的用户信息,卛_许将pȝ权限SYSOPERQ?/font>SYSDBA授予?/font>INTERNALQ?/font>SYS以外的其他用戗?nbsp; SHAREDQ指C可有多个数据库实例可以使用此密码文件。在此设|下只有INTERNALQ?/font>SYS帐号能被密码文g识别Q即使文件中存有其他用户的信息,也不允许他们?/font>SYSOPERQ?/font>SYSDBA的权限登录。此讄为缺省倹{?nbsp; ?font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE参数讄?/font>EXCLUSIVE?/font>SHARED情况下,Oraclepȝ搜烦密码文g的次序ؓQ在pȝ注册库中查找ORA_SID_PWFILE参数|它ؓ密码文g的全路径名)Q若未找刎ͼ则查?/font>ORA_PWFILE参数|若仍未找刎ͼ则用缺省?/font>ORACLE_HOMEQ?/font>DATABASEQ?/font>PWDSID.ORAQ其中的SID代表相应?/font>Oracle数据库系l标识符?nbsp; 三?nbsp;向密码文件中增加、删除用P 当初始化参数REMOTE_LOGIN_PASSWORDFILE讄?/font>EXCLUSIVEӞpȝ允许?/font>INTERNALQ?/font>SYS以外的其他用户以理员n份从q端或本机登录到Oracle数据库系l,执行数据库管理工作;q些用户名必d在于密码文g中,pȝ才能识别他们。由于不是在创建数据库实例时自动创建的密码文gQ还是用工?/font>ORAPWD.EXE手工创徏的密码文Ӟ都只包含INTERNALQ?/font>SYS用户的信息;为此Q在实际操作中,可能需要向密码文gd或删除其他用户帐受?nbsp; ׃仅被授予SYSOPERQ?/font>SYSDBApȝ权限的用h存在于密码文件中Q所以当向某一用户授予或收?/font>SYSOPERQ?/font>SYSDBApȝ权限Ӟ他们的帐号也相应地被加入到密码文g或从密码文g中删除。由此,向密码文件中增加或删除某一用户Q实际上也就是对某一用户授予或收?/font>SYSOPERQ?/font>SYSDBApȝ权限?nbsp; 要进行此Ҏ(gu)权操作,需使用SYSDBA权限Q或INTERNAL帐号Q连入数据库Q且初始化参?/font>REMOTE_LOGIN_PASSWORDFILE的设|必MؓEXCLUSIVE.具体操作步骤如下Q?nbsp; 创徏相应的密码文Ӟ 讄初始化参?font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILEQ?/font>EXCLUSIVEQ?nbsp; 使用SYSDBA权限dQ?nbsp; CONNECT SYSQ?/font>internal_user_passsword AS SYSDBAQ?nbsp; 启动数据库实例ƈ打开数据库; 创徏相应用户帐号Q对其授权(包括SYSOPER?/font>SYSDBAQ: 授予权限Q?font face="Times New Roman">GRANT SYSDBA TO user_nameQ?nbsp; 收回权限Q?font face="Times New Roman">REVOKE SYSDBA FROM user_nameQ?nbsp; 现在q些用户可以以管理员w䆾d数据库系l了Q?nbsp; 四?nbsp;使用密码文gdQ?nbsp; 有了密码文g后,用户可以用密码文件以SYSOPERQ?/font>SYSDBA权限dOracle数据库实例了Q注意初始化参数REMOTE_LOGIN_PASSWORDFILE应设|ؓEXCLUSIVE?/font>SHARED.M用户?/font>SYSOPERQ?/font>SYSDBA的权限登录后Q将位于SYS用户?/font>Schema之下Q以下ؓ两个d的例子: 1. 以管理员w䆾dQ?/font> 假设用户scott已被授予SYSDBA权限Q则他可以用以下命令登录: CONNECT scottQ?/font>tiger AS SYSDBA 2. ?/font>INTERNALw䆾dQ?/font> CONNECT INTERNALQ?/font>INTERNAL_PASSWORD 五、密码文件的l护Q?/span> 1. 查看密码文g中的成员Q?/font> 可以通过查询视图V$PWFILE_USERS来获取拥?/font>SYSOPERQ?/font>SYSDBApȝ权限的用L信息Q表?/font>SYSOPERQ?/font>SYSDBA列的取?/font>TRUEQ?/font>FALSE表示此用h否拥有相应的权限。这些用户也是相应地存在于密码文g中的成员?/font> 2. 扩展密码文g的用h量: 当向密码文gd的帐h目超q创建密码文件时所定的限制Q即ORAPWD.EXE工具?/font>MAX_USERS参数Q时Qؓ扩展密码文g的用h限制Q需重徏密码文gQ具体步骤如下: Q?font face="Times New Roman">aQ?nbsp;查询视图V$PWFILE_USERSQ记录下拥有SYSOPERQ?/font>SYSDBApȝ权限的用户信息; Q?font face="Times New Roman">bQ关闭数据库Q?/font> Q?font face="Times New Roman">cQ?nbsp;删除密码文gQ?/font> Q?font face="Times New Roman">dQ?nbsp;?/font>ORAPWD.EXE新徏一密码文gQ?/font> Q?font face="Times New Roman">eQ?nbsp;步?/font>a中获取的用户d到密码文件中?/font> 3. 修改密码文g的状态: 密码文g的状态信息存放于此文件中Q当它被创徏Ӟ它的~省状态ؓSHARED.可以通过改变初始化参?/font>REMOTE_LOGIN_PASSWORDFILE的设|改变密码文件的状态。当启动数据库事例时Q?/font>Oraclepȝ从初始化参数文g中读?/font>REMOTE_LOGIN_PASSWORDFILE参数的设|;当加载数据库Ӟpȝ此参数与口令文件的状态进行比较,如果不同Q则更新密码文g的状态。若计划允许从多台客h上启动数据库实例Q由于各客户Z必须有初始化参数文gQ所以应保各客h上的初始化参数文件的一致性,以避免意外地改变了密码文件的状态,造成数据库登陆的p|?nbsp; 4. 修改密码文g的存储位|: 密码文g的存放位|可以根据需要进行移动,但作此修改后Q应相应修改pȝ注册库有x向密码文件存放位|的参数或环境变量的讄?/span> 5. 删除密码文gQ?/font> 在删除密码文件前Q应保当前q行的各数据库实例的初始化参?font face="Times New Roman">REMOTE_LOGIN_PASSWORDFILE皆设|ؓNONE.在删除密码文件后Q?nbsp;假如你想要以理员n份连入数据库的话Q就必须使用操作pȝ验证的方法进行登录?/font>
]]>
1. 得到某个对象的属?br />
2 Class ownerClass = owner.getClass();
3
4 Field field = ownerClass.getField(fieldName);
5
6 Object property = field.get(owner);
7
8 return property;
9 }
Class ownerClass = owner.getClass()Q得到该对象的Class?br />
Field field = ownerClass.getField(fieldName)Q通过Class得到cd明的属性?br />
Object property = field.get(owner)Q通过对象得到该属性的实例Q如果这个属性是非公有的Q这里会报IllegalAccessException?br />
2. 得到某个cȝ静态属?br />
2 throws Exception {
3 Class ownerClass = Class.forName(className);
4
5 Field field = ownerClass.getField(fieldName);
6
7 Object property = field.get(ownerClass);
8
9 return property;
10 }
Class ownerClass = Class.forName(className) Q首先得到这个类的Class?br />
Field field = ownerClass.getField(fieldName)Q和上面一P通过Class得到cd明的属性?br />
Object property = field.get(ownerClass) Q这里和上面有些不同Q因属性是静态的Q所以直接从cȝClass里取?br />
3. 执行某对象的Ҏ(gu)
2
3 Class ownerClass = owner.getClass();
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Method method = ownerClass.getMethod(methodName, argsClass);
12
13 return method.invoke(owner, args);
14 }
Class owner_class = owner.getClass() Q首先还是必d到这个对象的Class?br />
5?行:配置参数的Class数组Q作为寻找Method的条件?br />
Method method = ownerClass.getMethod(methodName, argsClass)Q通过Method名和参数的Class数组得到要执行的Method?br />
method.invoke(owner, args)Q执行该MethodQinvokeҎ(gu)的参数是执行q个Ҏ(gu)的对象,和参数数l。返回值是ObjectQ也既是该方法的q回倹{?br />
4. 执行某个cȝ静态方?br />
2 Object[] args) throws Exception {
3 Class ownerClass = Class.forName(className);
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Method method = ownerClass.getMethod(methodName, argsClass);
12
13 return method.invoke(null, args);
14 }
基本的原理和实例3相同Q不同点是最后一行,invoke的一个参数是nullQ因是静态方法,不需要借助实例q行?br />
5. 新徏实例
2 public Object newInstance(String className, Object[] args) throws Exception {
3 Class newoneClass = Class.forName(className);
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Constructor cons = newoneClass.getConstructor(argsClass);
12
13 return cons.newInstance(args);
14
15 }
q里说的Ҏ(gu)是执行带参数的构造函数来新徏实例的方法。如果不需要参敎ͼ可以直接使用newoneClass.newInstance()来实现?br />
Class newoneClass = Class.forName(className)Q第一步,得到要构造的实例的Class?br />
W?~第9行:得到参数的Class数组?br />
Constructor cons = newoneClass.getConstructor(argsClass)Q得到构造子?br />
cons.newInstance(args)Q新建实例?br />
6. 判断是否为某个类的实?br />
2 return cls.isInstance(obj);
3 }
7. 得到数组中的某个元素
2 return Array.get(array,index);
3 }
附完整源码:
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Java Reflection Cookbook
*
* @author Michael Lee
* @since 2006-8-23
* @version 0.1a
*/
public class Reflection {
/**
* 得到某个对象的公共属?br /> *
* @param owner, fieldName
* @return 该属性对?br /> * @throws Exception
*
*/
public Object getProperty(Object owner, String fieldName) throws Exception {
Class ownerClass = owner.getClass();
Field field = ownerClass.getField(fieldName);
Object property = field.get(owner);
return property;
}
/**
* 得到某类的静态公共属?br /> *
* @param className cd
* @param fieldName 属性名
* @return 该属性对?br /> * @throws Exception
*/
public Object getStaticProperty(String className, String fieldName)
throws Exception {
Class ownerClass = Class.forName(className);
Field field = ownerClass.getField(fieldName);
Object property = field.get(ownerClass);
return property;
}
/**
* 执行某对象方?br /> *
* @param owner
* 对象
* @param methodName
* Ҏ(gu)?br /> * @param args
* 参数
* @return Ҏ(gu)q回?br /> * @throws Exception
*/
public Object invokeMethod(Object owner, String methodName, Object[] args)
throws Exception {
Class ownerClass = owner.getClass();
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
/**
* 执行某类的静态方?br /> *
* @param className
* cd
* @param methodName
* Ҏ(gu)?br /> * @param args
* 参数数组
* @return 执行Ҏ(gu)q回的结?br /> * @throws Exception
*/
public Object invokeStaticMethod(String className, String methodName,
Object[] args) throws Exception {
Class ownerClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(null, args);
}
/**
* 新徏实例
*
* @param className
* cd
* @param args
* 构造函数的参数
* @return 新徏的实?br /> * @throws Exception
*/
public Object newInstance(String className, Object[] args) throws Exception {
Class newoneClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}
/**
* 是不是某个类的实?br /> * @param obj 实例
* @param cls c?br /> * @return 如果 obj 是此cȝ实例Q则q回 true
*/
public boolean isInstance(Object obj, Class cls) {
return cls.isInstance(obj);
}
/**
* 得到数组中的某个元素
* @param array 数组
* @param index 索引
* @return q回指定数组对象中烦引组件的?br /> */
public Object getByArray(Object array, int index) {
return Array.get(array,index);
}
}
]]>
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
HSSFCellStylecM表一U单元格样式。可以通过q些cL讄单元格的Ҏ(gu)样式、背景颜艌Ӏ字体、水q_垂直方式的对齐?br />?
HSSFWorkbook workbook = new HSSFWorkbook(); //建立一个工作薄
HSSFCellStyle titleStyle=workbook.createCellStyle(); //在工作薄的基上徏立一个样?br /> titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE); //讄Ҏ(gu)样式
titleStyle.setBorderLeft((short)1); //左边?br /> titleStyle.setBorderRight((short)1); //双?br /> titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE); //边?br /> titleStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index); //填充的背景颜?br /> titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //填充图案
假设什么定义了一个样式,惛_填充W一个单元格的时候填充红Q第二格单元格填充蓝艌Ӏ?br />如果:
HSSFCellStyle cellStyle = workbook.createCellStyle(); //创徏一个样?/font>
cellStyle.setFillForegroundColor(HSSFColor.RED.index); //讄颜色为红?br /> cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
HSSFCell cell1 = row.createCell((short)1); //l单元格cell1填充U色
cell1.setCellStyle(cellStyle);
? cellStyle.setFillForegroundColor(HSSFColor.BLUE.index); //讄颜色?br />
HSSFCell cell2 = row.createCell((short)2); //l单元格cell2填充蓝色
cell2.setCellStyle(cellStyle);
q个时候会出现的现象是单元格cell1和cell2都变成了蓝色。遇到这U情况,要预先定义两U不同的单元格样式?/font>
当一个EXCEL文g同时需要很多大同小异的单元格样式时Q这样一一定义很麻烦。POI HSSF提供了一个HSSFCellUtilc(在org.apache.poi. hssf.usermodel.contrib包)Q里面有几个Ҏ(gu)可以l过HSSFCellStyle直接讑֮单元格的样式Q但q几个方法会抛出NestableException?nbsp; 常,要处理这个异常,需要引用Apache的几个Common包:
commons-beanutils.jar
commons-beanutils-bean-collections.jar
commons-beanutils-core.jar
commons-lang.jar
commons-logging-api.jar
以下是其他各U情늚处理Q?br />1、中文处理:
要在通过POI生成的EXCEL中正常显CZ文,需要ؓ单元D|编码:
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("部门");
2、合q单元格Q?br />HSSFSheet.addMergedRegion(new Region())Ҏ(gu)可以合ƈ单元|Region()中的一个构造函数含有四个参敎ͼ分别代表起始行、v始列、结?nbsp; 行、结束列Q?br /> sheet.addMergedRegion(new Region(initRow, (short)(initCol-2), initRow + lists.size() - 1, (short)(initCol-2)));
3、公式的处理Q?br />HSSFCell.setCellFormula()Ҏ(gu)用来在EXCEL单元g写入公式?br /> cell = row.createCell((short)(dataFlag));
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("SUM(" + getColLetter(initCol) + (listFlag+1) +":" + getColLetter(dataFlag-1) + (listFlag+1) + ")");
cell.setCellStyle(nameStyle);
4、链接的处理Q?br />在POI中往单元g写链接,是用HYPERLINK函数搞定的?br />HYPERLINK函数包含两个参数Q第一个参数是指向的URL地址Q第二个参数是显C字丌Ӏ?br /> cell = row.createCell((short)(dataFlag));
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("HYPERLINK(\"http://www.xxxxx.com/xxx.jsp?id=1\",\"homepage\")");
cell.setCellStyle(linkStyle);
Z佉K接效果更好,我们可以l链接所在单元格定义一U样式,佉K接显CZؓ有下划线的蓝色字Ԍ
HSSFCellStyle linkStyle = workbook.createCellStyle();
linkStyle.setBorderBottom((short)1);
linkStyle.setBorderLeft((short)1);
linkStyle.setBorderRight((short)1);
linkStyle.setBorderTop((short)1);
linkStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
linkStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
HSSFFont font = workbook.createFont();
font.setFontName(HSSFFont.FONT_ARIAL);
font.setUnderline((byte)1);
font.setColor(HSSFColor.BLUE.index);
linkStyle.setFont(font);