如何获取与其他用户共享的数据库对象的DDL?

时间:2016-01-06 08:08:28

标签: java ddl sybase-ase

我们正致力于提取Sybase ASE 15.5版本的数据库DDL。我们在java中创建了一个执行ddl命令的示例。我们使用Sybase提供的ddlgen实用程序获得了ddl命令:​​

java -cp "mypath/lib/jconn4.jar;mypath/lib/dsparser.jar;mypath/lib/DDLGen.jar" com.sybase.ddlgen.DDLGenerator -Usa -Pmypassword -S192.123.13.111:5000 -Dmaster

上面的命令为用户sa中存在的所有数据库对象生成DDL,我们也得到用户sa与其他用户共享的对象列表:

Grant Select on dbo.mytable1 to anotheruserthansa
go
Grant Select on dbo.mytable2 to anotheruserthansa
go 

现在我们想要通过用户名来共享对象的DDL,就像在我的情况下用户是anotheruserthansa

我们需要一些可以为用户生成DDL的命令,我们可能没有密码。 我们需要使用我的用户sa,密码和模式名称来获取DDL:anotheruserthansa我们需要为用户sa共享到{{1}的所有数据库对象生成ddl }}

就像我们在 Oracle 中使用查询一样:

anotheruserthansa

如何使用其架构获取共享对象的DDL?

1 个答案:

答案 0 :(得分:0)

这可能是通过结合使用SQL查询来完成的,然后将参数传递给ddlgen

SELECT db_name()
     , su.name
     , so.type
     , so.name
 FROM sysusers su, sysobjects so
WHERE su.uid = so.uid
 AND su.name = "[name of user you are looking for]"

然后,您可以将dbname,对象类型和对象名称传递到ddlgen以生成DDL。

ddlgen -Usa -Sservername -Tobject_type -Nobject_name -Ddbname ...etc

仅供参考 - Sybase / SAP最佳实践建议不允许用户拥有数据库中的对象。建议所有数据库对象归dbo所有。这不应与Oracle和SQL Server使用的模式概念混淆。 ASE不使用这些逻辑划分。