我花了很多时间搜索溢出论坛并使用其他资源尝试解决这个问题但没有成功。如果在其他地方得到回答,我表示歉意。但是,据我所知,它还没有
这是一个小背景。我有一些SQL,Visual Basic和Auto Hot Key(很棒的程序)的经验。目前我正在尝试学习的不仅仅是我所知道的关于SQL的基本知识(也很少生锈)。
对于我之前和现在的工作,我在IBM的iSeries(或者#39; Mainframe'作为一些老兵喜欢称之为)工作(很多)。特别是它的版本: DB2 i5 / OS上的IBM DB2 PE 9.7 FP5 SRM R1。
如您所知,iSeries相关模拟器具有允许其用户录制宏以供以后播放的功能。这个功能当然有其局限性。我在Visual Basic中从头开始编写了一些在他们可以执行的操作中更灵活的东西。但是,你只能用VB做这么多。
无论你如何看待它,iSeries都是缓慢的IMO。为了向/从其数据库/服务器传递/检索信息,其用户受限于程序的速度(以及其他事项)。 VB宏受智能暂停/超时影响,因为这些脚本需要工作(如自动热键)
iSeries确实有一个功能,您可以使用i5 / OS查询管理器查询信息,与库交互(如果我有正确的模式?)和表。它还有一个FTP功能(我猜它有它的用途)。 我已经开始使用Powershell和SSH / Qshell,我已经在他们的网站上关于iSeries和所有相关事项的IBM广泛支持部分阅读了大量文档。
以下是问题:
qshell / SSH是一种从数据库中检索信息的有效方法,更具体地说,是DB2 for iSeries'使用(.lib / .file扩展名文件?)?
编写SQL脚本并通过SSH / Qshell执行它们比使用iSeries模拟器本身更快吗?
这只能通过端口转发或隧道传输吗?
如何通过SSH命令了解有关服务器的更多信息?我可以非常轻松地浏览服务器目录并查看我在iSeries中看不到的文件。它的数据库文件是.lib / .file / .mbr文件扩展名,我无法使用' cat'命令。这需要使用我假设的SQL命令吗?
我是否需要以root用户身份登录才能拥有读/写访问权限并执行与SQL相关的任何操作?
如上所述,我已经玩过ssh / qshell,但是我很难提起mysql / sql提示做任何事情(我使用的是openSSH 4.7p1 / unix CLI?)我认为从$更改为&gt ;当你成功地做到这一点。我已经能够做到这一点但是我无法执行任何与SQL相关的命令,所以我不确定我做错了什么。
下面是我通过powershell通过ssh登录服务器并尝试执行SQL相关内容的示例:
PS H:> ssh -1 myusername@blabla.something.com" mysql -u myusername -e' show tables;'"
输入密码:密码
连接
无法将chdir转到主目录/ home / myusername:路径名中的文件或目录不存在
bsh:mysql:执行权限被拒绝
bsh:无法执行
连接已关闭至blabla.something.com
这是一个正常登录ssh的示例:
ssh -1 myusername@blabla.something.com
无法将chdir转到主目录/ home / myusername:路径名中的文件或目录不存在
$ Mysql
mysql:执行权限被拒绝
$" mysql
'显示数据库;'"
MySQL的
'显示数据库;'"找不到
我非常感谢您对我的错误或对我的问题提出反馈的任何见解。我知道我可以尝试使用PuTTY(不是真正的工作选项),ODBC驱动程序(无法下载IBM iSeries修订包以获取驱动程序或修复iSeries的安装,而我可以& #39;无论如何我没有Windows管理员权限)
更新
首先,我要感谢大家的意见和见解。
沃伦: 谢谢你的洞察力。 IBM DB2 PE 9.7 FP5 SRM R1确实是DB2 LUW,或者" COBRA"。这个特殊的仿真器是IBM 3270仿真器的改编版。这个假装由附件带给你(他们添加了几个铃铛和口哨,不再提供支持,ODBC驱动程序等)。在此版本中,我可以选择使用IBM DB2 Query Manager for i5 / OS。我同意服务器是分区的(我认为?),因为我能够调用不同的提示,如DB2 / SQLJ / JAVA,只是避免使用它们太成功了。也许我下面的尝试会揭示更多。
詹姆斯:
感谢您的投入,我从未想过直接从powershell这样做。至于红皮书,有它!我还在读它。这可能比我目前使用PowerShell和ADO.NET更先进。我需要更深入地了解您的编码示例,以便更好地理解它。
降压:
我很感激您的逐点反馈。不确定你的设置是什么,但IBM i(尤其是i5之后的任何东西)非常快。我工作的公司..或至少与我合作的直接人员,对i / vba / qsh /等知之甚少。礼貌地说。所以,我学到的很多东西都是通过阅读和应用我学到的东西。实际上,这只是我的第二篇文章。在任何网站上,永远。我不想发帖,因为我不能在一分钟内找出答案。我很顽固,如果必须让脚本工作,我会花费数小时。
对于STRSQL,我使用的等价物是STRQRY。阅读IBM的i5 / OS查询管理器PDF(300 pgs -_-)。我同意这是一个非常强大的工具。唯一的缺点是1.你必须创建一个格式化查询的表单,然后2.你必须使用SQL创建查询。这没什么大不了的。不幸的是,在任何给定的LIB(以及其他扩展类型)中有数百个模式,有时还有数千个.FILE扩展。幸运的是,我把它缩小到了我最常访问的主要LIB。不幸的是,这个库中有4000多个文件扩展名和一些文件中的文件(︻╦╤─^ _ ^)。至少可以说,完成所有这些工作需要花费一些时间。
有一些"宏"批量执行查询然后将数据打印到服务器上的格式化文件(这需要erm ...就像30分钟,500-600页)。有什么办法可以查看这批次运行的参数吗? "使用查询/查询表单?"
我更感兴趣的是使用QSH> SQL执行查询和导航数据库的主要原因是因为我想提高我的SQL技能(初学者),但我希望能够应用这个对未来其他环境的了解。
上帝,我写了太多s ***
我最近的努力:对不起。我的格式很糟糕
通过ssh登录后,这就是我的尝试:
$ db2"从sysibm.sysdummy1"中选择*
db2:无法执行
$ cd / usr / bin
$ ls
半掩
QSH
SQLJ
DB2
db2profc
DATAQ
java的
javadoc的
javah .....
$ db2"从qsys.lib中选择
++++++ CLI ERROR ++++++
SQLSTATE 42704
未找到QSYS类型*文件中的LIB // btw中有大量的.file扩展名
$ cd ..
$ cd qsys.lib
$ ls
垃圾负载.lib .menu .file(* file?)extensions
$ db2"从1234abcd.lib"中选择*
++++++ CLI ERROR ++++++
SQLSTATE 42601
本地错误代码:-104
令牌无效bla bla VALID TOKENS:FOR SKIP FETCH ORDER GET //成功!仍然失败
问题
所以现在我的问题是我只需要使用有效的令牌。有人知道一个很好的例子吗? (我将继续尝试自己)
对于我的生活,我无法复制上面的过程,至少我得到一个cli错误/ SQLSTATE。现在一切都回归:
" db2:你应该放弃大声笑"
我试着记录我所做的一切,猜猜我错过了一些重要的东西?在...之间的某个地方
$ cd / usr / bin
$ ls
和
$ db2"从iforget.lib"中选择*
我至少可以执行SQL语句的地方发生了一些事情。什么都没有。
db2:t(ಠ益ಠt) 晚了。太累了
任何反馈=赞赏
答案 0 :(得分:4)
与mysql cli命令等效的qshell(和DB / 2)是db2:
db2 "select * from sysibm.sysdummy1"
如果安装了IBM Access .NET数据提供程序,则可以直接从PowerShell查询:
# Assembly name from \\HKCR\Installer\Assemblies\Global
$an = 'IBM.Data.DB2.iSeries,Version="12.0.0.0",PublicKeyToken="9CDB2EBFB1F93A26",Culture="neutral"'
# Connection string
$cs = 'Data-Source=10.0.0.50;UserID=QPGMR;Password=****'
Add-Type -AssemblyName $an
$cn = New-Object IBM.Data.DB2.iSeries.iDB2Connection($cs)
$cn.Open()
$cmd = $cn.CreateCommand()
$cmd.CommandText = "SELECT * FROM SYSIBM.SYSDUMMY1"
$da = New-Object IBM.Data.DB2.iSeries.iDB2DataAdapter($cmd)
$ds = New-Object System.Data.DataSet
$cnt = $da.Fill($ds)
Write-Host "$cnt records selected."
$cmd.Dispose()
$cn.Close()
foreach ($dt in $ds.Tables) {
$dv = New-Object System.Data.DataView($dt)
$dv | Format-Table -AutoSize
$dv.Dispose()
}
$ds.Dispose()
有关更多信息,请参阅IBM红皮书Integrating DB2 Universal Database for iSeries with Microsoft ADO .NET 。
答案 1 :(得分:1)
1)qshell / SSH是一种从a中检索信息的有效方法 数据库,或者更具体地说,'DB2 for iSeries'的库 使用(.lib / .file扩展名文件?)?
概要很有帮助;您似乎对进行即席查询而不是编写最终用户应用程序感兴趣。在发出SQL语句并立即在模拟器窗口中查看结果方面,qshell与IBM i命令STRSQL一样高效。我只是在没有索引的列上查询了一个200万行表,并在.23秒内得到了第一页结果。
2)不会编写SQL脚本并通过SSH / Qshell执行它们 比使用iSeries仿真器本身更快?
很难理解更快可能意味着什么。您似乎只是使用模拟器来播放宏;这不是特别有效。通常,可以使用模拟器访问命令行,发出STRSQL命令并从那里运行即席SQL查询。在获得结果显示方面,这是非常快的。
3)这只能通过端口转发或隧道传输吗?
这完全取决于网络的配置方式。
4)如何通过SSH命令了解有关服务器的更多信息?我可以 很容易浏览服务器目录并查看我的文件 否则无法在iSeries中看到。它的数据库文件是 我无法使用'cat'查看.lib / .file / .mbr文件扩展名 命令。这需要使用我假设的SQL命令吗?
任何雇用你的人都必须给你一些基本信息才能帮助你入门,所以你可能已经知道构成生产环境的库(模式)和文件(表)。所以我假设您不是在询问SYSCOLUMNS和SYSTABLES之类的SQL目录,而是询问IBM i更具体的内容。 IBM i的参考资料位于Infocenter。
5)我是否需要以root用户身份登录才能进行读/写操作 访问privelages并执行SQL相关的任何事情?
没有系统需要root权限才能执行读/写访问。您的雇主需要向您提供具有您要访问的表的权限的用户配置文件。
如果您需要轻量级终端仿真器,请查看Sourceforge上的tn5250 project。您无需Windows管理员权限即可安装或运行它。