TORONTO -- This was the kind of offensive performance the Toronto Blue Jays made a habit of last year, one they'd been waiting a while to see this season.
Troy Tulowitzki hit two solo home runs, Josh Donaldson added a three-run blast and the Blue Jays beat Oakland 9-3 on Saturday, snapping the Athletics' six-game winning streak.
"Today was more Toronto Blue Jays offense-like than what we've seen early on this season," Donaldson said.
It sure was. Toronto set a season high in runs and scored five or more in back-to-back games for the first time since the opening two games of the season.
"We've been waiting on that kind of day," manager John Gibbons said. "Hopefully we can build off that. It should loosen a lot of guys up."
J.A. Happ (3-0) allowed three runs and seven hits in seven innings to win his third straight start. The left-hander improved to 4-0 with a 2.95 ERA in eight career games against Oakland.
"He worked that two-seamer pretty well today and got us to roll over or just be a tiny bit off," Oakland's Marcus Semien said of Happ. "He threw a lot of strikes."
Ezequiel Carrera had the first four-hit game of his career and scored three times as the Blue Jays won for the first time in four games. He also made a pair of diving catches in left, one on Chris Coghlan in the fifth and another on Khris Davis in the ninth.
Mark Canha homered for the Athletics, whose seven-game road winning streak ended.
Tulowitzki homered to begin the fifth and seventh innings, the 12th multi-homer game of his career. It was the first multi-hit game of the season for Tulowitzki, who also singled in the first.
Donaldson went 3 for 4 with four RBIs. He drove in Toronto's final run with a single off Marc Rzepczynski in the eighth.
"We didn't really let up all day," Donaldson said. "We kind of kept going and going."
After former Blue Jays reliever Liam Hendriks hit Donaldson with a pitch in the sixth, Happ drilled Davis with his first pitch of the seventh. Home plate umpire Chris Conroy responded by issuing warnings to both dugouts.
"There was definitely no intention against Donaldson," Hendriks said. "I played with him last year. Great teammate, great guy. Just a ball that slipped out and managed to get him pretty square."
Canha's opposite-field drive in the first gave Oakland an early lead, but the Blue Jays answered against Chris Bassitt (0-1) in the bottom half. Jose Bautisa's groundout scored the tying run and Toronto took the lead on a two-out, bases-loaded single by Russell Martin.
Donaldson made it 5-1 with his three-run drive in the second, his AL-leading seventh. He matched his career high for home runs in April, set in 2014.
Bassitt matched a career worst by allowing six runs. He gave up nine hits in five innings, including two homers.
"I just didn't give us a chance," Bassitt said.
Bassitt has received no more than two runs of support in any of his four starts this season.
Canha's homer marked the first time in seven starts that Happ had allowed a run in the first inning.
SWING AND A MISS
Blue Jays batters struck out nine times, raising Toronto's major league-leading total to 180.
GIRODO GOES BACK TO BUFFALO
LHP Chad Girodo, promoted from Triple-A Buffalo on Friday to take the roster spot of suspended 1B Chris Colabello, was sent back to Buffalo following the game to clear a roster spot for RHP Drew Hutchison, who will make his season debut Sunday.
Blue Jays: OF Michael Saunders (hamstring) missed his second straight game.
Athletics: LHP Eric Surkamp (0-1, 3.68) has a 2.08 ERA in six career relief appearances against Toronto.
Blue Jays: With Toronto near the end of 16 games in 16 days, Hutchison is making a spot start to give the starters an extra day of rest.