如何以dba身份登陆isqlplus

一般用户登陆isqlplus的网址http://ip:port/isqlplus,进入该网址后会直接进入数据库用户登陆界面,使用数据库中的普通用户即可登陆。

DBA用户登陆isqlpus的网址http://ip:port/isqlplus/dba,进入该网址后首先会弹出一个登陆框,要求先输入iSQL*Plus DBA的用户和密码,注意这里不是数据库用户,而是isqlplus应用服务器要求的用户和密码。

[注:ip在我的机子上为我的电脑的名字greenwil-279c3a,有的为localhost,port为端口号,一般为5560]

要以DBA身份登陆isqlplus,必须先配置好oc4j用户。

采用xml配置文件认证的方式。该配置文件位于$ORACLE_HOME/oc4j/j2ee/isqlplus/application-deployments/isqlplus/config

但 是该配置文件中的密码是加密过的,所以我们不能手动修改该文件,而是通过JAZN(Java AuthoriZatioN)来配置。JAZN是 oracle提供的一个JASS(Java Authentication and Authorization Service)工具.

[$ORACLE_HOME在我电脑上为F:\oracle\product\10.2.0\db_2]

通过JAZN,可以完成以下任务

· Create users

· List users

· Grant the webDba role

· Remove users

· Revoke the webDba role

· Change user passwords

如何进入JAZN命令环境

1.进入到目录$ORACLE_HOME/oc4j/j2ee/isqlplus/application-deployments/isqlplus/

2.确保JAVA_HOME环境变量指向了正确的jdk(需要1.4以上)路径,可以使用oracle自带的jdk,位于$ORACLE_HOME/jdk

3.执行以下命令

java -Djava.security.properties=$ORACLE_HOME/sqlplus/admin/iplus/provider -jar $ORACLE_HOME/oc4j/j2ee/home/jazn.jar -user "iSQL*Plus DBA/admin" -password welcome -shell

其中realm=iSQL*Plus DBA,user=admin,这些可以从xml配置文件中看到,admin的默认密码是welcome,但是admin用户默认没有webDba权限,不能直接用于登陆isqlplus。

注意该命令一定要先进入第一步的目录后再执行,否则会报错

oracle.security.jazn.JAZNRuntimeException: Configuration file "configjazn.xml" does not exist. Check your JAAS configuration settings.

或者

Realm [iSQL*Plus DBA] does not exist in system.

如果报以上的错误,请仔细检查你的当前目录是否和第一步中给出的目录完全一致。

进入JAZN命令环境后,可以执行所有的任务:

1.新建用户ning,密码pass

JAZN:> adduser "iSQL*Plus DBA" ning pass

2.列出用户

JAZN:> listusers

iSQL*Plus DBA/admin

iSQL*Plus DBA/ning

JAZN:> listusers "iSQL*Plus DBA"

admin

ning

3.授予用户登陆isqlplus DBA的权限

JAZN:> grantrole webDba "iSQL*Plus DBA" ning

4.撤销用户登陆isqlplus DBA的权限

JAZN:> revokerole webDba "iSQL*Plus DBA" ning

5.删除用户

JAZN:> remuser "iSQL*Plus DBA" ning

6.修改用户密码

JAZN:> setpasswd "iSQL*Plus DBA" ning pass newpass

7.退出JAZN命令环境

JAZN:> exit

假设上面我们创建了一个用户ning,密码为pass,并且已经授予webDba权限。

接下来重新启动isqlplus应用服务器

isqlplusctl stop

isqlplusctl start

c# 用dataset实现XML与数据库的数据交换

1、读取数据库内容,使用dataset的XmlReader类写入XML文件。

/********************************************/
/* 读数据库写入XML */
/********************************************/
DataSet ds = new DataSet();
SqlConnection conn = new SqlConnection("server = localhost;uid=sa;pwd=123;database=gq");
conn.Open();
SqlCommand comm = null;
comm = new SqlCommand(@"SELECT * FROM Table_2", conn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = comm;
da.Fill(ds, "Table_2");
//this.richTextBox1.Text=ds.GetXml();
ds.WriteXml(@"C://a.xml", XmlWriteMode.WriteSchema);
注:本代码为最简单代码,需要增加异常处理。
2、读取XML,是用Dataset写入数据库,或显示在DataGridView中
window.google_render_ad();/* 读XML文件,也可使用DataTable */
/***************************************/
DataSet dsEx = new DataSet();
dsEx.ReadXml(@"c:\a.xml", XmlReadMode.ReadSchema);

////////////////////////////////////////////////////
// 写入数据库 //
////////////////////////////////////////////////////
SqlConnection conn = new SqlConnection("server = localhost;uid=sa;pwd=123;database=gq");
conn.Open();
string tabname = "Table_3";
string seleStr = "SELECT name, old, jg, dd FROM dbo.Table_3";
/*string sqlquery = @"UPDATE [dbo].[Table_3] SET [name] = @name, [old] = @old, [jg] = @jg, [dd] = @dd WHERE (((@IsNull_name = 1 AND [name] IS NULL) OR ([name] = @Original_name)) AND ([old] = @Original_old) AND ((@IsNull_jg = 1 AND [jg] IS NULL) OR ([jg] = @Original_jg)) AND ((@IsNull_dd = 1 AND [dd] IS NULL) OR ([dd] = @Original_dd)));
SELECT name, old, jg, dd FROM Table_3 WHERE (old = @old)";*///
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = new SqlCommand(seleStr,conn);
// sda.UpdateCommand = new SqlCommand(sqlquery,conn);
new SqlCommandBuilder(sda);

sda.Fill(dsEx,tabname);
dsEx.Tables[1].Merge(dsEx.Tables[0]);
sda.Update(dsEx, tabname);
//dsEx.AcceptChanges();
//this.dataGridView1.DataSource = dsEx.Tables[1].DefaultView;//显示到datagridview中
// this.richTextBox1.Text = dsEx.Tables[1].TableName.ToString();
//sda.a
conn.Close();
conn.Dispose();
/*
总结:
1、dataset就是数据表在内存中的映射集合,每个dataset中有多个表映射。
2、AqlDataAdapter是链接dataset与数据库的纽带
3、AqlDataAdapter要执行的SQL语句由SelectCommand,UpdateCommand等实现,而他们由SqlCommand赋值,最后由SqlCommandBuilder来建立
4、Fill方法将得到的表映射到dataset中,于是,dataset的表集合中就增加了一个,表的名字可以用 【Dataset对象】.Tables[n].TableName取得。其中n是表在dataset中的序号。
5、以上代码为最简练代码,需要增加相关语句,以便使之健壮。
6、dataset为对象操作模式,他吧整个表都读进来,增加了内存占用,但便于提高查询速度,便于使用XmlPath操作。
7、 DataReader为流模式,单向快速想前,站内存少。
注:直接将本代码段粘到程序中即可调试,但本代码为最简单代码,需要增加异常处理。

*/
window.google_render_ad();

使用C#与用友NC通过post方式进行XML数据交换

/// 与用友NC通过post方式进行XML数据交换
///
///
///
private void btnRequest_Click(object sender, EventArgs e)
{
string path = textBoxPath.Text;
XmlDocument doc = new XmlDocument();
doc.Load( @path);
WebResponse resp;
string strUrl = "http://10.1.204.21:8090/service/XChangeServlet?account=0001&receiver=10401";
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(strUrl);
myRequest.ContentType = "text/xml";
myRequest.Method = "POST";
Stream stm = myRequest.GetRequestStream();
doc.Save(stm);
stm.Close();
resp = myRequest.GetResponse();
stm = resp.GetResponseStream();
StreamReader r = new StreamReader(stm);
MessageBox.Show(r.ReadToEnd().ToString(), "MESSAGE ");
}

用DataGridView显示XML

写个XML文件:


    
        2002
        
    
    
        2005
        
    

保存为:Items.xml。
然后用2005建一个Windows Form应用程序添加一个button、一个dataset和一个datagridview控件。分别取名为button1、DataSet1和DataGridView1。
DataSet1为UnTyped dataSet,设置DataGridView1的数据源到DataSet1上。
在button1的Click事件里面写如下代码:
DataSet1.ReadXml("Items.xml", XmlReadMode.Auto);
DataGridView1.AutoGenerateColumns = true;
DataGridView1.DataSource = DataSet1;
DataGridView1.DataMember = "Item";

第一行代码用来打开xml文件并且填充到数据集DataSet1中。ReadXml方法中的第二个参数可以省略,默认的XmlReadMode为Auto;
第二行代码设置DataGridView1的自动生成行为true,没有这句代码你会发现DataGridView正常运行没有任何提示,只是它不显示任何数据,而且它里面的数据是为空的;
第三行代码用于对DataGridView1的数据源进行关联;
最后一行代码设置DataMember为Item告诉DataGridView将要显示的数据是Item条目中的内容,系统自动绑定数据到DataGridView。

显示数据库表:

DataSet dataSet1 = new DataSet();
sqldap.Fill(dataSet1,"table1");
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = dataSet1.Tables["table1"].DefaultView;

修改节点

XmlNodeList nodeList=xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
foreach(XmlNode xn in nodeList)//遍历所有子节点
{
XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
if(xe.GetAttribute("genre")=="李赞红")//如果genre属性值为“李赞红”
{
xe.SetAttribute("genre","update李赞红");//则修改该属性为“update李赞红”

XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
foreach(XmlNode xn1 in nls)//遍历
{
XmlElement xe2=(XmlElement)xn1;//转换类型
if(xe2.Name=="author")//如果找到
{
xe2.InnerText="亚胜";//则修改
break;//找到退出来就可以了
}
}
break;
}
}
xmlDoc.Save("bookstore.xml");//保存。