Sponsored Content
Full Discussion: Help with Sybase DB
Homework and Emergencies Emergency UNIX and Linux Support Help with Sybase DB Post 302834259 by DGPickett on Thursday 18th of July 2013 02:47:12 PM
Old 07-18-2013
In Sybase, users are not the same as schema names, but are a related set. A Sybase instance has many databases: master, model, tempdb, ... including application DBs. One user is each DB's DataBase Owner, dbo. Tables and other ovjects in the table can be owned by dbo or by a granted user. For that user, he sees his own tables if in name conflict with dbo, my_table_name is my_db_name.my_user_id.my_table_name first else my_db_name..my_table_name, but you can look at other users' tables if you use the long form and have permission. A DB has some system tables to store schema information, like syscomments holds the text of all sp among other things.

I use SQuirreL to peruse DB in a vendor-independent way using the always free JDBC jars. Sybase has them as JConnect in various revisions. I have to use old JConnect 2 for my hp roman8 character set. FreeTDS also works for most things, and supports MS SQL Server, too (MS bought it from Sybase and does some neat skins).

Sybase manages things by stored procedures, mostly, so expect to be executing something like sp_adduser. Lots of Sybase Manuals Online. http://infocenter.sybase.com/help/in...g1/sag1569.htm

Sybase DB seem to like "clustered index" tables, where a clustered index actually holds the table, really more like an indexed sequential file, and other indexes are like side tables with sorted lists of keys and row locations. Clustered index access is much faster, unless you can answer a query with another index and no table access. Space management on old Sybase tables demands a clustered index. Sybase tables work better if you update statistics often enough to keep them relevant, like after a big load. Most prod databases have only dbo tables. Dev and test DB might have user tables, so everyone can diverge their testing and schema. This requires all code to use unqualified table names, which is a problem if using tables in many db.

All users have access to tempdb to create ephemeral (connection life) #name tables (no qualifier needed, names guaranteed unique) or server-run tables with explicit names tempdb..whatever, name conflict quite possible but persistent between sessions, so you can create a table in one isql, run bcp to load it and use another isql to mod the real DB. TempDB has less logging and such, so it is faster. The query planner may generate tables there automatically, like for a union. Master has info on all users and db, model is used to make new DB as a template.

Sybase original tables have page not row locking, but to be competitive in bidding requirements with DB2, Oracle and such they later came up with tables that have row locking, which are surely a different beast.

Sybase has replication, very popular, where the logs are filtered, edited, abstracted and shipped to other DB. Overehead tothe feeding DB is low, just log file i/o, and there may be dedicated 'stable' servers to process the replication, which can go to many servers. The class case was a company with NY, London and Tokyo offices, where each had 2 db replicated around the ring, and changes anywhere go everywhere. Another popular configuration is to have one or more report DB, possibly with different indexes (more, which slows churn), so the reports do not slow the transactions.

Not that I am a certified Sybase DBA or anything.
 

9 More Discussions You Might Find Interesting

1. Solaris

Connect From VB to Sybase 11

Dear All I have a problem that I can't connect from VB to Sybase 11. Could you help me? (2 Replies)
Discussion started by: Than Chanroeun
2 Replies

2. Shell Programming and Scripting

sybase and shell

I am writing a shell script that verifies if a device is created on wrong mounts 1> sp_helpdevice 2> go | awk '{print $2}' | grep database | grep -v `df -k | grep /dev/dsk | awk '{print $6}'` So if things are ok, the output should return nothing If the result gives 1 or more entry, then... (1 Reply)
Discussion started by: melanie_pfefer
1 Replies

3. Ubuntu

Sybase Installation on Ubuntu

Hi, Can any one please suggest me which version of Sybase 15.x I need to dowload for installing on my laptop(Dell Inspiron 1525) having Ubuntu8.1? Thanks & Regards, Siba Sankar Nayak (0 Replies)
Discussion started by: siba.s.nayak
0 Replies

4. Windows & DOS: Issues & Discussions

how to connect to sybase database?

hi, I'd like to connect to a Sybase ASE 12 through a a graphic user interface (GUI) that run on windows and solaris10, because i need to do some querys. The database is running on solaris 10. I'm not an expert using databases, but i know how to use some SQL commands through command line... (3 Replies)
Discussion started by: danin
3 Replies

5. Shell Programming and Scripting

Sybase Connection Issue

I am trying this >$ /usr/sybase/bin/isql -UABC -Pdef -SXYZ -b Getting the following error. Help is appreciated (1 Reply)
Discussion started by: pinnacle
1 Replies

6. AIX

Check Sybase installation

Hi, How do i check if Sybase is installed on aix..The sybase guy is doing remote installation and i need to check if he has installed sybase or not. ive tried the following approaches. #lslpp -L "*Sybase*" # tried other strings like "*ybase*" , "*base*" #lslpp -ha |grep syb # tried... (4 Replies)
Discussion started by: muzahed
4 Replies

7. Shell Programming and Scripting

sybase::bcp

I am trying to bcp in using sybase::bcp perl module. I can find we can give user, pwd and server name in the parameters. How can I give database and table name? (1 Reply)
Discussion started by: Deei
1 Replies

8. Shell Programming and Scripting

Sybase 12/15 compatability

This is more a database problem than a shell one, but we have a problem affecting our scripts, so I'm stretching the limits a bit! ;) We're in the process of migrating our application and a large number of associated scripts from Sybase 12.5.4 to Sybase 15. Scripts using 'isql' and 'bcp' include... (1 Reply)
Discussion started by: JerryHone
1 Replies

9. Shell Programming and Scripting

Sybase server

I have requirement to connect to different sybase server's and store the data into flat file and load into oracle using sqlloader for each day drop the table and re create it and load the data based on business date as parameter which was taking from parameter file.Any help on this should be... (0 Replies)
Discussion started by: mohan705
0 Replies
DBIx::Class::Storage::DBI::Sybase::ASE(3pm)		User Contributed Perl Documentation	       DBIx::Class::Storage::DBI::Sybase::ASE(3pm)

NAME
DBIx::Class::Storage::DBI::Sybase::ASE - Sybase ASE SQL Server support for DBIx::Class SYNOPSIS
This subclass supports DBD::Sybase for real (non-Microsoft) Sybase databases. DESCRIPTION
If your version of Sybase does not support placeholders, then your storage will be reblessed to DBIx::Class::Storage::DBI::Sybase::ASE::NoBindVars. You can also enable that driver explicitly, see the documentation for more details. With this driver there is unfortunately no way to get the "last_insert_id" without doing a "SELECT MAX(col)". This is done safely in a transaction (locking the table.) See "INSERTS WITH PLACEHOLDERS". A recommended connect_info setting: on_connect_call => [['datetime_setup'], ['blob_setup', log_on_update => 0]] METHODS
connect_call_blob_setup Used as: on_connect_call => [ [ 'blob_setup', log_on_update => 0 ] ] Does "$dbh->{syb_binary_images} = 1;" to return "IMAGE" data as raw binary instead of as a hex string. Recommended. Also sets the "log_on_update" value for blob write operations. The default is 1, but 0 is better if your database is configured for it. See "Handling_IMAGE/TEXT_data_with_syb_ct_get_data()/syb_ct_send_data()" in DBD::Sybase. connect_call_datetime_setup Used as: on_connect_call => 'datetime_setup' In connect_info to set: $dbh->syb_date_fmt('ISO_strict'); # output fmt: 2004-08-21T14:36:48.080Z $dbh->do('set dateformat mdy'); # input fmt: 08/13/1979 18:08:55.080 This works for both "DATETIME" and "SMALLDATETIME" columns, note that "SMALLDATETIME" columns only have minute precision. Schema::Loader Support As of version 0.05000, DBIx::Class::Schema::Loader should work well with most versions of Sybase ASE. FreeTDS This driver supports DBD::Sybase compiled against FreeTDS (<http://www.freetds.org/>) to the best of our ability, however it is recommended that you recompile DBD::Sybase against the Sybase Open Client libraries. They are a part of the Sybase ASE distribution: The Open Client FAQ is here: <http://www.isug.com/Sybase_FAQ/ASE/section7.html>. Sybase ASE for Linux (which comes with the Open Client libraries) may be downloaded here: <http://response.sybase.com/forms/ASE_Linux_Download>. To see if you're using FreeTDS check "$schema->storage->using_freetds", or run: perl -MDBI -le 'my $dbh = DBI->connect($dsn, $user, $pass); print $dbh->{syb_oc_version}' It is recommended to set "tds version" for your ASE server to 5.0 in "/etc/freetds/freetds.conf". Some versions or configurations of the libraries involved will not support placeholders, in which case the storage will be reblessed to DBIx::Class::Storage::DBI::Sybase::ASE::NoBindVars. In some configurations, placeholders will work but will throw implicit type conversion errors for anything that's not expecting a string. In such a case, the "auto_cast" option from DBIx::Class::Storage::DBI::AutoCast is automatically set, which you may enable on connection with connect_call_set_auto_cast. The type info for the "CAST"s is taken from the "data_type" in DBIx::Class::ResultSource definitions in your Result classes, and are mapped to a Sybase type (if it isn't already) using a mapping based on SQL::Translator. In other configurations, placeholders will work just as they do with the Sybase Open Client libraries. Inserts or updates of TEXT/IMAGE columns will NOT work with FreeTDS. INSERTS WITH PLACEHOLDERS
With placeholders enabled, inserts are done in a transaction so that there are no concurrency issues with getting the inserted identity value using "SELECT MAX(col)", which is the only way to get the "IDENTITY" value in this mode. In addition, they are done on a separate connection so that it's possible to have active cursors when doing an insert. When using "DBIx::Class::Storage::DBI::Sybase::ASE::NoBindVars" transactions are unnecessary and not used, as there are no concurrency issues with "SELECT @@IDENTITY" which is a session variable. TRANSACTIONS
Due to limitations of the TDS protocol and DBD::Sybase, you cannot begin a transaction while there are active cursors, nor can you use multiple active cursors within a transaction. An active cursor is, for example, a ResultSet that has been executed using "next" or "first" but has not been exhausted or reset. For example, this will not work: $schema->txn_do(sub { my $rs = $schema->resultset('Book'); while (my $row = $rs->next) { $schema->resultset('MetaData')->create({ book_id => $row->id, ... }); } }); This won't either: my $first_row = $large_rs->first; $schema->txn_do(sub { ... }); Transactions done for inserts in "AutoCommit" mode when placeholders are in use are not affected, as they are done on an extra database handle. Some workarounds: o use DBIx::Class::Storage::DBI::Replicated o connect another Schema o load the data from your cursor with "all" in DBIx::Class::ResultSet MAXIMUM CONNECTIONS
The TDS protocol makes separate connections to the server for active statements in the background. By default the number of such connections is limited to 25, on both the client side and the server side. This is a bit too low for a complex DBIx::Class application, so on connection the client side setting is set to 256 (see "maxConnect" in DBD::Sybase.) You can override it to whatever setting you like in the DSN. See <http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sag1/html/sag1/sag1272.htm> for information on changing the setting on the server side. DATES
See "connect_call_datetime_setup" to setup date formats for DBIx::Class::InflateColumn::DateTime. TEXT
/IMAGE COLUMNS DBD::Sybase compiled with FreeTDS will NOT allow you to insert or update "TEXT/IMAGE" columns. Setting "$dbh->{LongReadLen}" will also not work with FreeTDS use either: $schema->storage->dbh->do("SET TEXTSIZE $bytes"); or $schema->storage->set_textsize($bytes); instead. However, the "LongReadLen" you pass in connect_info is used to execute the equivalent "SET TEXTSIZE" command on connection. See "connect_call_blob_setup" for a connect_info setting you need to work with "IMAGE" columns. BULK API
The experimental DBD::Sybase Bulk API support is used for populate in void context, in a transaction on a separate connection. To use this feature effectively, use a large number of rows for each populate call, eg.: while (my $rows = $data_source->get_100_rows()) { $rs->populate($rows); } NOTE: the add_columns calls in your "Result" classes must list columns in database order for this to work. Also, you may have to unset the "LANG" environment variable before loading your app, as "BCP -Y" is not yet supported in DBD::Sybase . When inserting IMAGE columns using this method, you'll need to use "connect_call_blob_setup" as well. COMPUTED COLUMNS
If you have columns such as: created_dtm AS getdate() represent them in your Result classes as: created_dtm => { data_type => undef, default_value => 'getdate()', is_nullable => 0, inflate_datetime => 1, } The "data_type" must exist and must be "undef". Then empty inserts will work on tables with such columns. TIMESTAMP COLUMNS
"timestamp" columns in Sybase ASE are not really timestamps, see: http://dba.fyicenter.com/Interview-Questions/SYBASE/The_timestamp_datatype_in_Sybase_.html <http://dba.fyicenter.com/Interview- Questions/SYBASE/The_timestamp_datatype_in_Sybase_.html>. They should be defined in your Result classes as: ts => { data_type => 'timestamp', is_nullable => 0, inflate_datetime => 0, } The "<inflate_datetime =" 0>> is necessary if you use DBIx::Class::InflateColumn::DateTime, and most people do, and still want to be able to read these values. The values will come back as hexadecimal. TODO
o Transitions to AutoCommit=0 (starting a transaction) mode by exhausting any active cursors, using eager cursors. o Real limits and limited counts using stored procedures deployed on startup. o Blob update with a LIKE query on a blob, without invalidating the WHERE condition. o bulk_insert using prepare_cached (see comments.) AUTHOR
See "AUTHOR" in DBIx::Class and "CONTRIBUTORS" in DBIx::Class. LICENSE
You may distribute this code under the same terms as Perl itself. perl v5.14.2 2011-11-29 DBIx::Class::Storage::DBI::Sybase::ASE(3pm)
All times are GMT -4. The time now is 03:50 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy